数据看板一些参考地址

356 阅读1分钟

各种使用echart配置的例子

www.makeapie.com/explore.htm…

获取地方的json文件

datav.aliyun.com/tools/atlas…

转动的圈

<template>
  <svg class="particle">
    <defs>
      <linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
        <stop offset="0%" style="stop-color:rgb(255,255,255,0);stop-opacity:0" />
        <stop offset="85%" style="stop-color:rgb(255,255,255,0.7);stop-opacity:0.7" />
        <stop offset="100%" style="stop-color:rgb(255,255,255,0.9);stop-opacity:0.9" />
      </linearGradient>
    </defs>
    <path id="path1" d="M5.022,35.857S152.781-66.334,371,101.213"
        fill="none" pathLength="1000" stroke-width="3"  />
    <rect style="stroke-width:5" fill="url(#grad1)"  x="0" y="0" rx="5" ry="5" width="45" height="2">
      <animateMotion  dur="1.5s" rotate="auto" repeatCount="indefinite">
        <mpath xlink:href="#path1"/>
      </animateMotion>      
    </rect>
  </svg>
</template>

<script>
    export default {

    }
</script>

<style scoped>
    .particle {
        width: 400px;
        position: absolute;
        height: 100px;
        z-index: 0;
    }
</style>

一般曲线图例子:

<template>
  <div class="h100">
    <div class="h100" ref="estate"></div>
  </div>
</template>

<script>
    export default {
        data() {
            return {
                myChart: null,
                b_age_aboard: {
                    name: [
                        "工商管理",
                        "金融学",
                        "英语",
                        "会计学",
                        "经济学",
                        "国际经济与贸易",
                        "机械设计",
                        "日语",
                        "市场营销",
                        "土木工程"
                    ],
                    value: [1419, 1326, 1412, 1110, 1013, 907, 661, 657, 710, 789]
                }
                // imgUrl: this.config.isShowImgUrl ? require('@/assets/img/board/7.png') : ''
            }
        },
        props: ["initData", "config", "active"],
        mounted() {
            this.init()
        },
        beforeDestroy() {
            this.myChart.dispose()
        },
        components: {},
        methods: {
            init() {
                if (this.initData) {
                    this.estateChart("estate", this.initData, this.config)
                } else {
                    this.estateChart("estate", this.b_age_aboard, this.config)
                }
            },
            estateChart(id, data, config_chart) {
                const colorList = this.config.colorList || ["#ffffbd", "#ffffbd", "#ffd55c", "rgba(208, 188, 132, 0.5)", "rgba(255, 255, 0, 0.85)"];
                this.myChart = this.$echarts.init(this.$refs.estate)
                let xData = data.name
                let y1Data = data.value

                let option = {
                    tooltip: {
                        trigger: "axis",
                        axisPointer: {
                            // 坐标轴指示器,坐标轴触发有效

                            type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
                        },
                        transitionDuration: 0,
                        extraCssText: 'font-size: 16px;line-height: 20px;',
                    },

                    grid: {
                        left: this.config.left ? this.config.left : "10%",
                        right: this.config.right ? this.config.right : "10%",
                        bottom: this.config.bottom ? this.config.bottom : "20%",
                        top: this.config.top ? this.config.top : "10%",
                        containLabel: false
                    },
                    animation: false,
                    xAxis: [{
                        type: "category",
                        data: xData,
                        axisTick: {
                            alignWithLabel: true
                        },
                        nameTextStyle: {
                            color: "#82b0ec"
                        },
                        axisLine: {
                            show: false,
                            lineStyle: {
                                color: "#82b0ec"
                            }
                        },
                        axisLabel: {
                            textStyle: {
                                // color: "#05F7EB",
                                color: this.config.xLabelColor || "#fff",
                                fontSize: 15
                            },
                            margin: 30,
                            rotate: this.config.rotate ? this.config.rotate : 0,
                            formatter: (name) => {
                                if (name.length > 5 && this.config.isBreak) {
                                    return `${name.slice(0, 5)}\n${name.slice(5)}`
                                } else {
                                    return name
                                }
                            }
                        }
                    }],
                    yAxis: [{
                        show: false,
                        type: "value",
                        axisLabel: {
                            textStyle: {
                                color: "#fff"
                            }
                        },
                        splitLine: {
                            lineStyle: {
                                color: "#0c2c5a"
                            }
                        },
                        axisLine: {
                            show: false
                        }
                    }],
                    series: [{
                        name: "",
                        type: "pictorialBar",
                        symbolSize: [35, 10],
                        symbolOffset: [0, -6],
                        symbolPosition: "end",
                        z: 12,
                        // "barWidth": "0",
                        label: {
                            normal: {
                                show: true,
                                position: "top",
                                // "formatter": "{c}%"
                                color: "#fff",
                                fontSize: 15,
                                formatter: params => {
                                    let danwei = this.config.danwei || '';
                                    let data = Number(params.data);
                                    if (data >= 100000) {
                                        data = (data / 10000).toFixed(1);
                                        danwei = "万" + danwei;
                                    }
                                    return data + danwei;
                                }
                            }
                        },
                        tooltip: {
                            show: false
                        },
                        color: colorList[0],
                        barMinHeight: this.config.barMinHeight || 0,
                        data: y1Data
                    }, {
                        name: "",
                        type: "pictorialBar",
                        symbolSize: [35, 10],
                        symbolOffset: [0, 7],
                        // "barWidth": "20",
                        z: 12,
                        tooltip: {
                            show: false
                        },
                        color: colorList[1],
                        data: y1Data
                    }, {
                        name: "",
                        type: "pictorialBar",
                        symbolSize: [50, 15],
                        symbolOffset: [0, 12],
                        z: 10,
                        tooltip: {
                            show: false
                        },
                        itemStyle: {
                            normal: {
                                color: "transparent",
                                borderColor: colorList[2],
                                borderType: "solid",
                                borderWidth: 1
                            }
                        },
                        barMinWidth: 2,
                        data: y1Data
                    }, {
                        name: "",
                        type: "pictorialBar",
                        symbolSize: [70, 20],
                        symbolOffset: [0, 18],
                        z: 10,
                        tooltip: {
                            show: false
                        },
                        itemStyle: {
                            normal: {
                                color: "transparent",
                                borderColor: colorList[3],
                                borderType: "solid",
                                borderWidth: 2
                            }
                        },
                        data: y1Data
                    }, {
                        type: "bar",
                        //silent: true,
                        barWidth: "35",
                        barMinHeight: this.config.barMinHeight || 0,
                        barGap: "10%", // Make series be overlap
                        barCateGoryGap: "10%",
                        // label: {
                        //   //---图形上的文本标签
                        //   show: true,
                        //   position: "top", //---相对位置
                        //   color: "#fff",
                        //   fontSize: 15
                        // },
                        itemStyle: {
                            //---图形形状
                            normal: {
                                color: function(params) {
                                    // var colorList = [
                                    //         "rgba(4,226,226,.5)",
                                    //         "rgba(4,226,226,.5)",
                                    //         "rgba(4,226,226,.5)"
                                    //     ]
                                    // return colorList[params.dataIndex]
                                    return colorList[4]
                                }
                            }
                        },
                        data: y1Data
                    }]
                }

                this.myChart.setOption(option)

                window.addEventListener("resize", () => {
                    if (this.myChart) {
                        this.myChart.resize()
                    }
                })
            }
        }
    }
</script>

<style scoped>

</style>

地图模块例子:

<template>
  <div class="h100">
    <div class="h100" ref="estate"></div>
  </div>
</template>

<script>
import chancheng from "@/utils/foshan"
import { imgList } from "@/utils/img"
export default {
  data() {
    return {
      myChart: null,
      b_age_aboard: {}
      // imgUrl: this.config.isShowImgUrl ? require('@/assets/img/board/7.png') : ''
    }
  },

  props: ["initData", "config"],
  mounted() {
    this.init()
  },
  beforeDestroy() {
    this.myChart.dispose()
  },
  components: {},
  methods: {
    init() {
      // console.log(this.initData)
      if (this.initData) {
        this.estateChart("estate", this.initData, this.config)
      } else {
        this.estateChart("estate", this.b_age_aboard, this.config)
      }
    },
    estateChart(id, data, config_chart) {
      this.myChart = this.$echarts.init(this.$refs.estate)
      this.$echarts.registerMap("chancheng", chancheng)
      let arr = []

      data.forEach((item, index) => {
        let rr = []
        rr.push(item)
        arr[index] = rr
      })

      let dataObj = data

      let geoCoordMap = {
        石湾: [113.10785, 22.99679],
        祖庙: [113.11334609985352, 23.03803398912686],
        张槎: [113.06184768676756, 23.03503251484256],
        南庄: [113.01481246948241, 22.987473928553428]
      }
      var maxSize4Pin = 100,
        minSize4Pin = 20
      var max = 480,
        min = 9 // todo

      var convertData = function(data) {
        var res = []
        for (var i = 0; i < data.length; i++) {
          var geoCoord = geoCoordMap[data[i].name]
          if (geoCoord) {
            res.push({
              name: data[i].name,
              value: geoCoord.concat(data[i].value)
            })
          }
        }
        return res
      }
      let option = {
        title: {
          top: 10,
          left: "center"
        },
        tooltip: {
          trigger: "item",
          formatter: function(params) {
            if (typeof params.value[2] == "undefined") {
              return params.name + "<br/>" + params.marker + params.value
            } else {
              return params.name + " : " + params.value[2]
            }
          },
          transitionDuration: 0,
          extraCssText: 'font-size: 16px;line-height: 20px;',
        },
        geo: {
          map: "chancheng",
          right: "30",

          zoom: 1.48,
          roam: true,
          // top: 120,
          label: {
            normal: {
              show: false,
              fontSize: "12",
              color: "#fff"
            },
            formatter: params => {
              // console.log(params)
            },
            emphasis: {
              show: false,
              color: "white"
            }
          },
          itemStyle: {
            normal: {
              borderColor: "rgba(147, 235, 248, 1)",
              // borderWidth: 1,
              areaColor: "rgba(255,255,255,.1)",
              shadowBlur: 1
            },
            emphasis: {
              areaColor: "rgba(255,255,255,.2)"
            }
          }
        },
        series: [
          {
            type: "map",
            map: "chancheng",
            geoIndex: 0, //默认情况下,map series 会自己生成内部专用的 geo 组件。但是也可以用这个 geoIndex 指定一个 geo 组件。这样的话,map 和 其他 series(例如散点图)就可以共享一个 geo 组件了。并且,geo 组件的颜色也可以被这个 map series
            aspectScale: 0.75, //长宽比
            showLegendSymbol: false, // 存在legend时显示
            label: {
              normal: {
                show: true
                // formatter: params => {
                //   console.log(params)
                // }
              },
              emphasis: {
                show: false,
                textStyle: {
                  color: "#fff"
                }
              }
            },
            roam: true,
            itemStyle: {
              normal: {
                areaColor: "#031525",
                borderColor: "#FFFFFF"
              },
              emphasis: {
                areaColor: "rgba(20,56,79,0.85)"
              }
            },
            animation: false,
            data: dataObj
          },
          {
            name: "点",
            type: "scatter",
            coordinateSystem: "geo",
            symbol: imgList[1], //气泡
            symbolSize: this.config.symbolSize
              ? this.config.symbolSize[0]
              : [35, 40],
            label: {
              normal: {
                formatter: params => {
                  return params.name + "\n" + params.value[2]
                },
                position: "bottom",
                show: true,
                color: "#fff",
                lineHeight: 16,
                fontSize: 15
              }
            },
            itemStyle: {
              normal: {
                color: "#bacaa0" //标志颜色
              }
            },
            zlevel: 6,
            data: convertData(arr[0])
          },
          {
            name: "点",
            type: "scatter",
            coordinateSystem: "geo",
            symbol: imgList[2], //气泡
            symbolSize: this.config.symbolSize
              ? this.config.symbolSize[1]
              : [35, 40],
            label: {
              normal: {
                formatter: params => {
                  return params.name + "\n" + params.value[2]
                },
                position: "bottom",
                show: true,
                color: "#fff",
                lineHeight: 16,
                fontSize: 15
              }
            },
            itemStyle: {
              normal: {
                color: "#bacaa0" //标志颜色
              }
            },
            zlevel: 7,
            data: convertData(arr[1])
          },
          {
            name: "点",
            type: "scatter",
            coordinateSystem: "geo",
            symbol: imgList[3], //气泡
            symbolSize: this.config.symbolSize
              ? this.config.symbolSize[2]
              : [30, 35],
            label: {
              normal: {
                formatter: params => {
                  return params.name + "\n" + params.value[2]
                },
                position: "bottom",
                show: true,
                color: "#fff",
                lineHeight: 16,
                fontSize: 15
              }
            },
            itemStyle: {
              normal: {
                color: "#bacaa0" //标志颜色
              }
            },
            zlevel: 8,
            data: convertData(arr[2])
          },
          {
            name: "点",
            type: "scatter",
            coordinateSystem: "geo",
            symbol: imgList[0], //气泡
            symbolSize: this.config.symbolSize
              ? this.config.symbolSize[3]
              : [25, 30],
            label: {
              normal: {
                formatter: params => {
                  return params.name + "\n" + params.value[2]
                },
                position: "bottom",
                show: true,
                color: "#fff",
                lineHeight: 16,
                fontSize: 15
              }
            },
            itemStyle: {
              normal: {
                color: "#bacaa0" //标志颜色
              }
            },
            zlevel: 9,
            data: convertData(arr[3])
          }
          // {
          //   name: "Top 5",
          //   type: "effectScatter",
          //   coordinateSystem: "geo",
          //   data: convertData(data),
          //   symbolSize: function(val) {
          //     return 12
          //   },
          //   showEffectOn: "render",
          //   rippleEffect: {
          //     brushType: "stroke"
          //   },
          //   hoverAnimation: true,
          //   label: {
          //     normal: {
          //       formatter: params => {
          //         return params.name + "\n" + params.value[2]
          //       },
          //       position: "bottom",
          //       show: true,
          //       color: "#fff",
          //       lineHeight: 15
          //     }
          //   },
          //   itemStyle: {
          //     normal: {
          //       color: "#467a7c",
          //       shadowBlur: 10,
          //       shadowColor: "#467a7c"
          //     }
          //   },
          //   zlevel: 1
          // }
        ]
      }
      this.myChart.setOption(option)

      // var that = this
      // if (dataObj.length > 2) {
      //   function Play() {
      //     that.myChart.dispatchAction({
      //       type: "downplay",
      //       seriesIndex: 0
      //     })
      //     that.myChart.dispatchAction({
      //       type: "highlight",
      //       seriesIndex: 0,
      //       dataIndex: hourIndex
      //     })
      //     that.myChart.dispatchAction({
      //       type: "showTip",
      //       seriesIndex: 0,
      //       dataIndex: hourIndex
      //     })
      //     hourIndex++
      //     if (hourIndex >= dataObj.length) {
      //       hourIndex = 0
      //     }
      //   }

      //   var hourIndex = 0
      //   Play()
      //   var fhourTime = setInterval(Play, 3000)

      //   //鼠标移入停止轮播
      //   this.myChart.on("mousemove", function(e) {
      //     clearInterval(fhourTime)
      //   })
      //   //鼠标移出恢复轮播
      //   this.myChart.on("mouseout", function() {
      //     fhourTime = setInterval(Play, 3000)
      //   })
      // }

      // this.myChart.on("click", params => {
      //   if (params.name) {
      //     if (this.initData.regionData[params.name]) {
      //       this.$store.commit("updatadrawerTitle", params.name)
      //       this.$store.commit("updataisOpenDrawer", true)
      //       this.$store.commit("updatadirection", "ltr")

      //       let dataArr = this.initData.regionData[params.name]
      //       let name = []
      //       let value = []
      //       dataArr.map((v, i) => {
      //         name.push(v.name)
      //         value.push(v.value)
      //       })
      //       let dataobj = {
      //         name: name,
      //         value: value
      //       }
      //       this.$store.commit("updatadrawerData", dataobj)
      //     } else {
      //       this.$message({
      //         message: "没有数据",
      //         type: "info"
      //       })
      //     }
      //   }
      // })

      window.addEventListener("resize", () => {
        if (this.myChart) {
          this.myChart.resize()
        }
      })
    }
  }
}
</script>

<style scoped>
</style>