Newer
Older
Nanping_sponge_JXKH / src / views / home / chart.vue
@liyingjing liyingjing on 25 Oct 2023 2 KB 海绵绩效考个
<template>
  <card :header="props.title" class="card-nopx card1-nopx">
    <div class="chart-box-nopx">
      <barChart
        :echartData="echartData"
        yAxisName="数量"
        ref="barChartRef"
        :legend="{ show: false }"
        :grid="{
          left: '3%',
          right: '7%',
          top: '15%',
          bottom: '3%',
          containLabel: true
        }"
        :refresh="refresh"
        event="selectchanged"
        @selectchanged-callback="onSelectchanged"
        v-if="echartData.xAxisData.length"
      />
    </div>
  </card>
  <card header="表格数据" class="card-nopx card2-nopx" v-if="isSelect">
    <new-table
      class="table-nopx"
      :data="tableData"
      :columns="columns"
      :loading="loading"
      :max-height="300"
    />
  </card>
</template>

<script setup>
import { watch, computed } from 'vue'
import barChart from '@/components/Echarts/barChart.vue'
const props = defineProps({
  title: {
    type: String,
    default: '项目年径流总量控制率评价统计'
  },
  data: {
    type: Array,
    default: () => []
  }
})
const refresh = ref(0)
const colorMap = new Map([
  [0, '#5470c6'],
  [1, '#91cc75'],
  [2, '#fac858'],
  [3, '#73c0de']
])
const echartData = computed(() => {
  return {
    xAxisData: props.data.map(item => item.name),
    seriesData: [
      {
        type: 'bar',
        name: '项目个数',
        colorBy: 'data',
        selectedMode: 'single',
        barWidth: 30,
        data: props.data.map((item, i) => ({
          ...item,
          itemStyle: {
            color: colorMap.get(i)
          }
        }))
      }
    ]
  }
})
const loading = ref(false)
const tableData = ref([
  {
    name1: 'xxxx',
    name2: 'xxxx',
    name3: 'xxxx',
    name4: 'xxxx',
  }
])
const columns = [
  {
    prop: 'name1',
    label: 'name1',
  },
  {
    prop: 'name2',
    label: 'name2',
  },
  {
    prop: 'name3',
    label: 'name3',
  },
  {
    prop: 'name4',
    label: 'name4',
  }
]
const isSelect = ref(false)
watch(() => props.title, () => {
  refresh.value++
})
const onSelectchanged = (data) => {
  console.log(data)
  isSelect.value = data.params.fromAction === 'select'
}
</script>

<style lang="scss" scoped>
.card-nopx {
  position: absolute;
  right: 10px;
  z-index: 10;
  &.card1-nopx {
    top: 10px
  }
  &.card2-nopx {
    top: 365px
  }
  .chart-box-nopx {
    width: 420px;
    height: 260px
  }
  .table-nopx {
    width: 420px;
  }
}

</style>