Newer
Older
smartKitchenFront / src / views / dashboard / components / supplierEvaluation.vue
<template>
  <div class="chart-container" :style="{ height: height, width: width }">
    <div class="chart-header">
      <!--标题  -->
      <span class="title">供应商季度评价统计</span>
      <el-select v-model="value" placeholder="请选择" size="mini">
        <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
        </el-option>
      </el-select>
    </div>
    <div class="chart-content" :style="{ 'height': parseInt(height) - 40 + 'px'}">
      <!-- echarts内容 -->
      <MixChart :seriesData="seriesData" :xAxisData="xAxisData" :yAxisData="yAxisData" :style="{ 'height': parseInt(height) - 40 + 'px'}"/>
    </div>
  </div>
</template>
    
<script>
import MixChart from "@/components/echart/barChart/MixChart.vue";
import { getSelectContent, getEvaluate } from "@/api/cockpit/cockpit";
export default {
  name: "supplierEvaluation",
  components: {
    MixChart,
  },
  props: {
    name: {
      type: String,
      default: "",
    },
    width: {
      type: String,
      default: "500px",
    },
    height: {
      type: String,
      default: "300px",
    },
  },
  data() {
    return {
      value: "",
      options: [],
      xAxisData: [],
      yAxisData: [],
      seriesData: [],
      legend: [],
    };
  },
  mounted() {
    this.fetchData(); // 真实数据接口,后期接口完成直接打开使用
    // setTimeout(() => {
    //   // 模拟数据
    //   this.seriesData = [
    //     {
    //       name: "资料预审个数",
    //       type: "bar",
    //       tooltip: {
    //         valueFormatter: function (value) {
    //           return value;
    //         },
    //       },
    //       data: [10, 15, 13, 19, 22, 9, 33],
    //     },
    //     {
    //       name: "预审通过率",
    //       type: "bar",
    //       data: [1.1, 1.6, 1.3, 0.9, 0.1, 2.2, 0.4],
    //     },
    //     {
    //       name: "预审1",
    //       type: "bar",
    //       data: [1.1, 1.6, 1.3, 0.9, 0.1, 2.2, 0.4],
    //     },
    //     {
    //       name: "预审2",
    //       type: "bar",
    //       data: [1.1, 1.6, 1.3, 0.9, 0.1, 2.2, 0.4],
    //     },
    //   ];
    //   this.xAxisData = ["10-1", "10-2", "10-3", "10-4", "10-5", "10-6", "10-7"];
    //   this.yAxisData = [
    //     {
    //       type: "value",
    //       show: true,
    //       axisLabel: {
    //         formatter: "{value}",
    //         fontSize: 12,
    //         color: "#000",
    //       },
    //       axisLine: {
    //         show: false,
    //       },
    //       splitLine: {
    //         //多条横线
    //         show: true,
    //       },
    //       interval: 20,
    //     },
    //     {
    //       type: "value",
    //       show: true,
    //       axisLabel: {
    //         formatter: "{value}%",
    //         fontSize: 12,
    //         color: "#000",
    //       },
    //       splitLine: {
    //         //多条横线
    //         show: true,
    //       },
    //       axisLine: {
    //         show: false,
    //       },
    //       interval: 20,
    //     },
    //   ];
    //   this.legend = ["资料预审个数", "预审通过率"];
    // });
  },
  methods: {
    fetchData() {
      // 获取下拉框内容
      getSelectContent().then((res) => {
        this.options = res.data.map((item) => {
          return {
            label: item.name + "年",
            value: item.value,
            id: item.id,
          };
        });
        this.options.length > 0 ? (this.value = this.options[0].value) : null;
        this.options.length > 0 ? this.fetchChartData(this.value) : null;
      });
    },
    fetchChartData() {
      getEvaluate(this.value).then((res) => {
        let seriesData = [];
        let legend = []
        if (res.data.length > 0) {
          for (var user in res.data[0]) {
            legend.push(user);
            seriesData.push({
              name: user,
              data: [],
            });
          }
        }
        for (var i = 0; i < res.data.length; i++) {
          seriesData.forEach((item) => {
            if (item.name in res.data[i]) {
              item.data.push(res.data[i][item.name]);
            }
          });
        }
        this.seriesData = seriesData.slice(0, 5).map((item) => {
          return {
            ...item,
            type: "bar",
          };
        });
        this.xAxisData = seriesData[5].data;
        // this.yAxisData = [
        //   {
        //     type: "value",
        //     show: true,
        //     axisLabel: {
        //       formatter: "{value}",
        //       fontSize: 12,
        //       color: "#000",
        //     },
        //     axisLine: {
        //       show: false,
        //     },
        //     splitLine: {
        //       //多条横线
        //       show: true,
        //     },
        //     interval: 20,
        //   },
        //   {
        //     type: "value",
        //     show: true,
        //     axisLabel: {
        //       formatter: "{value}",
        //       fontSize: 12,
        //       color: "#000",
        //     },
        //     splitLine: {
        //       //多条横线
        //       show: true,
        //     },
        //     axisLine: {
        //       show: false,
        //     },
        //     interval: 20,
        //   },
        // ];
        this.legend = legend.slice(0, 5);
      });
    },
  },
  watch: {
    value(newVal) {
      this.fetchChartData();
    },
  },
};
</script>
    
<style lang="scss" scoped>
.chart-container {
  background: #edf5f8;
  border-radius: 8px;
  margin: 10px;
  padding: 10px;

  .chart-header {
    font-size: 14px;
    color: #2076A1;
    font-weight: 700;
    display:flex;
    justify-content: space-between;

  }
}
</style>