common.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  1. var indexName = {'index_128': '预约总量', 'index_129': '居民预约量', 'index_130': '代预约量'};
  2. function getSignDate(){ //获取初始化签约年
  3. var nowdate = new Date();
  4. var year = nowdate.getFullYear();
  5. var month = nowdate.getMonth() + 1;
  6. if(month<=6){
  7. year = year - 1
  8. }
  9. return year
  10. }
  11. function getStartDate(chooseYear){
  12. // 按年度来计算的时候,开始时间是该年度7月1号还是到下一个年的6月30号结束
  13. if(chooseYear == 2016){
  14. return chooseYear + "-08-01";
  15. }else{
  16. return chooseYear+'-07-01';
  17. }
  18. }
  19. //获取结束时间
  20. function getEndDate(chooseYear){
  21. chooseYear = parseInt(chooseYear);
  22. var endDate = new Date((chooseYear+1) + '-06-30'),
  23. now = new Date();
  24. if(now <= endDate){
  25. return now.format("yyyy-MM-dd");
  26. }else{
  27. return (chooseYear+1) + '-06-30';
  28. }
  29. }
  30. //获取结束时间29
  31. function getEndDate29(chooseYear){
  32. chooseYear = parseInt(chooseYear);
  33. var endDate = new Date((chooseYear+1) + '-06-29'),
  34. now = new Date();
  35. if(now <= endDate){
  36. return now.format("yyyy-MM-dd");
  37. }else{
  38. return (chooseYear+1) + '-06-29';
  39. }
  40. }
  41. /**
  42. * 获取多少天前的日期
  43. */
  44. function getDateBefore(days) {
  45. var now = new Date();
  46. var date = new Date(now.getTime() - days * 24 * 3600 * 1000);
  47. var year = date.getFullYear();
  48. var month = date.getMonth() + 1;
  49. var day = date.getDate();
  50. var hour = date.getHours();
  51. var minute = date.getMinutes();
  52. var second = date.getSeconds();
  53. return year + '-' + (month < 10 ? '0' + month : month) + '-' + (day < 10 ? '0' + day : day);
  54. }
  55. /*
  56. * 获取用来排序的字段值,返回数组
  57. * 参数: list - 列表, key - 字段的名称
  58. */
  59. function getKeyValueArr(list, key){
  60. var arr = [];
  61. for(var k in list){
  62. arr.push(list[k][key]);
  63. }
  64. return arr;
  65. }
  66. /*
  67. * 排名
  68. */
  69. function soreRank(arr){
  70. var temp = [];
  71. var lis = [];
  72. for(var i=0;i<arr.length;i++){
  73. lis.push(arr[i]);
  74. }
  75. lis = _.uniq(lis);
  76. for(var i=0;i<arr.length;i++){
  77. temp[i] = lis.indexOf(arr[i])+1;
  78. }
  79. return temp;
  80. }
  81. /*
  82. * 绘制饼图数据处理 // elId, arry, title, hasNum,colors,radius,noLedend,param
  83. */
  84. function handlePieData(arg){
  85. var legend = {
  86. orient: 'vertical',
  87. right: arg.legendRight||'15%',
  88. y:'center',
  89. };
  90. var colorList=[]
  91. legendNames = [];
  92. var arr1 = _.map(arg.arry, function(o,i){
  93. var count = 0
  94. if(arg.param){
  95. count = parseFloat(o[arg.param])
  96. }else{
  97. count = parseFloat(o.amount)
  98. }
  99. var obj = {
  100. name: o[arg.nameparam]||o.name,
  101. count: count
  102. };
  103. legendNames.push(obj);
  104. if(o.code){
  105. colorList.push(arg.colors[o.code])
  106. }else{
  107. colorList.push(arg.colors[i])
  108. }
  109. return {
  110. value: count,
  111. name: o[arg.nameparam]||o.name
  112. }
  113. });
  114. legend.formatter = function(name){
  115. if(arg.hasNum){
  116. var target;
  117. for (var i = 0, l = legendNames.length; i < l; i++) {
  118. if (legendNames[i].name == name) {
  119. target = parseInt(legendNames[i].count);
  120. }
  121. }
  122. return name+": "+target
  123. }else{
  124. return name
  125. }
  126. }
  127. if(arg.noLedend){ //true时无注释
  128. drawPie(arg.elId, arr1, colorList, null, arg.position||['50%', '51%'], arg.radius||['70%', '90%'], arg.title)
  129. }else{
  130. drawPie(arg.elId, arr1, colorList, legend, arg.position||['30%', '51%'], arg.radius||['70%', '90%'], arg.title)
  131. }
  132. }
  133. /*
  134. * 绘制饼图
  135. */
  136. function drawPie(elId, arry, color, legend, center, radius, title){
  137. var pieChart = echarts.init(document.getElementById(elId));
  138. var options = {
  139. tooltip: {
  140. trigger: 'item',
  141. formatter: "{b} : {c} ({d}%)",
  142. // position: ['50%', '50%']
  143. },
  144. color: color,
  145. series: [
  146. {
  147. type:'pie',
  148. radius: ['80%', '99%'],
  149. startAngle: 270,
  150. legendHoverLink: false,
  151. hoverAnimation: false,
  152. avoidLabelOverlap: false,
  153. label: {
  154. normal: {
  155. show: false,
  156. textStyle: {
  157. color: "#000",
  158. }
  159. }
  160. },
  161. labelLine: {
  162. normal: {
  163. show: false
  164. }
  165. },
  166. data:arry,
  167. }]
  168. };
  169. if(legend){
  170. options.legend = legend;
  171. }
  172. if(center){
  173. options.series[0].center = center;
  174. }
  175. if(radius){
  176. options.series[0].radius = radius;
  177. }
  178. if(title){
  179. options.title = title
  180. }
  181. pieChart.clear();
  182. pieChart.setOption(options);
  183. }
  184. /*
  185. * 绘制饼图
  186. * arry [{name: '', value: ''}]
  187. * color ['#ffc800', '#17b3ec']
  188. * silent 图形是否不响应和触发鼠标事件,默认为 false,即响应和触发鼠标事件
  189. */
  190. function drawPieChart(elId, arry, color, silent){
  191. var myChart = echarts.init(document.getElementById(elId));
  192. var option = {
  193. tooltip: {
  194. trigger: 'item',
  195. formatter: "{b} : {c} ({d}%)",
  196. position: ['50%', '50%']
  197. },
  198. color: color,
  199. series: [
  200. {
  201. type:'pie',
  202. radius: ['80%', '99%'],
  203. startAngle: 270,
  204. legendHoverLink: false,
  205. hoverAnimation: false,
  206. avoidLabelOverlap: false,
  207. silent: silent,
  208. label: {
  209. normal: {
  210. show: false,
  211. textStyle: {
  212. color: "#000"
  213. }
  214. }
  215. },
  216. labelLine: {
  217. normal: {
  218. show: false
  219. }
  220. },
  221. data:arry
  222. }]
  223. };
  224. $("#"+elId).removeAttr("_echarts_instance_");
  225. myChart.setOption(option);
  226. return myChart;
  227. }
  228. /**
  229. * 绘制柱状图
  230. */
  231. function drawBarChart(el, xData, yData, color, name){
  232. var myChart = echarts.init(document.getElementById(el));
  233. // 指定图表的配置项和数据
  234. var option = {
  235. tooltip: {
  236. trigger: 'item'
  237. },
  238. toolbox: {
  239. dataZoom: true,
  240. show: true,
  241. orient: 'vertical',
  242. x: 'right',
  243. y: 'center'
  244. },
  245. grid: {
  246. left: '20px',
  247. right: '20px',
  248. bottom: '20px',
  249. top: '20px',
  250. containLabel: true
  251. },
  252. xAxis: [{
  253. type: 'category',
  254. data: xData,
  255. axisLabel: {
  256. interval:0,//横轴信息全部显示
  257. },
  258. splitLine: {
  259. show: false
  260. }
  261. }],
  262. yAxis: [{
  263. type: 'value',
  264. splitLine: {show:false}
  265. }],
  266. series: [{
  267. clickable: true,
  268. name: name,
  269. itemStyle : {
  270. normal: {
  271. label : {
  272. show: true, position: 'top'
  273. },
  274. color: color
  275. }
  276. },
  277. barWidth: 20,
  278. type: 'bar',
  279. data: yData
  280. }]
  281. };
  282. // 使用刚指定的配置项和数据显示图表。
  283. myChart.setOption(option);
  284. return myChart;
  285. }
  286. /**
  287. * 绘制折线图数据处理
  288. * @param {Object} elId div的id值
  289. * @param {Object} data 数据值
  290. * @param {Object} selectedDateType true的时候x轴值年-月-日 1-日,2-周, 3-月
  291. */
  292. function getChartData(elId, data, selectedDateType,hasLegend,title,unit){
  293. var dataZoom_end,
  294. xDatas = [],
  295. yDatas = [],
  296. names = [],
  297. colors = ['#12b7f5', '#cd67fd','#FF9526'];
  298. for(var p in data){
  299. if(hasLegend){
  300. names.push(indexName[p]);
  301. }
  302. var xData = _.map(data[p], function(o){
  303. return o.range;
  304. });
  305. var yData = _.map(data[p], function(o){
  306. return o.amount;
  307. });
  308. xDatas.push(xData);
  309. yDatas.push(yData);
  310. var lastIndex = yData.length % 10;
  311. if(yData.length >10 ){
  312. dataZoom_end = 100-(9/yData.length)*100;
  313. }else{
  314. dataZoom_end = 0;
  315. }
  316. }
  317. setTimeout(function(){
  318. EventBus.$emit("draw-line-chart", {
  319. panelName : title,
  320. quotaNames : names,
  321. xData : xDatas[0],
  322. yDatas : yDatas,
  323. colors : colors,
  324. selectedDateType: selectedDateType,
  325. nowlineid : elId,
  326. unit:unit
  327. });
  328. },10)
  329. }
  330. /**
  331. * 绘制柱状图数据处理
  332. * @param {Object} elId div的id值
  333. * @param {Object} data 数据值
  334. */
  335. function getBarData(arg){
  336. var dataZoom_end,
  337. xDatas = [],
  338. yDatas = [],
  339. names = [],
  340. colors = ['#12b7f5', '#cd67fd','#FF9526'];
  341. if(arg.colors){
  342. colors = arg.colors
  343. }
  344. for(var p in arg.data){
  345. if(arg.hasLegend){
  346. names.push(arg.indexNames[p]);
  347. }
  348. var xData = _.map(arg.data[p].data||arg.data[p], function(o){
  349. return o[arg.rangeParams]||o.range;
  350. });
  351. var yData = _.map(arg.data[p].data||arg.data[p], function(o){
  352. return o[arg.amountParams]||o.amount;
  353. });
  354. xDatas.push(xData);
  355. yDatas.push(yData);
  356. var lastIndex = yData.length % 10;
  357. if(yData.length >10 ){
  358. dataZoom_end = 100-(9/yData.length)*100;
  359. }else{
  360. dataZoom_end = 0;
  361. }
  362. }
  363. if(arg.typeV){
  364. drawBarV({elId:arg.elId, name:names, dataZoom_end:dataZoom_end,
  365. xData:xDatas[0], yDatas:yDatas, colors:colors,barCategoryGap:arg.barCategoryGap,argInit:arg})
  366. }else{
  367. drawBarH({elId:arg.elId, name:names, dataZoom_end:dataZoom_end,
  368. xData:xDatas[0], yDatas:yDatas, colors:colors,barCategoryGap:arg.barCategoryGap,argInit:arg})
  369. }
  370. }
  371. function drawBarH(arg){
  372. var barCharts = echarts.init(document.getElementById(arg.elId));
  373. var options = {
  374. tooltip: {
  375. trigger: 'axis',
  376. axisPointer: { // 坐标轴指示器,坐标轴触发有效
  377. type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
  378. },
  379. textStyle:{
  380. align:'left'
  381. },
  382. formatter:function(datas){
  383. var res = datas[0].name + '<br/>'
  384. for (var i = 0, length = datas.length; i < length; i++) {
  385. var unit = ""
  386. if(arg.argInit.units){
  387. unit = arg.argInit.units[datas[i].seriesName]
  388. }
  389. res += datas[i].seriesName + ':'
  390. + datas[i].value + unit +'<br/>'
  391. }
  392. return res
  393. }
  394. },
  395. calculable: false,
  396. grid: {
  397. borderWidth: 0,
  398. top:'20px',
  399. left: '20px',
  400. right: '20px',
  401. bottom: '20px',
  402. containLabel: true
  403. },
  404. xAxis: [{
  405. type: 'category',
  406. axisLine: {
  407. lineStyle: {
  408. type: 'solid',
  409. color: '#333333', //左边线的颜色
  410. width: '1' //坐标线的宽度
  411. }
  412. },
  413. axisTick: {
  414. show: false
  415. },
  416. splitArea: {
  417. show: false
  418. },
  419. splitLine: {
  420. show: false
  421. },
  422. data: arg.xData
  423. }],
  424. yAxis: [{
  425. type: 'value',
  426. axisTick: {
  427. show: false
  428. },
  429. splitArea: {
  430. show: false
  431. },
  432. splitLine: {
  433. show: false
  434. },
  435. axisLine: {
  436. lineStyle: {
  437. type: 'solid',
  438. color: '#333333', //左边线的颜色
  439. width: '1' //坐标线的宽度
  440. }
  441. },
  442. }],
  443. }
  444. var series = [];
  445. for(var i=0; i<arg.yDatas.length; i++){
  446. var obj = {
  447. name: arg.name[i],
  448. data: arg.yDatas[i],
  449. type: 'bar',
  450. barGap: 0,
  451. barWidth: 30, //柱图宽度
  452. itemStyle:{
  453. normal:{
  454. barBorderRadius: [50, 50, 0, 0],
  455. color: arg.colors[i],
  456. label: {
  457. show: true,
  458. position: 'top',
  459. textStyle: {
  460. color: "#333333",
  461. fontSize: 12
  462. }
  463. }
  464. }
  465. },
  466. };
  467. series.push(obj);
  468. }
  469. options.series = series;
  470. $("#"+arg.elId).removeAttr('_echarts_instance_')
  471. barCharts.setOption(options);
  472. }
  473. function drawBarV(arg){
  474. var barCharts = echarts.init(document.getElementById(arg.elId));
  475. var options = {
  476. tooltip: {
  477. trigger: 'axis',
  478. axisPointer: { // 坐标轴指示器,坐标轴触发有效
  479. type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
  480. },
  481. textStyle:{
  482. align:'left'
  483. },
  484. formatter:function(datas){
  485. var res = datas[0].name + '<br/>'
  486. for (var i = 0, length = datas.length; i < length; i++) {
  487. var unit = ""
  488. if(arg.argInit.units){
  489. unit = arg.argInit.units[datas[i].seriesName]
  490. }
  491. res += datas[i].seriesName + ':'
  492. + datas[i].value + unit +'<br/>'
  493. }
  494. return res
  495. }
  496. },
  497. calculable: false,
  498. grid: {
  499. borderWidth: 0,
  500. top:'5%',
  501. left: '3%',
  502. right: '10%',
  503. bottom: '5%',
  504. containLabel: true
  505. },
  506. yAxis: [{
  507. type: 'category',
  508. axisLine: {
  509. lineStyle: {
  510. type: 'solid',
  511. color: '#333333', //左边线的颜色
  512. width: '1' //坐标线的宽度
  513. }
  514. },
  515. axisTick: {
  516. show: false
  517. },
  518. splitArea: {
  519. show: false
  520. },
  521. splitLine: {
  522. show: false
  523. },
  524. data: arg.xData
  525. }],
  526. xAxis: [{
  527. type: 'value',
  528. axisTick: {
  529. show: false
  530. },
  531. splitArea: {
  532. show: false
  533. },
  534. splitLine: {
  535. show: false
  536. },
  537. axisLine: {
  538. lineStyle: {
  539. type: 'solid',
  540. color: '#333333', //左边线的颜色
  541. width: '1' //坐标线的宽度
  542. }
  543. },
  544. }],
  545. }
  546. var series = [];
  547. for(var i=0; i<arg.yDatas.length; i++){
  548. var obj = {
  549. name: arg.name[i],
  550. data: arg.yDatas[i],
  551. type: 'bar',
  552. barGap: 0,
  553. barWidth: 12, //柱图宽度
  554. itemStyle:{
  555. normal:{
  556. barBorderRadius: [0, 50, 50, 0],
  557. color: arg.colors[i],
  558. label: {
  559. show: true,
  560. position: 'right',
  561. textStyle: {
  562. color: "#333333",
  563. fontSize: 12
  564. }
  565. }
  566. }
  567. },
  568. };
  569. series.push(obj);
  570. }
  571. options = newline(options, 4, 'yAxis')
  572. options.series = series;
  573. $("#"+arg.elId).removeAttr('_echarts_instance_')
  574. barCharts.setOption(options);
  575. }
  576. function newline(option, number, axis){
  577. /* 此处注意你的json是数组还是对象 */
  578. option[axis][0]['axisLabel']={
  579. interval: 0,
  580. formatter: function(params){
  581. var newParamsName = "";
  582. var paramsNameNumber = params.length;
  583. var provideNumber = number;
  584. var rowNumber = Math.ceil(paramsNameNumber / provideNumber);
  585. if (paramsNameNumber > provideNumber) {
  586. for (var p = 0; p < rowNumber; p++) {
  587. var tempStr = "";
  588. var start = p * provideNumber;
  589. var end = start + provideNumber;
  590. if (p == rowNumber - 1) {
  591. tempStr = params.substring(start, paramsNameNumber);
  592. } else {
  593. tempStr = params.substring(start, end) + "\n";
  594. }
  595. newParamsName += tempStr;
  596. }
  597. } else {
  598. newParamsName = params;
  599. }
  600. return newParamsName
  601. }
  602. }
  603. return option;
  604. }