美文网首页
自定义更多信息框展示

自定义更多信息框展示

作者: 衬fzy | 来源:发表于2024-02-01 15:07 被阅读0次
微信截图_20240202150651.png
<template>
  <div :id="id" class="echarts1"></div>
</template>
<script>
import * as echarts from 'echarts'
import { copyFileSync } from 'fs'
export default {
  // startVal 初始值 endVal 最终值 title 标签值
  props: {
    datas: {
      type: [Array, Object],
      default: null
    },
    id: {
      type: String,
      default: null
    }
  },
  data() {
    return {
      Time1: null,
      datasCopy: ''
    }
  },
  computed: {},
  watch: {
    // 这是监听json值变化
    datas: {
      // json为监听参数名
      handler: function (val, oldVal) {
        // 不能用箭头函数
        this.echartsFun(val)
      }
    }
  },
  beforeDestroy() {
    clearInterval(this.Time1)
  },
  methods: {
    echartsFun(val) {
      this.datasCopy = val
      // console.log(JSON.parse(JSON.stringify(val)))
      echarts.init(document.getElementById(this.id)).dispose() // 一定要摧毁
      const myChart = echarts.init(document.getElementById(this.id))
      myChart.clear()
      const color = ['rgba(41, 181, 246, 1)', '#00CA69']
      let option = {
        color: color,
        grid: {
          top: '25%',
          left: '5%',
          right: '5%',
          bottom: '0',
          containLabel: true // 显示范围包含坐标刻度
        },
        tooltip: {
          trigger: 'axis',
          backgroundColor: 'rgba(0,0,0,0.5)',
          borderWidth: 0,
          textStyle: {
            color: '#fff'
          },
          axisPointer: {
            type: 'shadow'
          },
          padding: 0,
          formatter: (params, ticket) => {
            let k = params[0].dataIndex
            let dataCopy = this.datasCopy.dataCopy
            let html = `<div class="left3ShowBox">`
            html += `<div class="date">${dataCopy[k].date}</div>`
            html += `<div class="fatie">总发帖量:${dataCopy[k].fatie}</div>`
            html += `<div class="redu">总热度值:${dataCopy[k].redu}</div>`
            html += `<div class="list">`
            // ----
            dataCopy[k].list.forEach((v) => {
              html += `<div class="li">`
              html += `<table>${v.name}</table>`
              html += `<span> 【发帖:${v.redu}】</span>`
              html += `</div>`
            })
            // ----
            html += `</div>`
            html += `</div>`
            return html
          }
        },
        legend: {
          data: ['发帖量', '热度值'],
          textStyle: {
            color: '#B4B4B4'
          },
          top: '0%'
        },
        xAxis: {
          type: 'category',
          showMaxLabel: true, // X轴显示开头和最后一个信息
          axisLabel: {
            formatter: '{value}',
            textStyle: {
              color: '#00c7ff'
            }
          },
          axisLine: {
            lineStyle: {
              color: '#063374'
            }
          },
          data: val.xData
        },
        yAxis: [
          {
            axisTick: {
              show: false
            },
            axisLine: {
              show: false,
              lineStyle: {
                color: '#00c7ff',
                width: 1,
                type: 'solid'
              }
            },
            splitLine: {
              lineStyle: {
                color: '#1775A1'
              }
            },
            axisLabel: {
              formatter: '{value} '
            }
          },
          {
            axisLine: {
              show: false,
              lineStyle: {
                color: '#00c7ff',
                width: 1,
                type: 'solid'
              }
            },
            splitLine: {
              lineStyle: {
                color: '#1775A1'
              }
            },
            axisLabel: {
              formatter: '{value} '
            }
          }
        ],
        series: [
          {
            name: '发帖量',
            type: 'line',
            yAxisIndex: 0,
            smooth: true,
            symbolSize: 8,
            zlevel: 3,
            lineStyle: {
              width: 2,
              color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
                {
                  offset: 0,
                  color: 'rgba(43,182,247,0.9)'
                },
                {
                  offset: 1,
                  color: 'rgba(158,255,255,0.9)'
                }
              ])
            },
            symbol: 'circle', // 数据交叉点样式
            markPoint: {
              label: {
                color: '#20c7fd',
                fontFamily: '',
                fontWeight: 800,
                position: 'top',
                formatter: '{c}'
              },
              data: [
                {
                  type: 'max',
                  name: '最大值',
                  symbolSize: 0,
                  symbol: 'circle',
                  symbolOffset: [0, -4],
                  label: {
                    color: 'rgba(158,255,255,0.9)'
                  }
                },
                {
                  type: 'min',
                  name: '最小值',
                  symbolSize: 0,
                  symbol: 'circle',
                  symbolOffset: [0, -4],
                  label: {
                    color: 'rgba(43,182,247,0.9)'
                  }
                }
              ]
            },
            itemStyle: {
              normal: {
                color: '#C8E4FF'
              }
            },
            data: val.yData2
          },
          {
            name: '热度值',
            type: 'bar',
            data: val.yData,
            barWidth: 20, // 柱子宽度
            barGap: 1, // 柱子之间间距
            yAxisIndex: 1,
            itemStyle: {
              normal: {
                color: (val) => {
                  if (
                    this.datasCopy.indexMax &&
                    val.dataIndex === this.datasCopy.indexMax[0]
                  ) {
                    return new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                      {
                        offset: 0,
                        color: 'rgba(255, 185, 93, 1)'
                      },
                      {
                        offset: 1,
                        color: 'rgba(229, 58, 52, 1)'
                      }
                    ])
                  } else if (
                    this.datasCopy.indexMax &&
                    val.dataIndex === this.datasCopy.indexMax[1]
                  ) {
                    return new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                      {
                        offset: 0,
                        color: 'rgba(255, 204, 0, 1)'
                      },
                      {
                        offset: 1,
                        color: 'rgba(255, 150, 0, 1)'
                      }
                    ])
                  } else if (
                    this.datasCopy.indexMax &&
                    val.dataIndex === this.datasCopy.indexMax[2]
                  ) {
                    return new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                      {
                        offset: 0,
                        color: 'rgba(100, 255, 255, 1)'
                      },
                      {
                        offset: 1,
                        color: 'rgba(0, 180, 180, 1)'
                      }
                    ])
                  } else {
                    return new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                      {
                        offset: 0,
                        color: 'rgba(158,255,255,0.9)'
                      },
                      {
                        offset: 1,
                        color: 'rgba(43,182,247,0.9)'
                      }
                    ])
                  }
                }
              }
            }
          }
        ]
      }
      myChart.setOption(option, true) // true无数据时更新试图
    }
  }
}
</script>
<style lang="scss" scoped>
.echarts1 {
  width: 100%;
  height: 100%;
}

::v-deep {
  .left3ShowBox {
    padding: 10px;
    background: rgba(0, 0, 0, 0.5);
    margin: 0;

    .list {
      margin-top: 5px;

      .li {
        display: flex;

        > span {
          font-size: 14px;
        }
      }
    }
  }
}
</style>

相关文章

网友评论

      本文标题:自定义更多信息框展示

      本文链接:https://www.haomeiwen.com/subject/zikzodtx.html