当前位置:   article > 正文

vue后台返回的数据渲染到echarts饼图上_vue2中的echart展示后端返回的list数据

vue2中的echart展示后端返回的list数据

1.安装echarts

npm install echarts --save

2.在组件内引入echarts

import * as echarts from 'echarts' 

3.准备好装图表的容器

  1. <template>
  2. <div class="echart" id="applyChart" style="width:50%;height: 550px;"></div>
  3. </template>

4.初始化图表 并获取后台数据渲染到饼图

  1. <script>
  2. import * as echarts from 'echarts'
  3. export default {
  4. data(){
  5. return {
  6. applyChart: {},
  7. pieName: [],
  8. // 后台数据
  9. list: [],
  10. }
  11. },
  12. mounted(){
  13. this.initApplyCharts()
  14. this.initData()
  15. },
  16. methods:{
  17. // 初始化图表
  18. initApplyCharts(){
  19. this.applyChart = echarts.init(document.querySelector('#applyChart'))
  20. // 饼图
  21. this.applyChart.setOption ({
  22. legend: {
  23. // 图例
  24. left:"left",
  25. orient: "vertical"
  26. },
  27. title: {
  28. // 设置饼图标题,位置设为顶部居中
  29. text: "部门申请所占比",
  30. top:'0%',
  31. left: "center"
  32. },
  33. tooltip: {
  34. trigger: 'item',
  35. },
  36. series: [
  37. {
  38. type: "pie",
  39. label: {
  40. show: true,
  41. formatter: "{b} : {c} ({d}%)" // b代表名称,c代表对应值,d代表百分比
  42. },
  43. radius: "30%", //饼图半径
  44. data: [],
  45. //每一个扇形的颜色
  46. itemStyle: {
  47. normal: {
  48. color: function (colors) {
  49. let colorList = [
  50. '#fc8251',
  51. '#5470c6',
  52. '#33FFDD',
  53. ];
  54. return colorList[colors.dataIndex];
  55. }
  56. },
  57. }
  58. },
  59. ],
  60. emphasis: {
  61. itemStyle: {
  62. shadowBlur: 10,
  63. shadowOffsetX: 0,
  64. shadowColor: 'rgba(0, 0, 0, 0.5)'
  65. }
  66. }
  67. });
  68. },
  69. // 动态获取饼图数据 并对数据进行处理
  70. initData(){
  71. // 处理查询参数
  72. let params = {...this.queryParams};
  73. // 执行查询 查询工单运维表
  74. getOrderPage(params).then((response) => {
  75. this.list = response.data.list;
  76. // 从后台返回的数据中(返回的数据格式[{...},{...}] ) 分离出图表展示需要的name字段
  77. let applyName = this.list.map(item=>{
  78. return item.applyUserDept
  79. })
  80. // 如果分离出来的字段存在重复的,需要计算重复字段出现的次数 ['A','B','C','A']
  81. let getData = applyName.reduce((obj, name) => {
  82. if (name in obj) {
  83. obj[name]++
  84. } else {
  85. obj[name]=1
  86. }
  87. return obj //{'A':2,'B':1,'C':1}
  88. }, {})
  89. //存放形式为[{name1:value},{name2:value2}]
  90. let dataList = [];
  91. //计算完数组中每个元素出现的次数,得到一个对象 属性->name 属性值->value
  92. for(const key in getData) {
  93. let obj1 = {name:key,value:getData[key]}
  94. dataList.push(obj1)
  95. }
  96. this.applyChart.setOption({
  97. series:[{
  98. // 饼图的数据源
  99. data: dataList,
  100. }]
  101. });
  102. });
  103. },
  104. }
  105. }
  106. </script>

后台返回的数据格式:

展示到饼图上的data需要的格式是data[{name:'A',value:1}] ,后台返回的数据里没有name和value,需要处理一下后台数据(注意:在后台数据中如:applyUserDept字段可能在不同的对象中)

  1. // 从后台返回的数据中(返回的数据格式[{...},{...}] ) 分离出图表展示需要的name字段
  2. let applyName = this.list.map(item=>{
  3. return item.applyUserDept
  4. })
  5. // 如果分离出来的字段存在重复的,需要计算重复字段出现的次数 ['A','B','C','A']
  6. let getData = applyName.reduce((obj, name) => {
  7. if (name in obj) {
  8. obj[name]++
  9. } else {
  10. obj[name]=1
  11. }
  12. return obj //{'A':2,'B':1,'C':1}
  13. }, {})
  14. //存放形式为[{name1:value},{name2:value2}]
  15. let dataList = [];
  16. //计算完数组中每个元素出现的次数,得到一个对象 属性->name 属性值->value
  17. for(const key in getData) {
  18. let obj1 = {name:key,value:getData[key]}
  19. dataList.push(obj1)
  20. }
  21. // 饼图中使用处理好的数据
  22. this.applyChart.setOption({
  23. series:[{
  24. // 饼图的数据源
  25. data: dataList,
  26. }]
  27. });

 处理好的数据:

 

最后尽管后台并没有返回带有name和value字段的数据,通过处理也成功的把需要展示的数据,渲染到饼图上 最后效果图:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/108787
推荐阅读