ludc
2023-12-26 a79582f0c67ddc681d2804669455ae13c64de8f9
Source/UBCS-WEB/src/components/StatisticsComponent/ColumnarChart.vue
@@ -1,6 +1,9 @@
<template>
  <basic-container>
    <v-chart id="chart" :auto-resize="true" :options="chartOptions"></v-chart>
    <div style="display: inline-block;float: right;margin-bottom: 10px;margin-right: 60px">
      <el-button size="small" type="danger" plain @click="delHandler">删除</el-button>
    </div>
  </basic-container>
</template>
@@ -9,90 +12,66 @@
import 'echarts/lib/component/tooltip'
import 'echarts/lib/component/title'
import 'echarts/lib/component/legend'
import { deleteChartId } from "@/api/statistic/chart"
export default {
  name: "ColumnarChart",
  props:{
    columnarData:{
      type:Array,
      default:[]
  props: {
    columnarData: {
      type: Array,
      default: []
    },
    chartName:{
      type:String,
    chartName: {
      type: String,
      default: ""
    },
    btmname: {
      type: String
    }
  },
  watch:{
    columnarData:{
      immediate:true,
      handler(newval,oldval){
        if(newval && newval.length > 0){
          const minValues = newval[0].map(function (_, i) {
            return Math.min.apply(
              null,
              newval.map(function (item) {
                return item[i];
              })
            );
          });
          let colors = ['#84C9E5', '#F68686'];
          const seriesData = [];
          for (let i = 0; i < newval.length; i++) {
            let curSeriesData = [];
            for (let j = 0; j < newval[i].length; j++) {
              let borderRadius = [0, 0, 0, 0];
              if (newval[i][j] === minValues[j]) {
                borderRadius = [50, 50, 0, 0];
              }
              curSeriesData.push({
                value: newval[i][j],
                itemStyle: {
                  normal: {
                    // barBorderRadius: borderRadius,  // 设置圆角
                    color: colors[i],
                  }
                },
              });
            }
            let seriesName = (i === 0 ? "总量" : "新增")
            seriesData.push({
              name: seriesName,
              type: "bar",
              stack: "总量",
              barWidth: 60,
              data: curSeriesData,
  watch: {
    columnarData: {
      immediate: true,
      handler(newval, oldval) {
        if (newval && newval.length > 0) {
          let seriesData = newval.map((data, index) => {
            let name = index === 0 ? "总量" : "新增";
            return {
              name: name,
              type: 'bar',
              data: data,
              barWidth: '40%',
              label: {
                show: true,
                position: 'top',
                formatter: function (params) {
                  return params.value === 0 ? '' : params.value; // 值为 0 不显示,其他情况显示
                }
                // formatter: function (params) {
                //   if (params.value !== 0) {
                //     return params.value;
                //   } else {
                //     return '';
                //   }
                // }
              },
              emphasis: {
                focus: "series",
              },
            });
            this.chartOptions.series=seriesData
          }
            };
          });
          this.chartOptions.series = seriesData;
        }
      }
    },
    chartName:{
      handler(newval,oldval){
        if(newval){
    chartName: {
      handler(newval, oldval) {
        if (newval) {
          this.chartOptions.title.text = newval + "数据统计"
        }
      },
      immediate:true,
      deep:true
      immediate: true,
      deep: true
    }
  },
  data() {
    return {
      chartOptions: {
        color:['#84C9E5', '#F68686'],
        color: ['#84C9E5', '#F68686'],
        title: {
          text: "",
        },
@@ -141,6 +120,16 @@
  },
  created() {
  },
  methods: {
    delHandler() {
      deleteChartId({ btmname: this.btmname, chartId: '2' }).then(res => {
        this.$message.success(this.chartName+'柱状图,删除成功!')
        this.$emit('refresh');
      }).catch(error => {
        this.$message.error(error)
      })
    }
  }
};
</script>