• el-table中显示echarts的趋势折线图(燃尽图)


    显示效果:右边的趋势图其实是查询当前行的30天数据量

     背景:为了模仿禅道上的燃尽图,但是查看其源码,发现是用php写的,我们想用vue实现

     实现步骤:1.先使用el-table画出表格来 

    注意:此时数据是放在list中的,但是趋势图中的id又不能唯一,又需要根据id获取该dev改成echarts的折线图,所以使用d="'main_'+scope.row.rank"来替换。后面的style可以控制该趋势图的大小

    1. :data="list"
    2. :height='570'
    3. @selection-change="setSelectRows"
    4. >
    5. <el-table-column prop="rank" label="排名" :style="{margin,left: '50px'}" show-overflow-tooltip >el-table-column>
    6. <el-table-column prop="name" label="名称" show-overflow-tooltip >el-table-column>
    7. <el-table-column prop="city" label="所属市" show-overflow-tooltip >el-table-column>
    8. <el-table-column prop="province" label="所属省" show-overflow-tooltip >el-table-column>
    9. <el-table-column prop="num" label="数量" show-overflow-tooltip >el-table-column>
    10. <el-table-column label="趋势图" show-overflow-tooltip>
    11. <template #default="scope">
    12. <div :id="'main_'+scope.row.rank" style="width:70%;height:30px;margin: 0 auto;">div>
    13. template>
    14. el-table-column>

    2.趋势图中的数据赋值:后台获取数

    注意:1 此处的精华在于initEcharts方法中的 Promise.then():Promise .then的用意就是使异步代码的执行过程可以按照指定的顺序从上到下依次执行,打破了异步代码的局限性。trendQuery方法是个异步方法,没有initEcharts方法,直接调用initData的同步方法,则会出现div还没渲染就要调用id,则会出现调用不到的报错:Uncaught Error: Initialize failed: invalid dom-------这是由于echarts在初始化化时是需要获取dom 2. 通过"main_" + state.list[i].rank) 来和上述html中的id对应获取对应行的字段

    1. import * as echarts from 'echarts'
    2. const fetchData = async () => {
    3. state.listLoading = true
    4. const {
    5. retCode, success, data, msg
    6. } = await trendQuery(state.queryForm)
    7. if (retCode == 0) {
    8. state.list = data.records;
    9. initEcharts();
    10. } else {
    11. proxy.$baseMessage(msg, 'error', 'vab-hey-message-error');
    12. }
    13. }
    14. // 方法
    15. const initEcharts = () => {
    16. // 新建一个promise对象
    17. let newPromise = new Promise((resolve) => {
    18. resolve()
    19. })
    20. //然后异步执行echarts的初始化函数
    21. newPromise.then(() => {
    22. // 此dom为echarts图标展示dom
    23. // echarts.init(DOm)
    24. initData();
    25. })
    26. }
    27. const initData = () => {
    28. console.log(" initData 执行中 ")
    29. for (let i = 0; i < state.list.length; i++) {
    30. let myChart = echarts.init(document.getElementById("main_" + state.list[i].rank));
    31. // 绘制图表
    32. myChart.setOption({
    33. xAxis: {
    34. show: false, //取消显示坐标轴,坐标轴刻度,坐标值(如果是y轴,默认的网格线也会取消显示)
    35. type: 'category',
    36. boundaryGap: false,
    37. splitLine: {
    38. show:false
    39. },
    40. data: []
    41. },
    42. grid: {
    43. left: "0",
    44. top: "0",
    45. right: "0",
    46. bottom: "0",
    47. containLabel: true,
    48. },
    49. yAxis: {
    50. axisLabel: { // 取消显示坐标值
    51. show: false
    52. },
    53. splitLine: { //取消网格线
    54. show:false
    55. },
    56. type: 'value'
    57. },
    58. series: [
    59. {
    60. symbol: "none",
    61. smooth: true,//平滑
    62. type: "line",
    63. data: state.list[i].trend,
    64. areaStyle: {}
    65. }
    66. ]
    67. });
    68. window.onresize = function () { // 自适应大小
    69. myChart.resize();
    70. };
    71. }
    72. }

     3.绘制图像

    使用的是 myChart.setOption({ ......}) ,有兴趣的可以在echarts官网的案例中查看Documentation - Apache ECharts和练习

    Examples - Apache ECharts

  • 相关阅读:
    【Ansible】ansible容器学习环境搭建
    手部关键点检测1:手部关键点(手部姿势估计)数据集(含下载链接)
    Maven高级知识【模块开发、多环境开发配置、私服】
    让一个模型处理多种数据的N种方法
    Linux系统的特点以及年轻人如何获取第一个Linux系统
    制作一个简单HTML传统端午节日网页(HTML+CSS)7页 带报告
    Linux中shell的使用(零基础学习笔记)
    第十一周任务总结
    vue中scoped原理与样式穿透原理
    一、特征工程
  • 原文地址:https://blog.csdn.net/qq_40453972/article/details/127861548