165 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
  <div :class="className" :style="{ height: height, width: width }" />
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
import echarts from "echarts";
 | 
						|
require("echarts/theme/macarons"); // echarts theme
 | 
						|
import resize from "./mixins/resize";
 | 
						|
import { listClass } from "@/api/system/class";
 | 
						|
 | 
						|
export default {
 | 
						|
  mixins: [resize],
 | 
						|
  props: {
 | 
						|
    className: {
 | 
						|
      type: String,
 | 
						|
      default: "chart",
 | 
						|
    },
 | 
						|
    width: {
 | 
						|
      type: String,
 | 
						|
      default: "100%",
 | 
						|
    },
 | 
						|
    height: {
 | 
						|
      type: String,
 | 
						|
      default: "350px",
 | 
						|
    },
 | 
						|
    autoResize: {
 | 
						|
      type: Boolean,
 | 
						|
      default: true,
 | 
						|
    },
 | 
						|
    // chartData: {
 | 
						|
    //   type: Object,
 | 
						|
    //   required: true,
 | 
						|
    // },
 | 
						|
  },
 | 
						|
  data() {
 | 
						|
    return {
 | 
						|
      chart: null,
 | 
						|
      classOptions: null,
 | 
						|
      expectedData: null,
 | 
						|
      actualData: null,
 | 
						|
    };
 | 
						|
  },
 | 
						|
  watch: {
 | 
						|
    // chartData: {
 | 
						|
    //   deep: true,
 | 
						|
    //   handler(val) {
 | 
						|
    //     this.setOptions(val);
 | 
						|
    //   },
 | 
						|
    // },
 | 
						|
  },
 | 
						|
  mounted() {
 | 
						|
    this.$nextTick(() => {
 | 
						|
      this.getClassList();
 | 
						|
    });
 | 
						|
  },
 | 
						|
  beforeDestroy() {
 | 
						|
    if (!this.chart) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    this.chart.dispose();
 | 
						|
    this.chart = null;
 | 
						|
  },
 | 
						|
  methods: {
 | 
						|
    /** 查询班级信息列表 */
 | 
						|
    async getClassList() {
 | 
						|
      await listClass(this.queryParams).then((response) => {
 | 
						|
        // console.log(response.rows);
 | 
						|
        var items = [];
 | 
						|
        var childcounts = [];
 | 
						|
        var childcheckincounts = [];
 | 
						|
        response.rows.forEach((element) => {
 | 
						|
          items.push(element.bjmc);
 | 
						|
          childcounts.push(element.childcount);
 | 
						|
          childcheckincounts.push(element.childcheckincount);
 | 
						|
        });
 | 
						|
        this.classOptions = items;
 | 
						|
        this.expectedData = childcounts;
 | 
						|
        this.actualData = childcheckincounts;
 | 
						|
        // console.log(this.classOptions);
 | 
						|
      });
 | 
						|
      this.initChart();
 | 
						|
    },
 | 
						|
    initChart() {
 | 
						|
      this.chart = echarts.init(this.$el, "macarons");
 | 
						|
      this.setOptions();
 | 
						|
    },
 | 
						|
    setOptions() {
 | 
						|
      this.chart.setOption({
 | 
						|
        title: {
 | 
						|
          text: "考勤统计", 
 | 
						|
        },
 | 
						|
        xAxis: {
 | 
						|
          data: this.classOptions,
 | 
						|
          boundaryGap: false,
 | 
						|
          axisTick: {
 | 
						|
            show: false,
 | 
						|
          },
 | 
						|
        },
 | 
						|
        grid: {
 | 
						|
          left: 10,
 | 
						|
          right: 10,
 | 
						|
          bottom: 20,
 | 
						|
          top: 30,
 | 
						|
          containLabel: true,
 | 
						|
        },
 | 
						|
        tooltip: {
 | 
						|
          trigger: "axis",
 | 
						|
          axisPointer: {
 | 
						|
            type: "cross",
 | 
						|
          },
 | 
						|
          padding: [5, 10],
 | 
						|
        },
 | 
						|
        yAxis: {
 | 
						|
          axisTick: {
 | 
						|
            show: false,
 | 
						|
          },
 | 
						|
        },
 | 
						|
        legend: {
 | 
						|
          data: ["幼儿总数", "幼儿出勤人数"],
 | 
						|
        },
 | 
						|
        series: [
 | 
						|
          {
 | 
						|
            name: "幼儿总数",
 | 
						|
            itemStyle: {
 | 
						|
              normal: {
 | 
						|
                color: "#FF005A",
 | 
						|
                lineStyle: {
 | 
						|
                  color: "#FF005A",
 | 
						|
                  width: 2,
 | 
						|
                },
 | 
						|
              },
 | 
						|
            },
 | 
						|
            smooth: true,
 | 
						|
            type: "line",
 | 
						|
            data: this.expectedData,
 | 
						|
            animationDuration: 2800,
 | 
						|
            animationEasing: "cubicInOut",
 | 
						|
          },
 | 
						|
          {
 | 
						|
            name: "幼儿出勤人数",
 | 
						|
            smooth: true,
 | 
						|
            type: "line",
 | 
						|
            itemStyle: {
 | 
						|
              normal: {
 | 
						|
                color: "#3888fa",
 | 
						|
                lineStyle: {
 | 
						|
                  color: "#3888fa",
 | 
						|
                  width: 2,
 | 
						|
                },
 | 
						|
                areaStyle: {
 | 
						|
                  color: "#f3f8ff",
 | 
						|
                },
 | 
						|
              },
 | 
						|
            },
 | 
						|
            data: this.actualData,
 | 
						|
            animationDuration: 2800,
 | 
						|
            animationEasing: "quadraticOut",
 | 
						|
          },
 | 
						|
        ],
 | 
						|
      });
 | 
						|
    },
 | 
						|
  },
 | 
						|
};
 | 
						|
</script>
 |