管道基础大数据平台系统开发-【前端】-新系統界面
surprise
2024-05-09 e897fc3d35f8e5dfa56d5f0c80a655ccf99202cf
src/components/chart/BaseLineChart.vue
@@ -1,5 +1,6 @@
<template>
  <div class="linechar" ref="chart"></div>
  <div class="linechar"
       ref="chart"></div>
</template>
<script>
@@ -8,6 +9,12 @@
  countCountryDimension,
  countProvinceDimension,
  GetServicesVisitsCount,
  countZhPipeMapLength,
  countLargeCategories,
  countProjectType,
  countProjectDown,
  countProjectTypeNumber,
  countStorageByProject,
} from "@/api/screen.js"
export default {
  props: {
@@ -35,22 +42,44 @@
      type: String,
      default: "全国项目",
    },
    params: {
      type: Object,
      default: () => null,
    },
    project: {
      type: String,
      default: "全国项目",
    },
    title: {
      type: String,
      default: "",
    },
  },
  data() {
  data () {
    return {
      chart: null,
      dataList: [],
    }
  },
  computed: {
    option() {
      let xAxis = []
      let yAxis = []
      this.dataList.forEach(item => {
        xAxis.push(item.type)
        yAxis.push(item.count)
      })
    option () {
      let xAxis=[]
      let yAxis=[]
      const proObj=this.dataList.find(item => item.项目名称==this.project)
      if(proObj) {
        Object.keys(proObj).forEach(item => {
          if(item.toString()!='项目名称') {
            xAxis.push(item)
            yAxis.push(proObj[item])
          }
        })
      } else {
        this.dataList.forEach(item => {
          let type=item.type||item.projtype
          xAxis.push(type)
          yAxis.push(item.count)
        })
      }
      // let data = [220, 182, 191, 234, 290, 330, 310]
      // const sideData = data.map(item => {
@@ -60,16 +89,26 @@
      //   }
      // })
      let option = {
      var obj=[];
      for(var i in xAxis) {
        if(xAxis[i]) {
          obj.push(xAxis[i])
        } else {
          obj.push("其他")
        }
      }
      xAxis=obj
      let option={
        tooltip: {
          trigger: "axis",
        },
        grid: {
          right: "5%",
          top: '10%',
          top: "10%",
          left: "5%",
          bottom: "17%",
          containLabel: true
          containLabel: true,
        },
        xAxis: {
@@ -77,9 +116,9 @@
          boundaryGap: true,
          axisLine: {
            lineStyle: {
              color: "#fff"
              color: "#fff",
            },
            show: false
            show: false,
          },
          nameRotate: 45,
          axisTick: {
@@ -116,7 +155,7 @@
        },
        series: [
          {
            name: "服务访问次数",
            name: this.title,
            type: "line",
            showAllSymbol: false,
            lineStyle: {
@@ -137,80 +176,88 @@
  watch: {
    option: {
      deep: true,
      handler(newVal) {
      handler (newVal) {
        this.setOptions(newVal)
      },
    },
    project: {
      deep: true,
      handler(newVal) {
        let requsetFn = null
        switch (newVal) {
      immediate: true,
      handler (newVal) {
        let requsetFn=null
        switch(newVal) {
          case "全球项目":
            requsetFn = countCountryDimension
            requsetFn=countProjectTypeNumber
            break
          case "全国项目":
            requsetFn = countProvinceDimension
            requsetFn=countProjectTypeNumber
            break
          case "全球管网图":
            requsetFn=countZhPipeMapLength
            break
          case "全国管网图":
            requsetFn=countZhPipeMapLength
            break
          default:
            requsetFn=countStorageByProject
            break
        }
        requsetFn && this.initData(requsetFn)
        requsetFn&&this.initData(requsetFn)
        this.setOptions(this.option)
      },
    },
  },
  mounted() {
    this.initData()
  mounted () {
    // this.initData()
    this.initChart()
    if (this.autoResize) {
      window.addEventListener("resize", this.resizeHandler)
    if(this.autoResize) {
      window.addEventListener("resize",this.resizeHandler)
    }
  },
  beforeDestroy() {
    if (!this.chart) {
  beforeDestroy () {
    if(!this.chart) {
      return
    }
    if (this.autoResize) {
      window.removeEventListener("resize", this.resizeHandler)
    if(this.autoResize) {
      window.removeEventListener("resize",this.resizeHandler)
    }
    this.chart.dispose()
    this.chart = null
    this.chart=null
  },
  methods: {
    resizeHandler() {
      this.chart.resize()
    resizeHandler () {
      this.chart&&this.chart.resize()
    },
    initChart() {
      this.chart = echarts.init(this.$refs.chart, "", {
    initChart () {
      this.chart=echarts.init(this.$refs.chart,"",{
        renderer: this.type,
      })
      this.chart.setOption(this.option)
      this.chart.on("click", this.handleClick)
      this.chart.on("click",this.handleClick)
    },
    handleClick(params) {
      this.$emit("click", params)
    handleClick (params) {
      this.$emit("click",params)
    },
    setOptions(option) {
    setOptions (option) {
      this.clearChart()
      this.resizeHandler()
      if (this.chart) {
      if(this.chart) {
        this.chart.setOption(option)
      }
    },
    refresh() {
    refresh () {
      this.setOptions(this.option)
    },
    clearChart() {
      this.chart && this.chart.clear()
    clearChart () {
      this.chart&&this.chart.clear()
    },
    async initData(requsetFn = GetServicesVisitsCount) {
      const res = await requsetFn()
      if (res.code == 200) {
        this.dataList = res.result
        console.log("requsetFn", res)
    async initData (requsetFn=GetServicesVisitsCount) {
      const res=await requsetFn(this.params)
      if(res.code==200) {
        this.dataList=res.result
        console.log("requsetFn",res)
      }
    },
  },