<template>
|
<div class="dataStatistics">
|
<My-bread
|
:list="[
|
`${$t('dataManage.dataManage')}`,
|
`${$t('dataManage.dataStatistics')}`,
|
]"
|
></My-bread>
|
<el-divider />
|
<div class="contentBox">
|
<div class="content_Left subpage_Div">
|
<el-tree
|
:data="treeData"
|
@node-click="handleNodeClick"
|
node-key="id"
|
ref="tree"
|
highlight-current
|
:props="defaultProps"
|
>
|
</el-tree>
|
</div>
|
<div class="content_Right subpage_Div">
|
<div class="iquery subpage_Div">
|
<div>
|
<el-button
|
icon="el-icon-c-scale-to-original"
|
size="small"
|
type="warning"
|
@click="setCountFlagChange(1)"
|
>报表</el-button
|
>
|
<el-button
|
icon="el-icon-pie-chart"
|
size="small"
|
type="primary"
|
@click="setCountFlagChange(2)"
|
>柱状图</el-button
|
>
|
<el-button
|
icon="el-icon-download"
|
size="small"
|
type="success"
|
@click="setCountFlagChange(3)"
|
>下载</el-button
|
>
|
</div>
|
</div>
|
<div class="contentTable subpage_Div" v-show="setCountFlag">
|
<el-table
|
:data="tableData"
|
style="width: 100%"
|
height="calc(100% - 1px)"
|
ref="table"
|
>
|
<el-table-column
|
v-if="queryData.value == 'countServices'"
|
prop="m1"
|
key="1"
|
align="center"
|
:label="$t('dataManage.dataStaticObj.type1')"
|
>
|
</el-table-column>
|
<el-table-column
|
v-if="queryData.value == 'countServices'"
|
prop="count"
|
key="2"
|
align="center"
|
:label="$t('dataManage.dataStaticObj.type2')"
|
>
|
</el-table-column>
|
<el-table-column
|
v-if="queryData.value == 'countSizes'"
|
prop="m1"
|
key="3"
|
align="center"
|
:label="$t('dataManage.dataStaticObj.type3')"
|
>
|
</el-table-column>
|
<el-table-column
|
v-if="queryData.value == 'countSizes'"
|
prop="count"
|
key="4"
|
align="center"
|
:label="$t('dataManage.dataStaticObj.type4')"
|
:formatter="formatterColumn"
|
>
|
</el-table-column>
|
|
<el-table-column
|
v-if="queryData.value == 'countOperates'"
|
prop="m1"
|
key="5"
|
align="center"
|
:label="$t('dataManage.dataStaticObj.type5')"
|
>
|
</el-table-column>
|
<el-table-column
|
v-if="queryData.value == 'countOperates'"
|
prop="count"
|
key="6"
|
align="center"
|
:label="$t('dataManage.dataStaticObj.type7')"
|
>
|
</el-table-column>
|
|
<!-- <el-table-column
|
v-if="queryData.value == 'countOperates'"
|
prop="m2"
|
align="center"
|
:label="$t('dataManage.dataStaticObj.type6')"
|
>
|
</el-table-column> -->
|
</el-table>
|
<!-- <div class="pagination_box">
|
<el-pagination
|
@size-change="handleSizeChange"
|
@current-change="handleCurrentChange"
|
:current-page="listData.pageIndex"
|
:page-sizes="[10, 20, 50, 100]"
|
:page-size="listData.pageSize"
|
layout="total, sizes, prev, pager, next, jumper"
|
:total="listData.count"
|
>
|
</el-pagination>
|
</div> -->
|
</div>
|
<div
|
id="contentEchart subpage_Div"
|
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 $ from "jquery";
|
import * as echarts from "echarts";
|
import MyBread from "../../components/MyBread.vue";
|
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: [],
|
},
|
],
|
|
defaultProps: {
|
children: "children",
|
label: "label",
|
},
|
listData: {
|
pageIndex: 1,
|
pageSize: 10,
|
code: "",
|
name: "",
|
count: 0,
|
},
|
tableData: [],
|
modelData: [],
|
queryData: null,
|
setCountFlag: true,
|
option: null,
|
showDownLoadFlag: false,
|
};
|
},
|
mounted() {
|
this.setStartDataCount();
|
},
|
methods: {
|
formatterColumn(row, column, cellValue, index) {
|
return row.count + "MB";
|
},
|
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) {
|
switch (res) {
|
case 1:
|
this.setCountFlag = true;
|
break;
|
case 2:
|
this.setCountFlag = false;
|
this.showCountEchart();
|
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.listData.code = this.queryData.value;
|
this.setQueryCountData();
|
},
|
//树点击事件
|
handleNodeClick(data, node, prop) {
|
this.setCountFlag = true;
|
this.queryData = data;
|
this.listData.code = data.value;
|
this.listData.pageIndex = 1;
|
this.listData.pageSize = 10;
|
this.setQueryCountData();
|
},
|
//查询统计信息
|
async setQueryCountData() {
|
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;
|
}
|
|
if (this.queryData.value == "countSizes") {
|
for (var i in data.result) {
|
data.result[i].count = data.result[i].sizes;
|
}
|
}
|
this.tableData = data.result;
|
this.$nextTick(() => {
|
this.$refs.table.doLayout();
|
});
|
// this.listData.count = data.count;
|
},
|
},
|
};
|
</script>
|
|
<style lang="less" scoped>
|
.dataStatistics {
|
height: 98%;
|
width: 98%;
|
padding: 1%;
|
.contentBox {
|
height: calc(98% - 63px);
|
width: 100%;
|
display: flex;
|
justify-content: space-around;
|
.content_Left {
|
width: 18%;
|
height: calc(95% - 2px);
|
border-radius: 5px;
|
padding: 1%;
|
}
|
.content_Right {
|
width: 77%;
|
height: calc(95% - 2px);
|
border-radius: 5px;
|
padding: 1%;
|
.iquery {
|
padding: 1%;
|
border-radius: 5px;
|
display: flex;
|
justify-content: flex-end;
|
}
|
.contentTable {
|
width: 98%;
|
height: 82%;
|
padding: 1%;
|
border-radius: 5px;
|
margin-top: 1%;
|
.el-table,
|
.el-table /deep/ .el-table__expanded-cell {
|
background-color: transparent !important;
|
}
|
.el-table /deep/ th,
|
.el-table /deep/ tr {
|
background-color: transparent !important;
|
}
|
}
|
}
|
}
|
}
|
</style>
|