This commit is contained in:
		
							parent
							
								
									a3807a2214
								
							
						
					
					
						commit
						ec0d91663f
					
				| 
						 | 
				
			
			@ -1,365 +0,0 @@
 | 
			
		|||
import { defineComponent, watch, ref } from 'vue';
 | 
			
		||||
// 声明类型
 | 
			
		||||
const PropsType = {
 | 
			
		||||
  cdata: {
 | 
			
		||||
    type: Object,
 | 
			
		||||
    require: true
 | 
			
		||||
  }
 | 
			
		||||
} as const
 | 
			
		||||
 | 
			
		||||
// 定义主体
 | 
			
		||||
export default defineComponent({
 | 
			
		||||
  props: PropsType,
 | 
			
		||||
  setup(props) {
 | 
			
		||||
    // 定义 ref
 | 
			
		||||
    const chartRef = ref()
 | 
			
		||||
    // 定义颜色
 | 
			
		||||
    const colorList = {
 | 
			
		||||
      linearYtoG: {
 | 
			
		||||
        type: "linear",
 | 
			
		||||
        x: 0,
 | 
			
		||||
        y: 0,
 | 
			
		||||
        x2: 1,
 | 
			
		||||
        y2: 1,
 | 
			
		||||
        colorStops: [
 | 
			
		||||
          {
 | 
			
		||||
            offset: 0,
 | 
			
		||||
            color: "#f5b44d"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            offset: 1,
 | 
			
		||||
            color: "#28f8de"
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      linearGtoB: {
 | 
			
		||||
        type: "linear",
 | 
			
		||||
        x: 0,
 | 
			
		||||
        y: 0,
 | 
			
		||||
        x2: 1,
 | 
			
		||||
        y2: 0,
 | 
			
		||||
        colorStops: [
 | 
			
		||||
          {
 | 
			
		||||
            offset: 0,
 | 
			
		||||
            color: "#43dfa2"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            offset: 1,
 | 
			
		||||
            color: "#28f8de"
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      linearBtoG: {
 | 
			
		||||
        type: "linear",
 | 
			
		||||
        x: 0,
 | 
			
		||||
        y: 0,
 | 
			
		||||
        x2: 1,
 | 
			
		||||
        y2: 0,
 | 
			
		||||
        colorStops: [
 | 
			
		||||
          {
 | 
			
		||||
            offset: 0,
 | 
			
		||||
            color: "#1c98e8"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            offset: 1,
 | 
			
		||||
            color: "#28f8de"
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      areaBtoG: {
 | 
			
		||||
        type: "linear",
 | 
			
		||||
        x: 0,
 | 
			
		||||
        y: 0,
 | 
			
		||||
        x2: 0,
 | 
			
		||||
        y2: 1,
 | 
			
		||||
        colorStops: [
 | 
			
		||||
          {
 | 
			
		||||
            offset: 0,
 | 
			
		||||
            color: "rgba(35,184,210,.2)"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            offset: 1,
 | 
			
		||||
            color: "rgba(35,184,210,0)"
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    // 配置项
 | 
			
		||||
    let options ={}
 | 
			
		||||
 | 
			
		||||
    // 监听
 | 
			
		||||
    watch(
 | 
			
		||||
      () => props.cdata,
 | 
			
		||||
      (val: any) => {
 | 
			
		||||
        options = {
 | 
			
		||||
          title: {
 | 
			
		||||
            text: "",
 | 
			
		||||
            textStyle: {
 | 
			
		||||
              color: "#D3D6DD",
 | 
			
		||||
              fontSize: 24,
 | 
			
		||||
              fontWeight: "normal"
 | 
			
		||||
            },
 | 
			
		||||
            subtext: val.year + "/" + val.weekCategory[6],
 | 
			
		||||
            subtextStyle: {
 | 
			
		||||
              color: "#fff",
 | 
			
		||||
              fontSize: 16
 | 
			
		||||
            },
 | 
			
		||||
            top: 50,
 | 
			
		||||
            left: 80
 | 
			
		||||
          },
 | 
			
		||||
          legend: {
 | 
			
		||||
            top: 120,
 | 
			
		||||
            left: 80,
 | 
			
		||||
            orient: "vertical",
 | 
			
		||||
            itemGap: 15,
 | 
			
		||||
            itemWidth: 12,
 | 
			
		||||
            itemHeight: 12,
 | 
			
		||||
            data: ["平均指标", "我的指标"],
 | 
			
		||||
            textStyle: {
 | 
			
		||||
              color: "#fff",
 | 
			
		||||
              fontSize: 14
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          tooltip: {
 | 
			
		||||
            trigger: "item"
 | 
			
		||||
          },
 | 
			
		||||
          radar: {
 | 
			
		||||
            center: ["68%", "27%"],
 | 
			
		||||
            radius: "40%",
 | 
			
		||||
            name: {
 | 
			
		||||
              color: "#fff"
 | 
			
		||||
            },
 | 
			
		||||
            splitNumber: 8,
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: colorList.linearYtoG,
 | 
			
		||||
                opacity: 0.6
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            splitLine: {
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: colorList.linearYtoG,
 | 
			
		||||
                opacity: 0.6
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            splitArea: {
 | 
			
		||||
              areaStyle: {
 | 
			
		||||
                color: "#fff",
 | 
			
		||||
                opacity: 0.1,
 | 
			
		||||
                shadowBlur: 25,
 | 
			
		||||
                shadowColor: "#000",
 | 
			
		||||
                shadowOffsetX: 0,
 | 
			
		||||
                shadowOffsetY: 5
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            indicator: [
 | 
			
		||||
              {
 | 
			
		||||
                name: "服务态度",
 | 
			
		||||
                max: val.maxData
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                name: "产品质量",
 | 
			
		||||
                max: 10
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                name: "任务效率",
 | 
			
		||||
                max: 12
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                name: "售后保障",
 | 
			
		||||
                max: 3.5
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          grid: {
 | 
			
		||||
            left: 90,
 | 
			
		||||
            right: 80,
 | 
			
		||||
            bottom: '15%',
 | 
			
		||||
            top: "50%"
 | 
			
		||||
          },
 | 
			
		||||
          xAxis: {
 | 
			
		||||
            type: "category",
 | 
			
		||||
            position: "bottom",
 | 
			
		||||
            axisLine: true,
 | 
			
		||||
            axisLabel: {
 | 
			
		||||
              color: "rgba(255,255,255,.8)",
 | 
			
		||||
              fontSize: 12
 | 
			
		||||
            },
 | 
			
		||||
            data: val.weekCategory
 | 
			
		||||
          },
 | 
			
		||||
          // 下方Y轴
 | 
			
		||||
          yAxis: {
 | 
			
		||||
            name: "工单",
 | 
			
		||||
            nameLocation: "end",
 | 
			
		||||
            nameGap: 24,
 | 
			
		||||
            nameTextStyle: {
 | 
			
		||||
              color: "rgba(255,255,255,.5)",
 | 
			
		||||
              fontSize: 14
 | 
			
		||||
            },
 | 
			
		||||
            max: val.maxData,
 | 
			
		||||
            splitNumber: 4,
 | 
			
		||||
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                opacity: 0
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            splitLine: {
 | 
			
		||||
              show: true,
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: "#fff",
 | 
			
		||||
                opacity: 0.1
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            axisLabel: {
 | 
			
		||||
              color: "rgba(255,255,255,.8)",
 | 
			
		||||
              fontSize: 12
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          series: [
 | 
			
		||||
            {
 | 
			
		||||
              name: "",
 | 
			
		||||
              type: "radar",
 | 
			
		||||
              symbolSize: 0,
 | 
			
		||||
              data: [
 | 
			
		||||
                {
 | 
			
		||||
                  value: val.radarDataAvg[6],
 | 
			
		||||
                  name: "平均指标",
 | 
			
		||||
                  itemStyle: {
 | 
			
		||||
                    normal: {
 | 
			
		||||
                      color: "#f8d351"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  lineStyle: {
 | 
			
		||||
                    normal: {
 | 
			
		||||
                      opacity: 0
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  areaStyle: {
 | 
			
		||||
                    normal: {
 | 
			
		||||
                      color: "#f8d351",
 | 
			
		||||
                      shadowBlur: 25,
 | 
			
		||||
                      shadowColor: "rgba(248,211,81,.3)",
 | 
			
		||||
                      shadowOffsetX: 0,
 | 
			
		||||
                      shadowOffsetY: -10,
 | 
			
		||||
                      opacity: 1
 | 
			
		||||
                    }
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  value: val.radarData[6],
 | 
			
		||||
                  name: "我的指标",
 | 
			
		||||
                  itemStyle: {
 | 
			
		||||
                    normal: {
 | 
			
		||||
                      color: "#43dfa2"
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  lineStyle: {
 | 
			
		||||
                    normal: {
 | 
			
		||||
                      opacity: 0
 | 
			
		||||
                    }
 | 
			
		||||
                  },
 | 
			
		||||
                  areaStyle: {
 | 
			
		||||
                    normal: {
 | 
			
		||||
                      color: colorList.linearGtoB,
 | 
			
		||||
                      shadowBlur: 15,
 | 
			
		||||
                      shadowColor: "rgba(0,0,0,.2)",
 | 
			
		||||
                      shadowOffsetX: 0,
 | 
			
		||||
                      shadowOffsetY: 5,
 | 
			
		||||
                      opacity: 0.8
 | 
			
		||||
                    }
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              name: "",
 | 
			
		||||
              type: "line",
 | 
			
		||||
              smooth: true,
 | 
			
		||||
              symbol: "emptyCircle",
 | 
			
		||||
              symbolSize: 8,
 | 
			
		||||
              itemStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  color: "#fff"
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  color: colorList.linearBtoG,
 | 
			
		||||
                  width: 3
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              areaStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  color: colorList.areaBtoG
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              data: val.weekLineData,
 | 
			
		||||
              lineSmooth: true,
 | 
			
		||||
              markLine: {
 | 
			
		||||
                silent: true,
 | 
			
		||||
                data: [
 | 
			
		||||
                  {
 | 
			
		||||
                    type: "average",
 | 
			
		||||
                    name: "平均值"
 | 
			
		||||
                  }
 | 
			
		||||
                ],
 | 
			
		||||
                precision: 0,
 | 
			
		||||
                label: {
 | 
			
		||||
                  normal: {
 | 
			
		||||
                    formatter: "平均值: \n {c}"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                lineStyle: {
 | 
			
		||||
                  normal: {
 | 
			
		||||
                    color: "rgba(248,211,81,.7)"
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              tooltip: {
 | 
			
		||||
                position: "top",
 | 
			
		||||
                formatter: "{c} m",
 | 
			
		||||
                backgroundColor: "rgba(28,152,232,.2)",
 | 
			
		||||
                padding: 6
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              name: "占位背景",
 | 
			
		||||
              type: "bar",
 | 
			
		||||
              itemStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  show: true,
 | 
			
		||||
                  color: "#000",
 | 
			
		||||
                  opacity: 0
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              silent: true,
 | 
			
		||||
              barWidth: "50%",
 | 
			
		||||
              data: val.weekMaxData,
 | 
			
		||||
              animation: false
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
        // 手动触发更新
 | 
			
		||||
        if (chartRef.value) {
 | 
			
		||||
          // 通过初始化参数打入数据
 | 
			
		||||
          chartRef.value.initChart(options)
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        immediate: true,
 | 
			
		||||
        deep: true
 | 
			
		||||
      }
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    return () => {
 | 
			
		||||
      const height = "480px"
 | 
			
		||||
      const width = "100%"
 | 
			
		||||
 | 
			
		||||
      return <div>
 | 
			
		||||
        <echart ref={chartRef} height={height} width={width} />
 | 
			
		||||
      </div>
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,363 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div :style="{ height, width }" ref="chartRef"></div>
 | 
			
		||||
</template>
 | 
			
		||||
<script setup lang="tsx">
 | 
			
		||||
  import * as echarts from "echarts";
 | 
			
		||||
  import { watch,ref } from "vue";
 | 
			
		||||
  // 接收 props
 | 
			
		||||
  const props = defineProps<{
 | 
			
		||||
    cdata: {
 | 
			
		||||
      year: null,
 | 
			
		||||
      weekCategory: string[],
 | 
			
		||||
      radarData: string[],
 | 
			
		||||
      radarDataAvg: string[],
 | 
			
		||||
      maxData: number,
 | 
			
		||||
      weekMaxData: string[],
 | 
			
		||||
      weekLineData: string[],
 | 
			
		||||
    };
 | 
			
		||||
  }>();
 | 
			
		||||
 | 
			
		||||
  const height = "450px";
 | 
			
		||||
  const width = "1000px";
 | 
			
		||||
  // 定义 ref
 | 
			
		||||
  const chartRef = ref();
 | 
			
		||||
 | 
			
		||||
  const colorList = {
 | 
			
		||||
    linearYtoG: {
 | 
			
		||||
      type: "linear",
 | 
			
		||||
      x: 0,
 | 
			
		||||
      y: 0,
 | 
			
		||||
      x2: 1,
 | 
			
		||||
      y2: 1,
 | 
			
		||||
      colorStops: [
 | 
			
		||||
        {
 | 
			
		||||
          offset: 0,
 | 
			
		||||
          color: "#f5b44d"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          offset: 1,
 | 
			
		||||
          color: "#28f8de"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    linearGtoB: {
 | 
			
		||||
      type: "linear",
 | 
			
		||||
      x: 0,
 | 
			
		||||
      y: 0,
 | 
			
		||||
      x2: 1,
 | 
			
		||||
      y2: 0,
 | 
			
		||||
      colorStops: [
 | 
			
		||||
        {
 | 
			
		||||
          offset: 0,
 | 
			
		||||
          color: "#43dfa2"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          offset: 1,
 | 
			
		||||
          color: "#28f8de"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    linearBtoG: {
 | 
			
		||||
      type: "linear",
 | 
			
		||||
      x: 0,
 | 
			
		||||
      y: 0,
 | 
			
		||||
      x2: 1,
 | 
			
		||||
      y2: 0,
 | 
			
		||||
      colorStops: [
 | 
			
		||||
        {
 | 
			
		||||
          offset: 0,
 | 
			
		||||
          color: "#1c98e8"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          offset: 1,
 | 
			
		||||
          color: "#28f8de"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    areaBtoG: {
 | 
			
		||||
      type: "linear",
 | 
			
		||||
      x: 0,
 | 
			
		||||
      y: 0,
 | 
			
		||||
      x2: 0,
 | 
			
		||||
      y2: 1,
 | 
			
		||||
      colorStops: [
 | 
			
		||||
        {
 | 
			
		||||
          offset: 0,
 | 
			
		||||
          color: "rgba(35,184,210,.2)"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          offset: 1,
 | 
			
		||||
          color: "rgba(35,184,210,0)"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  let options = ref({});
 | 
			
		||||
  // echarts 实例
 | 
			
		||||
  let chartInstance: echarts.ECharts | null = null;
 | 
			
		||||
  watch(() => props.cdata, (val: typeof props.cdata) => {
 | 
			
		||||
    options.value = {
 | 
			
		||||
      title: {
 | 
			
		||||
        text: "",
 | 
			
		||||
        textStyle: {
 | 
			
		||||
          color: "#D3D6DD",
 | 
			
		||||
          fontSize: 24,
 | 
			
		||||
          fontWeight: "normal"
 | 
			
		||||
        },
 | 
			
		||||
        subtext: val.year + "/" + val.weekCategory[6],
 | 
			
		||||
        subtextStyle: {
 | 
			
		||||
          color: "#fff",
 | 
			
		||||
          fontSize: 16
 | 
			
		||||
        },
 | 
			
		||||
        top: 50,
 | 
			
		||||
        left: 80
 | 
			
		||||
      },
 | 
			
		||||
      legend: {
 | 
			
		||||
        top: 120,
 | 
			
		||||
        left: 80,
 | 
			
		||||
        orient: "vertical",
 | 
			
		||||
        itemGap: 15,
 | 
			
		||||
        itemWidth: 12,
 | 
			
		||||
        itemHeight: 12,
 | 
			
		||||
        data: ["平均指标", "我的指标"],
 | 
			
		||||
        textStyle: {
 | 
			
		||||
          color: "#fff",
 | 
			
		||||
          fontSize: 14
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      tooltip: {
 | 
			
		||||
        trigger: "item"
 | 
			
		||||
      },
 | 
			
		||||
      radar: {
 | 
			
		||||
        center: ["68%", "27%"],
 | 
			
		||||
        radius: "40%",
 | 
			
		||||
        name: {
 | 
			
		||||
          color: "#fff"
 | 
			
		||||
        },
 | 
			
		||||
        splitNumber: 8,
 | 
			
		||||
        axisLine: {
 | 
			
		||||
          lineStyle: {
 | 
			
		||||
            color: colorList.linearYtoG,
 | 
			
		||||
            opacity: 0.6
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        splitLine: {
 | 
			
		||||
          lineStyle: {
 | 
			
		||||
            color: colorList.linearYtoG,
 | 
			
		||||
            opacity: 0.6
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        splitArea: {
 | 
			
		||||
          areaStyle: {
 | 
			
		||||
            color: "#fff",
 | 
			
		||||
            opacity: 0.1,
 | 
			
		||||
            shadowBlur: 25,
 | 
			
		||||
            shadowColor: "#000",
 | 
			
		||||
            shadowOffsetX: 0,
 | 
			
		||||
            shadowOffsetY: 5
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        indicator: [
 | 
			
		||||
          {
 | 
			
		||||
            name: "服务态度",
 | 
			
		||||
            max: val.maxData
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            name: "产品质量",
 | 
			
		||||
            max: 10
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            name: "任务效率",
 | 
			
		||||
            max: 12
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            name: "售后保障",
 | 
			
		||||
            max: 3.5
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      grid: {
 | 
			
		||||
        left: 90,
 | 
			
		||||
        right: 80,
 | 
			
		||||
        bottom: "15%",
 | 
			
		||||
        top: "50%"
 | 
			
		||||
      },
 | 
			
		||||
      xAxis: {
 | 
			
		||||
        type: "category",
 | 
			
		||||
        position: "bottom",
 | 
			
		||||
        axisLine: true,
 | 
			
		||||
        axisLabel: {
 | 
			
		||||
          color: "rgba(255,255,255,.8)",
 | 
			
		||||
          fontSize: 12
 | 
			
		||||
        },
 | 
			
		||||
        data: val.weekCategory
 | 
			
		||||
      },
 | 
			
		||||
      // 下方Y轴
 | 
			
		||||
      yAxis: {
 | 
			
		||||
        name: "工单",
 | 
			
		||||
        nameLocation: "end",
 | 
			
		||||
        nameGap: 24,
 | 
			
		||||
        nameTextStyle: {
 | 
			
		||||
          color: "rgba(255,255,255,.5)",
 | 
			
		||||
          fontSize: 14
 | 
			
		||||
        },
 | 
			
		||||
        max: val.maxData,
 | 
			
		||||
        splitNumber: 4,
 | 
			
		||||
 | 
			
		||||
        axisLine: {
 | 
			
		||||
          lineStyle: {
 | 
			
		||||
            opacity: 0
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        splitLine: {
 | 
			
		||||
          show: true,
 | 
			
		||||
          lineStyle: {
 | 
			
		||||
            color: "#fff",
 | 
			
		||||
            opacity: 0.1
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        axisLabel: {
 | 
			
		||||
          color: "rgba(255,255,255,.8)",
 | 
			
		||||
          fontSize: 12
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      series: [
 | 
			
		||||
        {
 | 
			
		||||
          name: "",
 | 
			
		||||
          type: "radar",
 | 
			
		||||
          symbolSize: 0,
 | 
			
		||||
          data: [
 | 
			
		||||
            {
 | 
			
		||||
              value: val.radarDataAvg[6],
 | 
			
		||||
              name: "平均指标",
 | 
			
		||||
              itemStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  color: "#f8d351"
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  opacity: 0
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              areaStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  color: "#f8d351",
 | 
			
		||||
                  shadowBlur: 25,
 | 
			
		||||
                  shadowColor: "rgba(248,211,81,.3)",
 | 
			
		||||
                  shadowOffsetX: 0,
 | 
			
		||||
                  shadowOffsetY: -10,
 | 
			
		||||
                  opacity: 1
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              value: val.radarData[6],
 | 
			
		||||
              name: "我的指标",
 | 
			
		||||
              itemStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  color: "#43dfa2"
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  opacity: 0
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              areaStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  color: colorList.linearGtoB,
 | 
			
		||||
                  shadowBlur: 15,
 | 
			
		||||
                  shadowColor: "rgba(0,0,0,.2)",
 | 
			
		||||
                  shadowOffsetX: 0,
 | 
			
		||||
                  shadowOffsetY: 5,
 | 
			
		||||
                  opacity: 0.8
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: "",
 | 
			
		||||
          type: "line",
 | 
			
		||||
          smooth: true,
 | 
			
		||||
          symbol: "emptyCircle",
 | 
			
		||||
          symbolSize: 8,
 | 
			
		||||
          itemStyle: {
 | 
			
		||||
            normal: {
 | 
			
		||||
              color: "#fff"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          lineStyle: {
 | 
			
		||||
            normal: {
 | 
			
		||||
              color: colorList.linearBtoG,
 | 
			
		||||
              width: 3
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          areaStyle: {
 | 
			
		||||
            normal: {
 | 
			
		||||
              color: colorList.areaBtoG
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          data: val.weekLineData,
 | 
			
		||||
          lineSmooth: true,
 | 
			
		||||
          markLine: {
 | 
			
		||||
            silent: true,
 | 
			
		||||
            data: [
 | 
			
		||||
              {
 | 
			
		||||
                type: "average",
 | 
			
		||||
                name: "平均值"
 | 
			
		||||
              }
 | 
			
		||||
            ],
 | 
			
		||||
            precision: 0,
 | 
			
		||||
            label: {
 | 
			
		||||
              normal: {
 | 
			
		||||
                formatter: "平均值: \n {c}"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              normal: {
 | 
			
		||||
                color: "rgba(248,211,81,.7)"
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          tooltip: {
 | 
			
		||||
            position: "top",
 | 
			
		||||
            formatter: "{c} m",
 | 
			
		||||
            backgroundColor: "rgba(28,152,232,.2)",
 | 
			
		||||
            padding: 6
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: "占位背景",
 | 
			
		||||
          type: "bar",
 | 
			
		||||
          itemStyle: {
 | 
			
		||||
            normal: {
 | 
			
		||||
              show: true,
 | 
			
		||||
              color: "#000",
 | 
			
		||||
              opacity: 0
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          silent: true,
 | 
			
		||||
          barWidth: "50%",
 | 
			
		||||
          data: val.weekMaxData,
 | 
			
		||||
          animation: false
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    };
 | 
			
		||||
    // 手动触发更新
 | 
			
		||||
    if (chartRef.value) {
 | 
			
		||||
      if (!chartInstance) {
 | 
			
		||||
        chartInstance = echarts.init(chartRef.value);
 | 
			
		||||
      }
 | 
			
		||||
      chartInstance.setOption(options.value);
 | 
			
		||||
    }
 | 
			
		||||
  }, {
 | 
			
		||||
    immediate: true,
 | 
			
		||||
    deep: true
 | 
			
		||||
  });
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,92 +0,0 @@
 | 
			
		|||
import { defineComponent, reactive, onMounted, ref, onUnmounted } from "vue";
 | 
			
		||||
import Draw from "./draw";
 | 
			
		||||
 | 
			
		||||
export default defineComponent({
 | 
			
		||||
  components: {
 | 
			
		||||
    Draw,
 | 
			
		||||
  },
 | 
			
		||||
  setup() {
 | 
			
		||||
    const drawTiming = ref(0);
 | 
			
		||||
    const cdata = reactive({
 | 
			
		||||
      year: null,
 | 
			
		||||
      weekCategory: [],
 | 
			
		||||
      radarData: [],
 | 
			
		||||
      radarDataAvg: [],
 | 
			
		||||
      maxData: 12000,
 | 
			
		||||
      weekMaxData: [],
 | 
			
		||||
      weekLineData: [],
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // methods
 | 
			
		||||
    const setData = () => {
 | 
			
		||||
      // 清空轮询数据
 | 
			
		||||
      cdata.weekCategory = [];
 | 
			
		||||
      cdata.weekMaxData = [];
 | 
			
		||||
      cdata.weekLineData = [];
 | 
			
		||||
      cdata.radarData = [];
 | 
			
		||||
      cdata.radarDataAvg = [];
 | 
			
		||||
 | 
			
		||||
      const dateBase = new Date();
 | 
			
		||||
      cdata.year = dateBase.getFullYear();
 | 
			
		||||
      // 周数据
 | 
			
		||||
      for (let i = 0; i < 7; i++) {
 | 
			
		||||
        // 日期
 | 
			
		||||
        const date = new Date();
 | 
			
		||||
        cdata.weekCategory.unshift(
 | 
			
		||||
          [date.getMonth() + 1, date.getDate() - i].join("/")
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // 折线图数据
 | 
			
		||||
        cdata.weekMaxData.push(cdata.maxData);
 | 
			
		||||
        const distance = Math.round(Math.random() * 11000 + 500);
 | 
			
		||||
        cdata.weekLineData.push(distance);
 | 
			
		||||
 | 
			
		||||
        // 雷达图数据
 | 
			
		||||
        // 我的指标
 | 
			
		||||
        const averageSpeed = +(Math.random() * 5 + 3).toFixed(3);
 | 
			
		||||
        const maxSpeed = averageSpeed + +(Math.random() * 3).toFixed(2);
 | 
			
		||||
        const hour = +(distance / 1000 / averageSpeed).toFixed(1);
 | 
			
		||||
        const radarDayData = [distance, averageSpeed, maxSpeed, hour];
 | 
			
		||||
        cdata.radarData.unshift(radarDayData);
 | 
			
		||||
 | 
			
		||||
        // 平均指标
 | 
			
		||||
        const distanceAvg = Math.round(Math.random() * 8000 + 4000);
 | 
			
		||||
        const averageSpeedAvg = +(Math.random() * 4 + 4).toFixed(3);
 | 
			
		||||
        const maxSpeedAvg = averageSpeedAvg + +(Math.random() * 2).toFixed(2);
 | 
			
		||||
        const hourAvg = +(distance / 1000 / averageSpeed).toFixed(1);
 | 
			
		||||
        const radarDayDataAvg = [
 | 
			
		||||
          distanceAvg,
 | 
			
		||||
          averageSpeedAvg,
 | 
			
		||||
          maxSpeedAvg,
 | 
			
		||||
          hourAvg,
 | 
			
		||||
        ];
 | 
			
		||||
        cdata.radarDataAvg.unshift(radarDayDataAvg);
 | 
			
		||||
      }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // 定时函数
 | 
			
		||||
    const drawTimingFn = () => {
 | 
			
		||||
      setData();
 | 
			
		||||
      drawTiming.value = setInterval(() => {
 | 
			
		||||
        setData();
 | 
			
		||||
      }, 6000);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // 生命周期
 | 
			
		||||
    onMounted(() => {
 | 
			
		||||
      drawTimingFn();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    onUnmounted(() => {
 | 
			
		||||
      clearInterval(drawTiming.value);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    return () => {
 | 
			
		||||
      return (
 | 
			
		||||
        <div>
 | 
			
		||||
          <Draw cdata={cdata} />
 | 
			
		||||
        </div>
 | 
			
		||||
      );
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,81 @@
 | 
			
		|||
<template>
 | 
			
		||||
    <Draw :cdata="cdata" />
 | 
			
		||||
</template>
 | 
			
		||||
<script setup lang="tsx">
 | 
			
		||||
import Draw from "./draw.vue";
 | 
			
		||||
import { onMounted, onUnmounted, reactive,ref } from "vue";
 | 
			
		||||
 | 
			
		||||
const drawTiming:any = ref(0);
 | 
			
		||||
const cdata = reactive({
 | 
			
		||||
  year: null,
 | 
			
		||||
  weekCategory: [],
 | 
			
		||||
  radarData: [],
 | 
			
		||||
  radarDataAvg: [],
 | 
			
		||||
  maxData: 12000,
 | 
			
		||||
  weekMaxData: [],
 | 
			
		||||
  weekLineData: [],
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const setData = () => {
 | 
			
		||||
  // 清空轮询数据
 | 
			
		||||
  cdata.weekCategory = [];
 | 
			
		||||
  cdata.weekMaxData = [];
 | 
			
		||||
  cdata.weekLineData = [];
 | 
			
		||||
  cdata.radarData = [];
 | 
			
		||||
  cdata.radarDataAvg = [];
 | 
			
		||||
 | 
			
		||||
  const dateBase = new Date();
 | 
			
		||||
  cdata.year = dateBase.getFullYear();
 | 
			
		||||
  // 周数据
 | 
			
		||||
  for (let i = 0; i < 7; i++) {
 | 
			
		||||
    // 日期
 | 
			
		||||
    const date = new Date();
 | 
			
		||||
    cdata.weekCategory.unshift(
 | 
			
		||||
      [date.getMonth() + 1, date.getDate() - i].join("/")
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    // 折线图数据
 | 
			
		||||
    cdata.weekMaxData.push(cdata.maxData);
 | 
			
		||||
    const distance = Math.round(Math.random() * 11000 + 500);
 | 
			
		||||
    cdata.weekLineData.push(distance);
 | 
			
		||||
 | 
			
		||||
    // 雷达图数据
 | 
			
		||||
    // 我的指标
 | 
			
		||||
    const averageSpeed = +(Math.random() * 5 + 3).toFixed(3);
 | 
			
		||||
    const maxSpeed = averageSpeed + +(Math.random() * 3).toFixed(2);
 | 
			
		||||
    const hour = +(distance / 1000 / averageSpeed).toFixed(1);
 | 
			
		||||
    const radarDayData = [distance, averageSpeed, maxSpeed, hour];
 | 
			
		||||
    cdata.radarData.unshift(radarDayData);
 | 
			
		||||
 | 
			
		||||
    // 平均指标
 | 
			
		||||
    const distanceAvg = Math.round(Math.random() * 8000 + 4000);
 | 
			
		||||
    const averageSpeedAvg = +(Math.random() * 4 + 4).toFixed(3);
 | 
			
		||||
    const maxSpeedAvg = averageSpeedAvg + +(Math.random() * 2).toFixed(2);
 | 
			
		||||
    const hourAvg = +(distance / 1000 / averageSpeed).toFixed(1);
 | 
			
		||||
    const radarDayDataAvg = [
 | 
			
		||||
      distanceAvg,
 | 
			
		||||
      averageSpeedAvg,
 | 
			
		||||
      maxSpeedAvg,
 | 
			
		||||
      hourAvg,
 | 
			
		||||
    ];
 | 
			
		||||
    cdata.radarDataAvg.unshift(radarDayDataAvg);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const drawTimingFn = () => {
 | 
			
		||||
  setData();
 | 
			
		||||
  drawTiming.value = setInterval(() => {
 | 
			
		||||
    setData();
 | 
			
		||||
  }, 6000);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
onMounted(() => {
 | 
			
		||||
  drawTimingFn();
 | 
			
		||||
});
 | 
			
		||||
onUnmounted(() => {
 | 
			
		||||
  clearInterval(drawTiming.value);
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -6,7 +6,7 @@
 | 
			
		|||
          <i class="iconfont icon-chart-area" />
 | 
			
		||||
        </span>
 | 
			
		||||
        <div class="d-flex">
 | 
			
		||||
          <span class="fs-xl text mx-2 mt-1">数据统计图</span>
 | 
			
		||||
          <span class="fs-xl text mx-2 mt-1">数据统计图123132</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div>
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +17,7 @@
 | 
			
		|||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
  import Chart from "./chart/index";
 | 
			
		||||
  import Chart from "./chart/index.vue";
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" class>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,97 +0,0 @@
 | 
			
		|||
import { defineComponent, ref, watch, shallowReactive } from 'vue'
 | 
			
		||||
 | 
			
		||||
// 声明类型
 | 
			
		||||
const PropsType = {
 | 
			
		||||
  cdata: {
 | 
			
		||||
    type: Object,
 | 
			
		||||
    require: true
 | 
			
		||||
  }
 | 
			
		||||
} as const
 | 
			
		||||
 | 
			
		||||
// 定义主体
 | 
			
		||||
export default defineComponent({
 | 
			
		||||
  props: PropsType,
 | 
			
		||||
  setup(props) {
 | 
			
		||||
    // 定义 ref
 | 
			
		||||
    const chartRef = ref()
 | 
			
		||||
    // 配置项
 | 
			
		||||
    let options = shallowReactive({color:null,tooltip:null,toolbox:null,calculable:null,legend:null,series:null})
 | 
			
		||||
 | 
			
		||||
    watch(
 | 
			
		||||
      () => props.cdata,
 | 
			
		||||
      (val: any) => {
 | 
			
		||||
        options = {
 | 
			
		||||
          color: [
 | 
			
		||||
            '#37a2da',
 | 
			
		||||
            '#32c5e9',
 | 
			
		||||
            '#9fe6b8',
 | 
			
		||||
            '#ffdb5c',
 | 
			
		||||
            '#ff9f7f',
 | 
			
		||||
            '#fb7293',
 | 
			
		||||
            '#e7bcf3',
 | 
			
		||||
            '#8378ea'
 | 
			
		||||
          ],
 | 
			
		||||
          tooltip: {
 | 
			
		||||
            trigger: 'item',
 | 
			
		||||
            formatter: '{a} <br/>{b} : {c} ({d}%)'
 | 
			
		||||
          },
 | 
			
		||||
          toolbox: {
 | 
			
		||||
            show: true
 | 
			
		||||
          },
 | 
			
		||||
          calculable: true,
 | 
			
		||||
          legend: {
 | 
			
		||||
            orient: 'horizontal',
 | 
			
		||||
            icon: 'circle',
 | 
			
		||||
            bottom: 0,
 | 
			
		||||
            x: 'center',
 | 
			
		||||
            data: val.xData,
 | 
			
		||||
            textStyle: {
 | 
			
		||||
              color: '#fff'
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          series: [
 | 
			
		||||
            {
 | 
			
		||||
              name: '通过率统计',
 | 
			
		||||
              type: 'pie',
 | 
			
		||||
              radius: [10, 50],
 | 
			
		||||
              roseType: 'area',
 | 
			
		||||
              center: ['50%', '40%'],
 | 
			
		||||
              itemStyle: {
 | 
			
		||||
                borderRadius: 5
 | 
			
		||||
              },
 | 
			
		||||
              label: {
 | 
			
		||||
                show: true,
 | 
			
		||||
                color: "#fff",
 | 
			
		||||
              },
 | 
			
		||||
              emphasis: {
 | 
			
		||||
                label: {
 | 
			
		||||
                  show: false
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              data: val.seriesData
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
        // 手动触发更新
 | 
			
		||||
        if (chartRef.value) {
 | 
			
		||||
          // 通过初始化参数打入数据
 | 
			
		||||
          chartRef.value.initChart(options)
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        immediate: true,
 | 
			
		||||
        deep: true
 | 
			
		||||
      }
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    return () => {
 | 
			
		||||
      const height = "220px"
 | 
			
		||||
      const width = "260px"
 | 
			
		||||
 | 
			
		||||
      return <div>
 | 
			
		||||
        <echart ref={chartRef} options={options} height={height} width={width} />
 | 
			
		||||
      </div>
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,105 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div :style="{ height, width }" ref="chartRef"></div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
  import { ref, shallowReactive, watch } from "vue";
 | 
			
		||||
  import * as echarts from "echarts";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  const height = "220px";
 | 
			
		||||
  const width = "260px";
 | 
			
		||||
  const props = defineProps<{
 | 
			
		||||
    cdata: {
 | 
			
		||||
      xData: string[],
 | 
			
		||||
      seriesData: {
 | 
			
		||||
        value: number,
 | 
			
		||||
        name: string
 | 
			
		||||
      }[]
 | 
			
		||||
    };
 | 
			
		||||
  }>();
 | 
			
		||||
 | 
			
		||||
  // 定义 ref
 | 
			
		||||
  const chartRef = ref();
 | 
			
		||||
 | 
			
		||||
  // 配置项
 | 
			
		||||
  let options = shallowReactive({ color: null, tooltip: null, toolbox: null, calculable: null, legend: null, series: null });
 | 
			
		||||
  // echarts 实例
 | 
			
		||||
  let chartInstance: echarts.ECharts | null = null;
 | 
			
		||||
  watch(
 | 
			
		||||
    () => props.cdata,
 | 
			
		||||
    (val: any) => {
 | 
			
		||||
      options = {
 | 
			
		||||
        color: [
 | 
			
		||||
          "#37a2da",
 | 
			
		||||
          "#32c5e9",
 | 
			
		||||
          "#9fe6b8",
 | 
			
		||||
          "#ffdb5c",
 | 
			
		||||
          "#ff9f7f",
 | 
			
		||||
          "#fb7293",
 | 
			
		||||
          "#e7bcf3",
 | 
			
		||||
          "#8378ea"
 | 
			
		||||
        ],
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: "item",
 | 
			
		||||
          formatter: "{a} <br/>{b} : {c} ({d}%)"
 | 
			
		||||
        },
 | 
			
		||||
        toolbox: {
 | 
			
		||||
          show: true
 | 
			
		||||
        },
 | 
			
		||||
        calculable: true,
 | 
			
		||||
        legend: {
 | 
			
		||||
          orient: "horizontal",
 | 
			
		||||
          icon: "circle",
 | 
			
		||||
          bottom: 0,
 | 
			
		||||
          x: "center",
 | 
			
		||||
          data: val.xData,
 | 
			
		||||
          textStyle: {
 | 
			
		||||
            color: "#fff"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        series: [
 | 
			
		||||
          {
 | 
			
		||||
            name: "通过率统计",
 | 
			
		||||
            type: "pie",
 | 
			
		||||
            radius: [10, 50],
 | 
			
		||||
            roseType: "area",
 | 
			
		||||
            center: ["50%", "40%"],
 | 
			
		||||
            itemStyle: {
 | 
			
		||||
              borderRadius: 5
 | 
			
		||||
            },
 | 
			
		||||
            label: {
 | 
			
		||||
              show: true,
 | 
			
		||||
              color: "#fff"
 | 
			
		||||
            },
 | 
			
		||||
            emphasis: {
 | 
			
		||||
              label: {
 | 
			
		||||
                show: false
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            data: val.seriesData
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      };
 | 
			
		||||
      // // 手动触发更新
 | 
			
		||||
      // if (chartRef.value) {
 | 
			
		||||
      //   // 通过初始化参数打入数据
 | 
			
		||||
      //   chartRef.value.initChart(options)
 | 
			
		||||
      // }
 | 
			
		||||
      // 手动触发更新
 | 
			
		||||
      if (chartRef.value) {
 | 
			
		||||
        if (!chartInstance) {
 | 
			
		||||
          chartInstance = echarts.init(chartRef.value);
 | 
			
		||||
        }
 | 
			
		||||
        chartInstance.setOption(options);
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      immediate: true,
 | 
			
		||||
      deep: true
 | 
			
		||||
    }
 | 
			
		||||
  );
 | 
			
		||||
</script>
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,39 +0,0 @@
 | 
			
		|||
import { defineComponent, onUnmounted, reactive } from 'vue'
 | 
			
		||||
import Draw from './draw'
 | 
			
		||||
 | 
			
		||||
export default defineComponent({
 | 
			
		||||
  components: {
 | 
			
		||||
    Draw,
 | 
			
		||||
  },
 | 
			
		||||
  setup() {
 | 
			
		||||
    let intervalInstance = null
 | 
			
		||||
    const cdata = reactive({
 | 
			
		||||
      xData: ['数据1', '数据2', '数据3', '数据4', '数据5', '数据6'],
 | 
			
		||||
      seriesData: [
 | 
			
		||||
        { value: 10, name: '数据1' },
 | 
			
		||||
        { value: 5, name: '数据2' },
 | 
			
		||||
        { value: 15, name: '数据3' },
 | 
			
		||||
        { value: 25, name: '数据4' },
 | 
			
		||||
        { value: 20, name: '数据5' },
 | 
			
		||||
        { value: 35, name: '数据6' },
 | 
			
		||||
      ],
 | 
			
		||||
    })
 | 
			
		||||
    intervalInstance = setInterval(() => {
 | 
			
		||||
      const data = cdata.seriesData
 | 
			
		||||
      cdata.seriesData = data.map((e) => {
 | 
			
		||||
        return { value: e.value + 10, name: e.name }
 | 
			
		||||
      })
 | 
			
		||||
    }, 1000)
 | 
			
		||||
 | 
			
		||||
    onUnmounted(() => {
 | 
			
		||||
      clearInterval(intervalInstance)
 | 
			
		||||
    })
 | 
			
		||||
    return () => {
 | 
			
		||||
      return (
 | 
			
		||||
        <div>
 | 
			
		||||
          <Draw cdata={cdata} />
 | 
			
		||||
        </div>
 | 
			
		||||
      )
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
})
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
 | 
			
		||||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <Draw :cdata=cdata />
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
  import { onUnmounted, reactive } from "vue";
 | 
			
		||||
  import Draw from './draw.vue'
 | 
			
		||||
  let intervalInstance = null
 | 
			
		||||
 | 
			
		||||
  const cdata = reactive({
 | 
			
		||||
    xData: ['数据1', '数据2', '数据3', '数据4', '数据5', '数据6'],
 | 
			
		||||
    seriesData: [
 | 
			
		||||
      { value: 10, name: '数据1' },
 | 
			
		||||
      { value: 5, name: '数据2' },
 | 
			
		||||
      { value: 15, name: '数据3' },
 | 
			
		||||
      { value: 25, name: '数据4' },
 | 
			
		||||
      { value: 20, name: '数据5' },
 | 
			
		||||
      { value: 35, name: '数据6' },
 | 
			
		||||
    ],
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  intervalInstance = setInterval(() => {
 | 
			
		||||
    const data = cdata.seriesData
 | 
			
		||||
    cdata.seriesData = data.map((e) => {
 | 
			
		||||
      return { value: e.value + 10, name: e.name }
 | 
			
		||||
    })
 | 
			
		||||
  }, 1000)
 | 
			
		||||
 | 
			
		||||
  onUnmounted(() => {
 | 
			
		||||
    clearInterval(intervalInstance)
 | 
			
		||||
  })
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -42,14 +42,14 @@
 | 
			
		|||
 | 
			
		||||
<script lang="ts">
 | 
			
		||||
  import { defineComponent, onMounted, onUnmounted, reactive } from "vue";
 | 
			
		||||
  import Chart from "./chart/index";
 | 
			
		||||
  import Chart from "./chart/index.vue";
 | 
			
		||||
  export default defineComponent({
 | 
			
		||||
    components: {
 | 
			
		||||
      Chart,
 | 
			
		||||
    },
 | 
			
		||||
    setup() {
 | 
			
		||||
      // 下层数据
 | 
			
		||||
      const dataArr = [
 | 
			
		||||
      const dataArr = reactive([
 | 
			
		||||
        {
 | 
			
		||||
          number: 150,
 | 
			
		||||
          text: "今日构建总量",
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +66,7 @@
 | 
			
		|||
          number: 571,
 | 
			
		||||
          text: "未通过数量",
 | 
			
		||||
        },
 | 
			
		||||
      ];
 | 
			
		||||
      ]);
 | 
			
		||||
      // 对应图标
 | 
			
		||||
      const iconFont = [
 | 
			
		||||
        "icon-diagnose",
 | 
			
		||||
| 
						 | 
				
			
			@ -74,8 +74,8 @@
 | 
			
		|||
        "icon-cloudupload",
 | 
			
		||||
        "icon-clouddownload",
 | 
			
		||||
      ];
 | 
			
		||||
      const numberData = reactive([]);
 | 
			
		||||
      let intervalInstance = null;
 | 
			
		||||
      const numberData:any = reactive([]);
 | 
			
		||||
      let intervalInstance:any = null;
 | 
			
		||||
      onMounted(() => {
 | 
			
		||||
        setData();
 | 
			
		||||
        changeTiming();
 | 
			
		||||
| 
						 | 
				
			
			@ -93,7 +93,7 @@
 | 
			
		|||
              },
 | 
			
		||||
            },
 | 
			
		||||
            text: e.text,
 | 
			
		||||
          });
 | 
			
		||||
          } );
 | 
			
		||||
        });
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -103,7 +103,7 @@
 | 
			
		|||
        }, 2000);
 | 
			
		||||
      };
 | 
			
		||||
      const changeNumber = () => {
 | 
			
		||||
        numberData.forEach((item, index) => {
 | 
			
		||||
        numberData.forEach((item:any, index:any) => {
 | 
			
		||||
          item.config.number[0] += ++index;
 | 
			
		||||
          item.config = { ...item.config };
 | 
			
		||||
        });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,131 +0,0 @@
 | 
			
		|||
import { defineComponent, watch, shallowReactive } from 'vue'
 | 
			
		||||
 | 
			
		||||
// 声明类型
 | 
			
		||||
const PropsType = {
 | 
			
		||||
  cdata: {
 | 
			
		||||
    type: Object,
 | 
			
		||||
    require: true
 | 
			
		||||
  }
 | 
			
		||||
} as const
 | 
			
		||||
 | 
			
		||||
// 定义主体
 | 
			
		||||
export default defineComponent({
 | 
			
		||||
  props: PropsType,
 | 
			
		||||
  setup(props) {
 | 
			
		||||
    // 定义固定配置项
 | 
			
		||||
    const lineStyle = {
 | 
			
		||||
      normal: {
 | 
			
		||||
        width: 1,
 | 
			
		||||
        opacity: 0.5
 | 
			
		||||
      }
 | 
			
		||||
    };
 | 
			
		||||
    // 配置项
 | 
			
		||||
    let options = shallowReactive({radar:null,series:null})
 | 
			
		||||
 | 
			
		||||
    watch(
 | 
			
		||||
      () => props.cdata,
 | 
			
		||||
      (val: any) => {
 | 
			
		||||
        options = {
 | 
			
		||||
          radar: {
 | 
			
		||||
            indicator: val.indicatorData,
 | 
			
		||||
            shape: "circle",
 | 
			
		||||
            splitNumber: 5,
 | 
			
		||||
            radius: ["0%", "65%"],
 | 
			
		||||
            name: {
 | 
			
		||||
              textStyle: {
 | 
			
		||||
                color: "rgb(238, 197, 102)"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            splitLine: {
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: [
 | 
			
		||||
                  "rgba(238, 197, 102, 0.1)",
 | 
			
		||||
                  "rgba(238, 197, 102, 0.2)",
 | 
			
		||||
                  "rgba(238, 197, 102, 0.4)",
 | 
			
		||||
                  "rgba(238, 197, 102, 0.6)",
 | 
			
		||||
                  "rgba(238, 197, 102, 0.8)",
 | 
			
		||||
                  "rgba(238, 197, 102, 1)"
 | 
			
		||||
                ].reverse()
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            splitArea: {
 | 
			
		||||
              show: false
 | 
			
		||||
            },
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: "rgba(238, 197, 102, 0.5)"
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          series: [
 | 
			
		||||
            {
 | 
			
		||||
              name: "北京",
 | 
			
		||||
              type: "radar",
 | 
			
		||||
              lineStyle: lineStyle,
 | 
			
		||||
              data: val.dataBJ,
 | 
			
		||||
              symbol: "none",
 | 
			
		||||
              itemStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  color: "#F9713C"
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              areaStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  opacity: 0.1
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              name: "上海",
 | 
			
		||||
              type: "radar",
 | 
			
		||||
              lineStyle: lineStyle,
 | 
			
		||||
              data: val.dataSH,
 | 
			
		||||
              symbol: "none",
 | 
			
		||||
              itemStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  color: "#B3E4A1"
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              areaStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  opacity: 0.05
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              name: "广州",
 | 
			
		||||
              type: "radar",
 | 
			
		||||
              lineStyle: lineStyle,
 | 
			
		||||
              data: val.dataGZ,
 | 
			
		||||
              symbol: "none",
 | 
			
		||||
              itemStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  color: "rgb(238, 197, 102)"
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              areaStyle: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                  opacity: 0.05
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        immediate: true,
 | 
			
		||||
        deep: true
 | 
			
		||||
      }
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    return () => {
 | 
			
		||||
      const height = "200px"
 | 
			
		||||
      const width = "260px"
 | 
			
		||||
 | 
			
		||||
      return <div>
 | 
			
		||||
        <echart options={options} height={height} width={width} />
 | 
			
		||||
      </div>
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,143 @@
 | 
			
		|||
 | 
			
		||||
<template>
 | 
			
		||||
  <div :style="{ height, width }"  ref="chartRef"></div>
 | 
			
		||||
</template>
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
  import { shallowReactive, watch,ref } from "vue";
 | 
			
		||||
  import * as echarts from "echarts";
 | 
			
		||||
 | 
			
		||||
  const props = defineProps<{
 | 
			
		||||
    cdata: {
 | 
			
		||||
      indicatorData: {
 | 
			
		||||
        name:string,
 | 
			
		||||
        max:number
 | 
			
		||||
      },
 | 
			
		||||
      dataBJ:number[][]
 | 
			
		||||
      dataGZ: number[][]
 | 
			
		||||
      dataSH:number[][]
 | 
			
		||||
    };
 | 
			
		||||
  }>();
 | 
			
		||||
 | 
			
		||||
  // 定义固定配置项
 | 
			
		||||
  const lineStyle = {
 | 
			
		||||
    normal: {
 | 
			
		||||
      width: 1,
 | 
			
		||||
      opacity: 0.5
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
  // 配置项
 | 
			
		||||
  let options = shallowReactive({radar:null,series:null})
 | 
			
		||||
 | 
			
		||||
  // 定义 ref
 | 
			
		||||
  const chartRef = ref();
 | 
			
		||||
  const height = "200px"
 | 
			
		||||
  const width = "260px"
 | 
			
		||||
  // echarts 实例
 | 
			
		||||
  let chartInstance: echarts.ECharts | null = null;
 | 
			
		||||
  watch(
 | 
			
		||||
    () => props.cdata,
 | 
			
		||||
    (val: any) => {
 | 
			
		||||
      options = {
 | 
			
		||||
        radar: {
 | 
			
		||||
          indicator: val.indicatorData,
 | 
			
		||||
          shape: "circle",
 | 
			
		||||
          splitNumber: 5,
 | 
			
		||||
          radius: ["0%", "65%"],
 | 
			
		||||
          name: {
 | 
			
		||||
            textStyle: {
 | 
			
		||||
              color: "rgb(238, 197, 102)"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          splitLine: {
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              color: [
 | 
			
		||||
                "rgba(238, 197, 102, 0.1)",
 | 
			
		||||
                "rgba(238, 197, 102, 0.2)",
 | 
			
		||||
                "rgba(238, 197, 102, 0.4)",
 | 
			
		||||
                "rgba(238, 197, 102, 0.6)",
 | 
			
		||||
                "rgba(238, 197, 102, 0.8)",
 | 
			
		||||
                "rgba(238, 197, 102, 1)"
 | 
			
		||||
              ].reverse()
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          splitArea: {
 | 
			
		||||
            show: false
 | 
			
		||||
          },
 | 
			
		||||
          axisLine: {
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              color: "rgba(238, 197, 102, 0.5)"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        series: [
 | 
			
		||||
          {
 | 
			
		||||
            name: "北京",
 | 
			
		||||
            type: "radar",
 | 
			
		||||
            lineStyle: lineStyle,
 | 
			
		||||
            data: val.dataBJ,
 | 
			
		||||
            symbol: "none",
 | 
			
		||||
            itemStyle: {
 | 
			
		||||
              normal: {
 | 
			
		||||
                color: "#F9713C",
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            areaStyle: {
 | 
			
		||||
              normal: {
 | 
			
		||||
                opacity: 0.1
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            name: "上海",
 | 
			
		||||
            type: "radar",
 | 
			
		||||
            lineStyle: lineStyle,
 | 
			
		||||
            data: val.dataSH,
 | 
			
		||||
            symbol: "none",
 | 
			
		||||
            itemStyle: {
 | 
			
		||||
              normal: {
 | 
			
		||||
                color: "#B3E4A1"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            areaStyle: {
 | 
			
		||||
              normal: {
 | 
			
		||||
                opacity: 0.05
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            name: "广州",
 | 
			
		||||
            type: "radar",
 | 
			
		||||
            lineStyle: lineStyle,
 | 
			
		||||
            data: val.dataGZ,
 | 
			
		||||
            symbol: "none",
 | 
			
		||||
            itemStyle: {
 | 
			
		||||
              normal: {
 | 
			
		||||
                color: "rgb(238, 197, 102)"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            areaStyle: {
 | 
			
		||||
              normal: {
 | 
			
		||||
                opacity: 0.05
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
      if (chartRef.value) {
 | 
			
		||||
        if (!chartInstance) {
 | 
			
		||||
          chartInstance = echarts.init(chartRef.value);
 | 
			
		||||
        }
 | 
			
		||||
        chartInstance.setOption(options);
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      immediate: true,
 | 
			
		||||
      deep: true
 | 
			
		||||
    }
 | 
			
		||||
  )
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,51 +0,0 @@
 | 
			
		|||
import { defineComponent, reactive } from 'vue'
 | 
			
		||||
import Draw from './draw'
 | 
			
		||||
export default defineComponent({
 | 
			
		||||
  components: {
 | 
			
		||||
    Draw
 | 
			
		||||
  },
 | 
			
		||||
  setup() {
 | 
			
		||||
    const cdata = reactive({
 | 
			
		||||
      indicatorData: [
 | 
			
		||||
        { name: "数据1", max: 300 },
 | 
			
		||||
        { name: "数据2", max: 250 },
 | 
			
		||||
        { name: "数据3", max: 300 },
 | 
			
		||||
        { name: "数据4", max: 5 },
 | 
			
		||||
        { name: "数据5", max: 200 },
 | 
			
		||||
        { name: "数据6", max: 100 }
 | 
			
		||||
      ],
 | 
			
		||||
      dataBJ: [
 | 
			
		||||
        [94, 69, 114, 2.08, 73, 39, 22],
 | 
			
		||||
        [99, 73, 110, 2.43, 76, 48, 23],
 | 
			
		||||
        [31, 12, 30, 0.5, 32, 16, 24],
 | 
			
		||||
        [42, 27, 43, 1, 53, 22, 25],
 | 
			
		||||
        [154, 117, 157, 3.05, 92, 58, 26],
 | 
			
		||||
        [234, 185, 230, 4.09, 123, 69, 27],
 | 
			
		||||
        [160, 120, 186, 2.77, 91, 50, 28]
 | 
			
		||||
      ],
 | 
			
		||||
      dataGZ: [
 | 
			
		||||
        [84, 94, 140, 2.238, 68, 18, 22],
 | 
			
		||||
        [93, 77, 104, 1.165, 53, 7, 23],
 | 
			
		||||
        [99, 130, 227, 3.97, 55, 15, 24],
 | 
			
		||||
        [146, 84, 139, 1.094, 40, 17, 25],
 | 
			
		||||
        [113, 108, 137, 1.481, 48, 15, 26],
 | 
			
		||||
        [81, 48, 62, 1.619, 26, 3, 27],
 | 
			
		||||
        [56, 48, 68, 1.336, 37, 9, 28]
 | 
			
		||||
      ],
 | 
			
		||||
      dataSH: [
 | 
			
		||||
        [91, 45, 125, 0.82, 34, 23, 1],
 | 
			
		||||
        [65, 27, 78, 0.86, 45, 29, 2],
 | 
			
		||||
        [83, 60, 84, 1.09, 73, 27, 3],
 | 
			
		||||
        [109, 81, 121, 1.28, 68, 51, 4],
 | 
			
		||||
        [106, 77, 114, 1.07, 55, 51, 5],
 | 
			
		||||
        [109, 81, 121, 1.28, 68, 51, 6],
 | 
			
		||||
        [106, 77, 114, 1.07, 55, 51, 7]
 | 
			
		||||
      ]
 | 
			
		||||
    })
 | 
			
		||||
    return () => {
 | 
			
		||||
      return <div>
 | 
			
		||||
        <draw cdata={cdata} />
 | 
			
		||||
      </div>
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,62 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <Draw :cdata=cdata />
 | 
			
		||||
</template>
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  import Draw from "./draw.vue";
 | 
			
		||||
  import { onUnmounted,reactive } from "vue";
 | 
			
		||||
 | 
			
		||||
  let intervalInstance = null;
 | 
			
		||||
  const cdata = reactive({
 | 
			
		||||
    indicatorData: [
 | 
			
		||||
      { name: "数据1", max: 300 },
 | 
			
		||||
      { name: "数据2", max: 250 },
 | 
			
		||||
      { name: "数据3", max: 300 },
 | 
			
		||||
      { name: "数据4", max: 5 },
 | 
			
		||||
      { name: "数据5", max: 200 },
 | 
			
		||||
      { name: "数据6", max: 100 }
 | 
			
		||||
    ],
 | 
			
		||||
    dataBJ: [
 | 
			
		||||
      [94, 69, 114, 2.08, 73, 39, 22],
 | 
			
		||||
      [99, 73, 110, 2.43, 76, 48, 23],
 | 
			
		||||
      [31, 12, 30, 0.5, 32, 16, 24],
 | 
			
		||||
      [42, 27, 43, 1, 53, 22, 25],
 | 
			
		||||
      [154, 117, 157, 3.05, 92, 58, 26],
 | 
			
		||||
      [234, 185, 230, 4.09, 123, 69, 27],
 | 
			
		||||
      [160, 120, 186, 2.77, 91, 50, 28]
 | 
			
		||||
    ],
 | 
			
		||||
    dataGZ: [
 | 
			
		||||
      [84, 94, 140, 2.238, 68, 18, 22],
 | 
			
		||||
      [93, 77, 104, 1.165, 53, 7, 23],
 | 
			
		||||
      [99, 130, 227, 3.97, 55, 15, 24],
 | 
			
		||||
      [146, 84, 139, 1.094, 40, 17, 25],
 | 
			
		||||
      [113, 108, 137, 1.481, 48, 15, 26],
 | 
			
		||||
      [81, 48, 62, 1.619, 26, 3, 27],
 | 
			
		||||
      [56, 48, 68, 1.336, 37, 9, 28]
 | 
			
		||||
    ],
 | 
			
		||||
    dataSH: [
 | 
			
		||||
      [91, 45, 125, 0.82, 34, 23, 1],
 | 
			
		||||
      [65, 27, 78, 0.86, 45, 29, 2],
 | 
			
		||||
      [83, 60, 84, 1.09, 73, 27, 3],
 | 
			
		||||
      [109, 81, 121, 1.28, 68, 51, 4],
 | 
			
		||||
      [106, 77, 114, 1.07, 55, 51, 5],
 | 
			
		||||
      [109, 81, 121, 1.28, 68, 51, 6],
 | 
			
		||||
      [106, 77, 114, 1.07, 55, 51, 7]
 | 
			
		||||
    ]
 | 
			
		||||
  });
 | 
			
		||||
  intervalInstance = setInterval(() => {
 | 
			
		||||
    const data = cdata.indicatorData as any;
 | 
			
		||||
    cdata.indicatorData = data.map((e) => {
 | 
			
		||||
      return { value: e.max, name: e.name };
 | 
			
		||||
    });
 | 
			
		||||
  }, 1000);
 | 
			
		||||
  onUnmounted(() => {
 | 
			
		||||
    clearInterval(intervalInstance);
 | 
			
		||||
  });
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss">
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -20,8 +20,7 @@
 | 
			
		|||
 | 
			
		||||
<script setup lang="ts">
 | 
			
		||||
  import { reactive } from "vue";
 | 
			
		||||
  import Chart from "./chart/index.tsx";
 | 
			
		||||
 | 
			
		||||
  import Chart from "./chart/index.vue";
 | 
			
		||||
  const config = reactive({
 | 
			
		||||
    data: [
 | 
			
		||||
      { name: "南阳", value: 167 },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,7 @@ export const WEEK = ["周日", "周一", "周二", "周三", "周四", "周五",
 | 
			
		|||
 | 
			
		||||
// 主题名称与副标题名称
 | 
			
		||||
export const title = "大数据可视化平台";
 | 
			
		||||
export const subtitle = ["数据分析1", "数据分析2", "vue-big-screen"];
 | 
			
		||||
export const subtitle = ["数据分析1", "数据分析2", "数据分析3"];
 | 
			
		||||
 | 
			
		||||
export const moduleInfo: ModuleInfo = [
 | 
			
		||||
  // 中间的几个模块
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,7 +64,7 @@
 | 
			
		|||
            <div class="content-box">
 | 
			
		||||
              <div>
 | 
			
		||||
                <dv-border-box-12>
 | 
			
		||||
                  <!-- <CenterLeft1 /> -->
 | 
			
		||||
                   <CenterLeft1 />
 | 
			
		||||
                </dv-border-box-12>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +78,7 @@
 | 
			
		|||
              </div>
 | 
			
		||||
              <!-- 中间 -->
 | 
			
		||||
              <div>
 | 
			
		||||
                <!-- <CenterRight1 /> -->
 | 
			
		||||
                 <CenterRight1 />
 | 
			
		||||
              </div>
 | 
			
		||||
              <div>
 | 
			
		||||
                <dv-border-box-13>
 | 
			
		||||
| 
						 | 
				
			
			@ -93,7 +93,7 @@
 | 
			
		|||
                <BottomLeft />
 | 
			
		||||
              </dv-border-box-13>
 | 
			
		||||
              <dv-border-box-12>
 | 
			
		||||
                <!-- <BottomRight /> -->
 | 
			
		||||
                 <BottomRight />
 | 
			
		||||
              </dv-border-box-12>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -111,14 +111,14 @@
 | 
			
		|||
  import { title, subtitle, moduleInfo } from "./constant/index";
 | 
			
		||||
  // 有用的 已修改的组件
 | 
			
		||||
  import BottomLeft from "./components/bottomLeft/index.vue";
 | 
			
		||||
  import BottomRight from './components/bottomRight/index.vue'
 | 
			
		||||
  import CenterRight2 from "./components/centerRight2/index.vue";
 | 
			
		||||
 | 
			
		||||
  import CenterLeft1 from './components/centerLeft1/index.vue'
 | 
			
		||||
  import CenterRight1 from "./components/centerRight1/index.vue";
 | 
			
		||||
  // 未修改的组件
 | 
			
		||||
  // import CenterLeft1 from "./components/centerLeft1/index.vue";
 | 
			
		||||
  // import CenterLeft2 from "./components/centerLeft2/index.vue";
 | 
			
		||||
  // import Center from "./components/center/index.vue";
 | 
			
		||||
  // import CenterRight1 from "./components/centerRight1/index.vue";
 | 
			
		||||
  // import BottomRight from "./components/bottomRight/index.vue";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // * 颜色
 | 
			
		||||
  const decorationColors = ["#568aea", "#000000"];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue