pay-online-analysis.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664
  1. var self,
  2. initLevel,
  3. type,
  4. level,
  5. area,
  6. title,
  7. startDate = '',
  8. endDate = '',
  9. lowLevel,
  10. dateType = 1, //折线图坐标值1-日,2-周,3-月
  11. analysisType = "1", // 筛选维度的id, 1-按任务,2-按人口,3-高血压,4-糖尿病,5-65岁以上人群
  12. areaType; //标记底部区域选中的tab的值, 4 - 各区, 3 - 社区, 2 - 团队
  13. var userRole;
  14. var reqParam = []; //请求参数
  15. var reqList = []; //请求的链接数据,根据这些信息后退的时候使用
  16. //定义年份
  17. var chooseYear;
  18. var now = new Date();
  19. if(now.getMonth() >= 6){
  20. chooseYear = now.getFullYear();
  21. }else{
  22. chooseYear = now.getFullYear() - 1;
  23. }
  24. mui.plusReady(function(){
  25. var self = plus.webview.currentWebview();
  26. // userRole = plus!=null ? JSON.parse(plus.storage.getItem("selectedRole")) : {};
  27. // initLevel = userRole.code == CITY_CODE ? 4 : userRole.code.length==6 ? 3 : 2;
  28. initLevel = self.level;
  29. level = initLevel;
  30. area = self.code;
  31. title = self.title;
  32. if(self.year){
  33. chooseYear = self.year;
  34. }
  35. startDate = getStartDate();
  36. endDate = getEndDate();
  37. //初始默认选中的时间和类型
  38. $(".choose-label").text(chooseYear);
  39. $("#areaTitle").text(title);
  40. //控制底部各区等tab的显示
  41. showTabs();
  42. initReqParams(); //现获得页面请求的接口参数
  43. //记录返回链接信息
  44. reqList.push({
  45. level: level,
  46. lowLevel: lowLevel,
  47. area: area,
  48. title: title,
  49. analysisType: analysisType,
  50. req: reqParam
  51. });
  52. loadData([0,1,2]); //现获得页面请求的接口参数
  53. initScroller();
  54. shaixuanInit(self);
  55. bindEvents();
  56. });
  57. //获得页面请求的接口参数
  58. function initReqParams(){
  59. var mIndex = 82, //折线图指标index
  60. bIndexs = {"4": "75", "3": "76", "2": "77"};
  61. var bIndex = 82; //bIndexs[level];
  62. reqParam = [{
  63. url: "/statistics/signPayOnline",
  64. reqType: 'get',
  65. data: {level:level, area:area, year: chooseYear}
  66. },{
  67. url: "/statistics/interval_total",
  68. reqType: 'get',
  69. data: {level: level, area: area, startDate: startDate, endDate: endDate, interval: dateType, index: mIndex}
  70. },{
  71. url: "/statistics/lowlevel_all_sign_pay_online",
  72. reqType: 'post',
  73. data: {sort: 1, date: endDate, level: level, index: bIndex, area: area}
  74. }];
  75. if(lowLevel){
  76. reqParam[2].data.lowLevel = lowLevel;
  77. }
  78. }
  79. /*
  80. * 加载页面数据
  81. * @param loadArr array 记录需要请求的区域0-顶部,1-中间,2-底部
  82. */
  83. function loadData(loadArr){
  84. plus.nativeUI.showWaiting();
  85. getJieZhiTime();
  86. var reqPromise = [];
  87. for(var i=0; i<loadArr.length; i++){
  88. var j = loadArr[i];
  89. reqPromise.push(reqParam[j]);
  90. }
  91. getReqPromises(reqPromise, true).then(function(ress){
  92. var res1, res2, res3;
  93. for(var i=0; i<loadArr.length; i++){
  94. var j = loadArr[i] + 1;
  95. if(j == 1){
  96. res1 = ress[i];
  97. }
  98. if(j == 2){
  99. res2 = ress[i];
  100. }
  101. if(j == 3){
  102. res3 = ress[i];
  103. }
  104. }
  105. if(res1 && res1.status == 200){
  106. handleTopData(res1.data);
  107. }
  108. if(res2 && res2.status == 200){
  109. handleSecondPanelData(res2.data);
  110. }
  111. if(res3){
  112. if(res3.status == 200){
  113. listHandle(res3.data);
  114. }else{
  115. $("#listTable").empty();
  116. mui.toast(res3.msg);
  117. }
  118. }
  119. plus.nativeUI.closeWaiting();
  120. });
  121. }
  122. /*
  123. * 加载数据截止时间
  124. */
  125. function getJieZhiTime(){
  126. sendPost("/statistics/time",null,function(res){
  127. },function(res){
  128. if(res.status=="200"){
  129. var date = (res.data && res.data.substring(11,16)) || "";
  130. $(".jiezhi-time").html("("+date+")");
  131. }
  132. });
  133. }
  134. /*
  135. * 处理顶部水球图数据
  136. */
  137. function handleTopData(res){
  138. $(".online-num").text(res.signPayOnlineNum);
  139. $(".online-rate").text(res.signPayOnlineRate);
  140. $(".offline-num").text(res.signPayUnderNum);
  141. $(".offline-rate").text(res.signPayUnderRate);
  142. var pieChart = echarts.init(document.getElementById('pieChart')),
  143. options = {
  144. tooltip: {
  145. trigger: 'item',
  146. formatter: "{b}:<br/> {c} ({d}%)"
  147. },
  148. series: [
  149. {
  150. type:'pie',
  151. radius: ['80%', '70%'],
  152. color:['#ffc800', '#17b3ec'],
  153. avoidLabelOverlap: false,
  154. label: {
  155. normal: {
  156. show: false,
  157. position: 'center'
  158. },
  159. // emphasis: {
  160. // show: true,
  161. // textStyle: {
  162. // fontSize: '16',
  163. // fontWeight: 'bold'
  164. // }
  165. // }
  166. },
  167. labelLine: {
  168. normal: {
  169. show: false
  170. }
  171. },
  172. data:[
  173. {value:res.signPayOnlineNum, name:'线上缴费人数'},
  174. {value:res.signPayUnderNum, name:'线下缴费人数'}
  175. ]
  176. }
  177. ]
  178. };
  179. pieChart.setOption(options);
  180. }
  181. /*
  182. * 处理中间折线图数据
  183. */
  184. function handleSecondPanelData(data){
  185. for(var p in data){
  186. var xData = _.map(data[p].data, function(o){
  187. return o.range;
  188. });
  189. var yData = _.map(data[p].data, function(o){
  190. return o.amount;
  191. });
  192. var lastIndex = yData.length % 10;
  193. if(yData.length >10 ){
  194. var dataZoom_end = 100-(9/yData.length)*100;
  195. }else{
  196. var dataZoom_end = 0;
  197. }
  198. //初始给定第一版页面中时间区间
  199. if(dateType == 3){
  200. var d1 = xData[yData.length - lastIndex],
  201. d2 = xData[yData.length -1];
  202. $("#startValue").text(d1.substr(0,4)+"年"+d1.substr(5,2)+"月");
  203. $("#endValue").text(d2.substr(0,4)+"年"+d2.substr(5,2)+"月");
  204. }else{
  205. $("#startValue").text(xData[yData.length - lastIndex]);
  206. $("#endValue").text(xData[yData.length -1]);
  207. }
  208. var lineCharts = echarts.init(document.getElementById('lineChart'));
  209. var options = {
  210. tooltip: {
  211. trigger: 'axis'
  212. },
  213. legend: {
  214. top: 'bottom',
  215. data:['线上缴费量']
  216. },
  217. grid: {
  218. left: '10px',
  219. right: '10px',
  220. bottom: '30px',
  221. top: '10px',
  222. containLabel: true
  223. },
  224. xAxis: {
  225. type: 'category',
  226. boundaryGap: false,
  227. data: xData,
  228. axisLabel: {
  229. interval:0,//横轴信息全部显示
  230. formatter: function (value, index) {
  231. if(dateType == 1 || dateType == 2){
  232. if(index == 0){
  233. $("#startValue").text(value);
  234. return value.substr(5,2)+"月"+value.substr(8,2);
  235. }else{
  236. if(index == 10){
  237. $("#endValue").text(value);
  238. }
  239. return value.substr(8,2);
  240. }
  241. }else if(dateType == 3){
  242. var val = value.substr(5,2)+"月"
  243. if(index == 0){
  244. $("#startValue").text(value.substr(0,4)+"年"+val);
  245. }else{
  246. if(index == 9){
  247. $("#endValue").text(value.substr(0,4)+"年"+val);
  248. }
  249. }
  250. return val;
  251. }
  252. }
  253. }
  254. },
  255. yAxis: {
  256. type: 'value',
  257. axisPointer: {
  258. snap: true
  259. },
  260. scale: true,
  261. minInterval: 1,
  262. boundaryGap: ['10%', '30%']
  263. },
  264. dataZoom: [{//给x轴设置滚动条
  265. show: false,
  266. start: dataZoom_end,
  267. end: 100,
  268. type: 'slider',
  269. zoomLock: true,
  270. },{ //下面这个属性是内容区域配置
  271. start: dataZoom_end,
  272. end: 100,
  273. type: 'inside',
  274. zoomLock: true,
  275. }],
  276. series: [{
  277. name: '线上缴费量',
  278. type: 'line',
  279. smooth: true,
  280. data: yData,
  281. lineStyle:{
  282. normal: {
  283. color: '#12b7f5'
  284. }
  285. },
  286. itemStyle:{
  287. normal: {
  288. color: '#12b7f5'
  289. }
  290. }
  291. }]
  292. };
  293. lineCharts.setOption(options);
  294. }
  295. }
  296. /*
  297. * 处理底部区域数据
  298. */
  299. function listHandle(res){
  300. for(var k in res){
  301. var list = res[k];
  302. var topArr = soreRank(amountArr(list));
  303. list = _.map(list, function(o, index){
  304. o.top = topArr[index];
  305. o.rate = parseFloat(o.rate).toFixed(2);
  306. o.targetRate = parseFloat(o.targetRate).toFixed(2);
  307. return o;
  308. })
  309. var html = template("data-list", {list: list, level: level, lowLevel: lowLevel, analysisType: analysisType});
  310. $("#listTable").empty().append(html);
  311. }
  312. }
  313. /*
  314. * 控制底部各区等tab的显示,根据level来控制
  315. */
  316. function showTabs(){
  317. $(".area-tab").removeClass("active");
  318. switch(parseInt(level)){
  319. case 4:
  320. $(".area-tab").show();
  321. $(".area-tab").eq(0).addClass("active");
  322. areaType = "4";
  323. break;
  324. case 3:
  325. $(".area-tab").eq(0).hide();
  326. $(".area-tab").eq(1).show();
  327. $(".area-tab").eq(1).addClass("active");
  328. areaType = "3";
  329. break;
  330. case 2:
  331. $(".area-tab").eq(0).hide();
  332. $(".area-tab").eq(1).hide();
  333. $(".area-tab").eq(2).addClass("active");
  334. areaType = "2";
  335. break;
  336. case 1: //团队
  337. $(".area-tab-panel").parent().remove();
  338. break;
  339. }
  340. }
  341. /*
  342. * 初始化scroller
  343. */
  344. function initScroller(){
  345. //阻尼系数
  346. var deceleration = mui.os.ios?0.003:0.0009;
  347. mui('.mui-scroll-wrapper').scroll({
  348. bounce: false,
  349. indicators: true, //是否显示滚动条
  350. deceleration:deceleration
  351. });
  352. mui('.mui-scroll-wrapper').pullRefresh({
  353. down: {
  354. callback: function() {
  355. var self = this;
  356. setTimeout(function() {
  357. initReqParams();
  358. loadData([0,1,2]);
  359. self.endPulldownToRefresh();
  360. }, 1000);
  361. }
  362. }
  363. });
  364. }
  365. /**
  366. * 初始化筛选事件
  367. */
  368. function shaixuanInit(main){
  369. var shaixuan = plus.webview.getWebviewById('shaixuan2.html');
  370. if(!shaixuan){
  371. shaixuan = mui.createWindow({
  372. id: 'shaixuan2.html',
  373. url: 'shaixuan2.html',
  374. styles: {
  375. top: 0,
  376. bottom: 0,
  377. left: '20%',
  378. width: '80%',
  379. scorllIndicator: "none"
  380. },
  381. show:{
  382. aniShow: "slide-in-right",
  383. duration: "400"
  384. },
  385. extras:{
  386. noYear: '2016',
  387. chooseYear: chooseYear
  388. }
  389. });
  390. }
  391. window.addEventListener("hideShaiXuan",function(){
  392. console.log("hideShaiXuan");
  393. main.setStyle({mask:"none"});
  394. shaixuan.hide();
  395. }, false);
  396. window.addEventListener("showShaiXuan", function() {
  397. shaixuan.show();
  398. main.setStyle({mask:"rgba(0,0,0,0.5)"});
  399. main.addEventListener("maskClick",function(){
  400. main.setStyle({mask:"none"});
  401. shaixuan.hide();
  402. }, false);
  403. });
  404. }
  405. function bindEvents(){
  406. //说明信息相关事件
  407. $("#closeBtn").on("tap", function(){
  408. $(".information").hide();
  409. });
  410. $(".info-icon").on("tap", function(){
  411. $(".information").show();
  412. });
  413. //左滑筛选区域的数据
  414. $('.header-link').on("tap", function(){
  415. var self = plus.webview.currentWebview();
  416. mui.fire(self, "showShaiXuan");
  417. });
  418. //日、周、月按钮切换
  419. $(".date-tag").on("tap",function(){
  420. dateType = $(this).attr("data-type");
  421. $(".date-tag").removeClass("active");
  422. $(this).addClass("active");
  423. initReqParams();
  424. loadData([1]); //只加载中间区域的数据
  425. });
  426. //底部各区等区域的tab切换
  427. $(".area-tab").on('tap', function(){
  428. var $this = $(this),
  429. type = $this.attr("data-val"); //4 - 各区, 3 - 社区, 2 - 团队
  430. areaType = type;
  431. if($this.hasClass("active")){
  432. return false;
  433. }
  434. $(".area-tab").removeClass("active");
  435. $this.addClass("active");
  436. if(type == "4"){
  437. lowLevel = 0;
  438. }else if(type == "3"){
  439. lowLevel = 2;
  440. }else{
  441. lowLevel = 1;
  442. }
  443. initReqParams();
  444. loadData([2]);
  445. });
  446. //底部每条记录的点击事件
  447. $("#listTable").on('tap', ".data-row", function(){
  448. var $this = $(this),
  449. name = $this.attr("data-name"),
  450. code = $this.attr("data-code"),
  451. $selectTab = $(".area-tab.active");
  452. if($selectTab.attr("data-val") == "2"){ //获得团队信息,弹框显示数据
  453. showTeamInfo(code);
  454. return false;
  455. }
  456. title = name;
  457. area = code;
  458. var newlevel = level - 1;
  459. //如果是市级管理员,先点击“社区”tab后再往下看下一级的数据,需要将level再-1
  460. if(newlevel == 3 && lowLevel == 2){
  461. newlevel -- ;
  462. }
  463. lowLevel = '';
  464. level = newlevel;
  465. $("#areaTitle").text(title);
  466. showTabs();
  467. initReqParams();
  468. //记录返回链接信息
  469. reqList.push({
  470. level: level,
  471. lowLevel: lowLevel,
  472. area: area,
  473. title: title,
  474. analysisType: analysisType,
  475. req: reqParam
  476. });
  477. loadData([0,1,2]);
  478. });
  479. //弹出遮罩
  480. $(".icon-remark").on("click", function(e) {
  481. $(".modal-overlay").addClass("modal-overlay-visible");
  482. setTimeout(function(){
  483. $(".modal-content").show();
  484. },50)
  485. });
  486. $(".div-close,.modal-overlay").on("click",function(){
  487. $(".modal-overlay").removeClass("modal-overlay-visible");
  488. $(".modal-content").hide();
  489. });
  490. //添加页面监听
  491. window.addEventListener("refresh", function(e){
  492. var year = e.detail.year;
  493. chooseYear = year;
  494. //重置变量值
  495. level = initLevel;
  496. area = userRole.code;
  497. title = userRole.name;
  498. lowLevel = "";
  499. startDate = getStartDate();
  500. endDate = getEndDate();
  501. $("#areaTitle").text(title);
  502. $(".choose-label").text(chooseYear);
  503. showTabs();
  504. initReqParams();
  505. //清空请求数组
  506. reqList.splice(0, reqList.length);
  507. //记录返回链接信息
  508. reqList.push({
  509. level: level,
  510. lowLevel: lowLevel,
  511. area: area,
  512. title: title,
  513. analysisType: analysisType,
  514. req: reqParam
  515. });
  516. loadData([0,1,2]);
  517. });
  518. }
  519. /*
  520. * 获得团队信息
  521. */
  522. function showTeamInfo(teamId){
  523. var url = "/doctor/admin-teams/teams/info",
  524. params = {
  525. teamId: teamId
  526. };
  527. plus.nativeUI.showWaiting();
  528. sendGet(url, params, null, function(res){
  529. if(res.status == 200){
  530. var data = res.data;
  531. data.memberLength = data.members.length;
  532. var html = template("teamInfo", data);
  533. $("#teamInfoBox").empty().append(html);
  534. $(".modal-overlay").addClass("modal-overlay-visible");
  535. setTimeout(function(){
  536. $(".modal-content").show();
  537. },50)
  538. }else{
  539. mui.toast(res.msg);
  540. }
  541. plus.nativeUI.closeWaiting();
  542. }, true);
  543. }
  544. function getStartDate(){
  545. return chooseYear+'-07-01';
  546. }
  547. //获取结束时间
  548. function getEndDate(){
  549. var nowdate = new Date();
  550. var year = nowdate.getFullYear();
  551. var month = nowdate.getMonth() + 1;
  552. var day = nowdate.getDate();
  553. var endDate = new Date((parseInt(chooseYear)+1) + '-06-30');
  554. var now = new Date();
  555. if(now <= endDate){
  556. return now.format("yyyy-MM-dd");
  557. }else{
  558. return (parseInt(chooseYear)+1) + '-06-30';
  559. }
  560. }
  561. //续签量数据集合
  562. function amountArr(list){
  563. var amountArr = [];
  564. for(var k in list){
  565. amountArr.push(list[k].signPayOnlineNum);
  566. }
  567. return amountArr;
  568. }
  569. //排名方法
  570. function soreRank(arr){
  571. var temp = [];
  572. var lis = [];
  573. for(var i=0;i<arr.length;i++){
  574. lis.push(arr[i]);
  575. }
  576. lis = _.uniq(lis);
  577. for(var i=0;i<arr.length;i++){
  578. temp[i] = lis.indexOf(arr[i])+1;
  579. }
  580. return temp;
  581. }
  582. //返回事件
  583. var old_back = mui.back;
  584. mui.back = function(){
  585. if(reqList.length == 1){
  586. old_back();
  587. }
  588. else{
  589. var preInfo = reqList[reqList.length - 1];
  590. if(preInfo.level == level && preInfo.lowLevel == lowLevel){
  591. reqList.pop();
  592. var info = reqList[reqList.length - 1];
  593. }else{
  594. info = preInfo;
  595. }
  596. level = info.level;
  597. area = info.area;
  598. title = info.title;
  599. lowLevel = info.lowLevel;
  600. sumType = info.sumType;
  601. tagCode = info.tagCode;
  602. analysisType = info.analysisType;
  603. $("#areaTitle").html(title);
  604. showTabs();
  605. initReqParams();
  606. loadData([0,1,2]);
  607. }
  608. }