Newer
Older
Nanping_sponge_GCYPG / src / views / preassess / components / facility_ratio.vue
@liyingjing liyingjing on 25 Oct 2023 3 KB 工程预评估
<template>
  <div class="facility_ratio">
    <barChart
      :echartData="echartData"
      yAxisName="百分比/%"
      :tooltipFormatter="tooltipFormatter"
      ref="barChartRef"
      v-if="echartData.xAxisData.length"
    />
  </div>
</template>

<script setup>
import { reactive } from 'vue'
import barChart from '@/components/Echarts/barChart.vue'
const props = defineProps({
  data: {
    type: Object,
    default: () => ({})
  }
})
const { data } = props
const targetyAxis = data.targetyAxis.map(item => item * 1 > 0 ? item * 1 : 0)
const realityyAxis = data.realityyAxis.map(item => item * 1 > 0 ? item * 1 : 0)
const echartData = reactive({
  xAxisData: data.xaxis,
  yAxisOption: {
    min: 0,
    max: Math.ceil(Math.max(...targetyAxis, ...realityyAxis) / 100) * 100 || 10
  },
  seriesData: [
    {
      type: 'bar',
      name: '目标',
      barWidth: 16,
      barMinHeight: 2,
      itemStyle: {
        color: '#5470c6'
      },
      label: {
        show: true,
        color: 'black',
        position: 'top',
        distance: 0,
        fontWeight: 'bold'
      },
      data: targetyAxis
    },
    {
      type: 'bar',
      name: '设计',
      barWidth: 16,
      barMinHeight: 2,
      barGap: '60%',
      itemStyle: {
        color: '#91cc75'
      },
      label: {
        show: true,
        color: 'black',
        position: 'top',
        distance: 0,
        fontWeight: 'bold'
      },
      data: realityyAxis
    }
  ]
})

const tooltipFormatter = (params) => {
  const dataIndex = params[0].dataIndex
  return `
        <div style="margin: 0px 0 0;line-height:1;min-width: 120px">
          <div>${params[0].axisValue}</div>
          <div style="margin-top:10px">
            <div style="display: flex;align-items: center;justify-content: space-between">
              <div style="display: flex;align-items: center;">
                <span style="background-color: ${params[0].color};width:10px;height:10px;margin-right:5px;border-radius: 50%"></span>
                <span>${params[0].seriesName}</span>
              </div>
              <div style="color:#666;font-weight:900;font-size:14px">${params[0].value}</div>
            </div>
          </div>
          <div style="margin-top:10px">
            <div style="display: flex;align-items: center;justify-content: space-between">
              <div style="display: flex;align-items: center;">
                <span style="background-color: ${params[1].color};width:10px;height:10px;margin-right:5px;border-radius: 50%"></span>
                <span>${params[1].seriesName}</span>
              </div>
              <div style="color:#666;font-weight:900;font-size:14px">${params[1].value}</div>
            </div>
          </div>
          <div style="margin-top:10px">
            <div style="display: flex;align-items: center;justify-content: space-between">
              <div style="display: flex;align-items: center;">
                <span style="background-color: #fac858;width:10px;height:10px;margin-right:5px;border-radius: 50%"></span>
                <span>是否达标</span>
              </div>
              <div style="color:#666;font-weight:900;font-size:14px">${data.resultyAxis[dataIndex]}</div>
            </div>
          </div>
        </div>`
}
</script>

<style lang="scss" scoped>
.facility_ratio {
  height: 300px;
}
</style>