<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>