管道基础大数据平台系统开发-【前端】-新系統界面
src/views/datamanage/dataStatistics.vue
@@ -1,11 +1,13 @@
<template>
  <div class="dataStatistics">
    <My-bread :list="[
    <My-bread
      :list="[
        `${$t('dataManage.dataManage')}`,
        `${$t('dataManage.projectManage')}`,
      ]"></My-bread>
        `${$t('dataManage.dataStatistics')}`,
      ]"
    ></My-bread>
    <el-divider />
    <div class="contentBox ">
    <div class="contentBox">
      <div class="content_Left subpage_Div">
        <el-tree
          :data="treeData"
@@ -27,12 +29,13 @@
            icon="el-icon-pie-chart"
            @click="setCountFlagChange(2)"
          ></el-button>
          <el-button
            icon="el-icon-download"
            @click="setCountFlagChange(3)"
          ></el-button>
          <el-divider />
        </div>
        <div
          class="contentTable"
           v-show="setCountFlag"
        >
        <div class="contentTable" v-show="setCountFlag">
          <el-table
            :data="tableData"
            style="width: 100%"
@@ -40,17 +43,20 @@
          >
            <el-table-column
              prop="m1"
              label="一级模块"
              align="center"
              :label="$t('dataManage.dataStaticObj.type1')"
            >
            </el-table-column>
            <el-table-column
              prop="m2"
              label="二级模块"
              align="center"
              :label="$t('dataManage.dataStaticObj.type2')"
            >
            </el-table-column>
            <el-table-column
              prop="count"
              label="统计数量"
              align="center"
              :label="$t('dataManage.dataStaticObj.type3')"
            >
            </el-table-column>
          </el-table>
@@ -67,157 +73,156 @@
            </el-pagination>
          </div> -->
        </div>
        <div
          class="contentTable"
          v-show="!setCountFlag"
        >
      <div id="countEchart" style = "width:100%;height:100%; ">
      </div>
        <div id="contentEchart" class="contentTable" v-show="!setCountFlag">
          <div id="chart_11"></div>
        </div>
      </div>
    </div>
    <el-dialog
      title="模板"
      :visible.sync="showDownLoadFlag"
      width="50%"
      :before-close="handleClose"
    >
      <div style="height: 50vh">
        <el-table
          ref="singleTable"
          :data="modelData"
          height="calc(100% - 10px)"
          style="width: 100%"
        >
          <el-table-column
            type="index"
            :label="$t('common.index')"
            align="center"
            width="70"
          >
          </el-table-column>
          <el-table-column
            align="center"
            property="fname"
            :label="$t('common.fileNme')"
          >
          </el-table-column>
          <el-table-column
            property="type"
            :label="$t('common.format')"
            align="center"
            :formatter="showFormat"
          >
          </el-table-column>
          <el-table-column width="120" :label="$t('common.operate')">
            <template slot-scope="scope">
              <el-button @click="setDownLoadRow(scope.row)" size="small">
                {{ $t("common.download") }}
              </el-button>
            </template>
          </el-table-column>
        </el-table>
      </div>
    </el-dialog>
    <iframe
      id="Iframe1"
      src=""
      style="display: none; border: 0; padding: 0; height: 0; width: 0"
    ></iframe>
  </div>
</template>
<script>
import * as echarts from 'echarts';
import $ from "jquery";
import * as echarts from "echarts";
import MyBread from "../../components/MyBread.vue";
import { dataCount_selectByPageAndCount, dataCount_selectCountOperates } from '../../api/api.js'
import { getToken } from "@/utils/auth";
import {
  dataCount_selectByPageAndCount,
  dataCount_selectCountOperates,
  dataCount_selectCountServices,
  dataCount_selectCountSizes,
  dataCount_downloadReport,
} from "../../api/api.js";
export default {
  name: "DataStatistics",
  components: { MyBread },
  data() {
    return {
      treeData: [{
        id: 1,
        label: '服务调用量统计',
        value: 'countServices',
        children: []
      }, {
        id: 2,
        label: '数据量统计',
        value: 'countSizes',
        children: []
      }, {
        id: 3,
        label: '用户流量统计',
        value: 'countOperates',
        children: []
      }],
      treeData: [
        {
          id: 1,
          label: "服务调用量统计",
          value: "countServices",
          children: [],
        },
        {
          id: 2,
          label: "数据量统计",
          value: "countSizes",
          children: [],
        },
        {
          id: 3,
          label: "用户流量统计",
          value: "countOperates",
          children: [],
        },
      ],
      defaultProps: {
        children: 'children',
        label: 'label'
        children: "children",
        label: "label",
      },
      listData: {
        pageIndex: 1,
        pageSize: 10,
        code: '',
        name: '',
        code: "",
        name: "",
        count: 0,
      },
      tableData: [],
      modelData: [],
      queryData: null,
      setCountFlag: true,
    }
      option: null,
      showDownLoadFlag: false,
    };
  },
  mounted() {
    this.setStartDataCount();
  },
  methods: {
    //Echart图表显示
    showCountEchart(){
      var chartDom = document.getElementById('countEchart');
var myChart = echarts.init(chartDom);
var option;
      var dataAxis=[];
      var data=[];
      var yMax =0;
      let dataShadow = [];
      for(var i  in this.tableData){
        if( this.tableData[i].count >yMax){
          yMax=  this.tableData[i].count
        }
        data.push(this.tableData[i].count)
      }
      yMax = yMax+100;
for (let i = 0; i < data.length; i++) {
  dataShadow.push(yMax);
}
option = {
  xAxis: {
    data: dataAxis,
    axisLabel: {
      color: '#000000'
    },
    axisLine: {
      show: true
    },
    z: 10
  },
  yAxis: {
    axisLine: {
      show: false
    },
    axisTick: {
      show: false
    },
    axisLabel: {
      color: '#999'
    }
  },
  dataZoom: [
    {
      type: 'inside'
    }
  ],
  series: [
    {
      type: 'bar',
      showBackground: true,
      itemStyle: {
        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
          { offset: 0, color: '#83bff6' },
          { offset: 0.5, color: '#188df0' },
          { offset: 1, color: '#188df0' }
        ])
      },
      emphasis: {
        itemStyle: {
          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
            { offset: 0, color: '#2378f7' },
            { offset: 0.7, color: '#2378f7' },
            { offset: 1, color: '#83bff6' }
          ])
        }
      },
      data: data
    }
  ]
};
// Enable data zoom when user click bar.
const zoomSize = 6;
myChart.on('click', function (params) {
  myChart.dispatchAction({
    type: 'dataZoom',
    startValue: dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)],
    endValue:
      dataAxis[Math.min(params.dataIndex + zoomSize / 2, data.length - 1)]
  });
});
    setDownLoadRow(rows) {
      var url =
        BASE_URL +
        "/dataCount/downloadReport?token=" +
        getToken() +
        "&id=" +
        rows.id;
      $("#Iframe1").attr("src", url).click();
    },
    showFormat(row, column, cellValue, index) {
      if (cellValue) {
        switch (cellValue) {
          case "1":
            return "World";
            break;
          case "2":
            return "Excel";
            break;
        }
      }
      return " ";
    },
    handleClose() {
      this.$confirm("确认关闭?")
        .then((_) => {
          this.closeDownLoadFlag();
          done();
        })
        .catch((_) => {});
    },
    closeDownLoadFlag() {
      this.showDownLoadFlag = false;
    },
    //统计切换
    setCountFlagChange(res) {
@@ -228,14 +233,167 @@
        case 2:
          this.setCountFlag = false;
          this.showCountEchart();
            break;
          break;
        case 3:
          this.showDownLoadFlag = true;
          this.getQueryDownloadData();
          break;
      }
    },
    async getQueryDownloadData() {
      this.listData = {
        pageIndex: 1,
        pageSize: 10,
        code: this.queryData.value,
        name: "",
        count: 0,
      };
      const data = await dataCount_selectByPageAndCount(this.listData);
      if (data.code != 200) {
        return;
      }
      this.modelData = data.result;
      this.listData.count = data.count;
    },
    //Echart图表显示
    showCountEchart() {
      var dom = document.getElementById("chart_11");
      if (this.option != null) {
        dom.removeAttribute("_echarts_instance_"); // 移除容器上的 _echarts_instance
      }
      var resizeMainContainer = function () {
        dom.style.width = window.innerWidth * 0.65 + "px";
        dom.style.height = window.innerHeight * 0.6 + "px";
      };
      //设置div容器高宽
      resizeMainContainer();
      var myChart = echarts.init(dom, null, {
        renderer: "canvas",
        useDirtyRect: false,
      });
      var app = {};
      let dataAxis = [];
      let data = [];
      let yMax = 0;
      for (var i in this.tableData) {
        if (this.tableData[i].count > yMax) {
          yMax = this.tableData[i].count;
        }
        data.push(this.tableData[i].count);
        var m1 = this.tableData[i].m1;
        if (this.tableData[i].m2 != null) {
          m1 += "_" + this.tableData[i].m2;
        }
        dataAxis.push(m1);
      }
      yMax = yMax + 10;
      let dataShadow = [];
      for (let i = 0; i < data.length; i++) {
        dataShadow.push(yMax);
      }
      this.option = {
        grid: {
          left: "5%",
          right: "5%",
          bottom: "5%",
          top: "10px",
        },
        tooltip: {
          //提示框组件
          trigger: "axis", //坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用
          axisPointer: { animation: false },
          axisPointer: {
            // 坐标轴指示器,坐标轴触发有效
            type: "line", // 默认为直线,可选为:'line' | 'shadow'
          },
          formatter: " {b} : <br/>统计量 :  {c}",
        },
        xAxis: {
          data: dataAxis,
          axisLabel: {
            inside: false,
            color: "#999",
          },
          axisTick: {
            show: false,
          },
          axisLine: {
            show: false,
          },
          z: 10,
        },
        yAxis: {
          axisLine: {
            show: false,
          },
          axisTick: {
            show: false,
          },
          axisLabel: {
            color: "#999",
          },
        },
        dataZoom: [
          {
            type: "inside",
          },
        ],
        series: [
          {
            type: "bar",
            showBackground: true,
            itemStyle: {
              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                { offset: 0, color: "#83bff6" },
                { offset: 0.5, color: "#188df0" },
                { offset: 1, color: "#188df0" },
              ]),
            },
            emphasis: {
              itemStyle: {
                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                  { offset: 0, color: "#2378f7" },
                  { offset: 0.7, color: "#2378f7" },
                  { offset: 1, color: "#83bff6" },
                ]),
              },
            },
            data: data,
          },
        ],
      };
      // Enable data zoom when user click bar.
      const zoomSize = 6;
      myChart.on("click", function (params) {
        console.log(dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)]);
        myChart.dispatchAction({
          type: "dataZoom",
          startValue: dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)],
          endValue:
            dataAxis[
              Math.min(params.dataIndex + zoomSize / 2, data.length - 1)
            ],
        });
      });
      if (this.option && typeof this.option === "object") {
        myChart.setOption(this.option);
      }
      window.addEventListener("resize", myChart.resize);
    },
    //系统初始化
    setStartDataCount() {
      this.queryData = this.treeData[0];
      this.$nextTick(() => {
        this.$refs.tree.setCurrentKey(this.queryData.id) // 默认选中节点第一个
        this.$refs.tree.setCurrentKey(this.queryData.id); // 默认选中节点第一个
      });
      this.listData.code = this.queryData.value;
      this.setQueryCountData();
@@ -251,17 +409,28 @@
    },
    //查询统计信息
    async setQueryCountData() {
      const data = await dataCount_selectCountOperates();
      var data;
      if (this.queryData.value == "countServices") {
        data = await dataCount_selectCountServices();
      } else if (this.queryData.value == "countSizes") {
        data = await dataCount_selectCountSizes();
      } else if (this.queryData.value == "countOperates") {
        data = await dataCount_selectCountOperates();
      }
      if (data.code != 200) {
        return
        return;
      }
      if (this.queryData.value == "countSizes") {
        for (var i in data.result) {
          data.result[i].count = data.result[i].sizes;
        }
      }
      this.tableData = data.result;
      this.listData.count = data.count
      // this.listData.count = data.count;
    },
  }
}
  },
};
</script>
<style lang="less" scoped>
@@ -287,9 +456,9 @@
      padding: 1%;
      .contentTable {
        width: 100%;
        height: 88%;
        height: 84%;
      }
    }
  }
}
</style>
</style>