<template>
<u-grid>
<u-grid-item caption="服务使用统计排行">
<div class="u-grid-tools" slot="tools">
<el-button @click="exportExcel">导 出</el-button>
</div>
<div class="app-main">
<u-search-form
:formOption="formOption"
v-model="formValue"
@form-submit="search"
:tableLoading="tableLoading">
</u-search-form>
<u-grid class="u-grid-app">
<u-grid-item
caption="次数统计排行"
:span="24">
<div style="height: 420px">
<eCharts
ref="echartsColumnData"
class="app-charts-chart"
@click="triggerEvent"
:options="chartColumnOptions"></eCharts>
</div>
</u-grid-item>
</u-grid>
</div>
</u-grid-item>
</u-grid>
</template> <script>
import uGrid from '@/components/ui/u-grid';
import uGridItem from '@/components/ui/u-grid-item';
import uSearchForm from '@/components/ui/u-search-form';
import {mapActions} from "vuex";
import eCharts from 'vue-echarts'; export default {
name: 'service-ranking',
data() {
return { list: [], tableLoading: false, Dic: {},
formOption: {
dic: ['RANKING'],
column: [
{
// request_count/error_count/circuit_count/rate_limit_count
label: '排行选择',
prop: 'ranking_select',
type: "select",
dicData: "RANKING"
},
{
label: '时间选择',
prop: 'time_select',
type: 'select',
overHidden: true,
dicData: [
{
label: "3日排行",
value: "3"
},
{
label: "7日排行",
value: "7"
},
{
label: "月排行",
value: "30"
},
{
label: "历史排行",
value: "90"
}
]
},
{
label: '数量选择',
prop: 'top_row',
type: 'select',
overHidden: true,
dicData: [
{
label: "TOP 5",
value: "5"
},
{
label: "TOP 10",
value: "10"
},
{
label: "TOP 15",
value: "15"
},
{
label: "TOP 20",
value: "20"
}
]
},
{
label: '顺序选择',
prop: 'sortord',
type: 'select',
overHidden: true,
dicData: [
{
label: "倒序",
value: "asc"
},
{
label: "顺序",
value: "desc"
}
]
}
]
}, formValue: {
id: this.$route.params.id,
ranking_select: '',
time_select: '', begin_time: '',
end_time: '', top_row: '',
sortord: '',
},
chartColumnOptions: {},
echartsColumnData: [], serviceId: [],
serName: [],
serCount: [],
};
},
components: {
uGrid,
uGridItem,
uSearchForm,
eCharts
}, created() {
this.changeBars();
this.GetDic(['RANKING']).then(data => {
this.Dic = data;
});
this.getTimeSelect();
},
computed: {
// ...mapGetters(['GetDic']),
},
is_submit: false,
methods: {
...mapActions(["GetDic"]), triggerEvent(a) {
let name = a.value;
this.list.forEach(item => {
if (name == item.name) {
this.serviceId = item.ser_id;
} else {
}
})
this.$router.push('/service-ranking/detail/' + this.serviceId);
}, exportExcel() {
this.getTimeSelect();
this.exportData();
}, exportData() {
if (this.formValue.ranking_select == '' || this.formValue.time_select == '' ||
this.formValue.top_row == '' || this.formValue.sortord == '') {
this.$message({
showClose: true,
message: "所有条件必选!",
type: "error"
});
return;
} else {
axios.get('/service-ranking-excel/export-ranking-search?rankingSelect=' + this.formValue.ranking_select + '&topRow=' + this.formValue.top_row + '&Sortord=' + this.formValue.sortord + '&beginTime=' + this.formValue.begin_time + '&endTime=' + this.formValue.end_time, {
responseType: 'blob',
}).then((response) => {
let url = window.URL.createObjectURL(response.data)
let link = document.createElement('a')
link.style.display = 'none';
link.href = url;
//配置下载的文件名
link.setAttribute('download', '服务使用排行统计列表.xls');
document.body.appendChild(link);
link.click()
})
}
}, search() {
this.getTimeSelect()
this.getChange();
}, changeDateType(date) {
let seperator = "-";
let year = date.getFullYear();
let month = date.getMonth() + 1;
let strDate = date.getDate();
let hours = date.getHours();
let minutes = date.getMinutes();
let seconds = date.getSeconds();
if (month >= 1 && month <= 9) {
month = "0" + month;
}
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
if (hours >= 0 && hours <= 9) {
hours = "0" + hours;
}
if (minutes >= 0 && minutes <= 9) {
minutes = "0" + minutes;
}
if (seconds >= 0 && seconds <= 9) {
seconds = "0" + seconds;
}
return (year + seperator + month + seperator + strDate
+ " " + hours + ":" + minutes
+ ":" + seconds);
}, getTimeSelect() {
this.formValue.end_time = this.changeDateType(new Date(Date.now()));
if (this.formValue.time_select == 3) {
this.formValue.begin_time = this.GetPrevDay(3);
}
if (this.formValue.time_select == 7) {
this.formValue.begin_time = this.GetPrevDay(7);
}
if (this.formValue.time_select == 30) {
this.formValue.begin_time = this.GetPrevDay(30);
}
if (this.formValue.time_select == 90) {
this.formValue.begin_time = this.GetPrevDay(90);
}
}, GetPrevDay(str) {
let yesterday = new Date(new Date() - 24 * 60 * 60 * 1000 * str);
return this.changeDateType(yesterday);
}, getChange() {
//查询排行-及时间选择
if (this.formValue.ranking_select == '' || this.formValue.time_select == '' ||
this.formValue.top_row == '' || this.formValue.sortord == '') {
this.$message({
showClose: true,
message: "所有条件必选!",
type: "error"
});
return;
} else {
axios.post('/service-invoke-ranking/get-sum-request-ranking-count', {
ranking_select: this.formValue.ranking_select,
top_row: this.formValue.top_row,
sortord: this.formValue.sortord,
end_time: this.formValue.end_time,
begin_time: this.formValue.begin_time,
}).then(res => {
if (res != null && this.GLOBAL.respSuc == res.data.result_code) {
let data = res.data.data;
this.list = data;
this.serName = [];
this.serCount = [];
this.serviceId = [];
data.forEach(item => {
this.serName.push(item.name);
});
data.forEach(item => {
this.serCount.push(item.count);
});
data.forEach(item => {
this.serviceId.push(item.serId);
});
if (this.list != '') {
this.changeBars();
} else {
// alert("查询结果为空");
this.$message({
showClose: true,
message: "查询结果为空!",
type: "error"
});
this.changeBars();
}
} else {
//查询失败
}
});
}
}, getColor(x = 0, y = 0, x2 = 0, y2 = 1) {
return {
color: {
type: 'linear',
x,
y,
x2,
y2,
colorStops: [{
offset: 0, color: '#CFDEED'
}, {
offset: 1, color: '#E7EBEF'
}],
}
};
}, changeBars: function () {
return this.chartColumnOptions = {
legend: {
right: 0,
data: ['统计次数']
},
title: {
subtext: '服务名称',
},
textStyle: {
color: '#888F95',
fontFamily: 'Microsoft YaHei',
fontSize: 14
},
grid: {
top: 35,
right: 0,
bottom: 5,
left: 0,
containLabel: true
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
xAxis: {
type: 'value',
boundaryGap: [0, 0.01],
offset: 5,//第一个服务跟x轴的距离
nameLocation: 'end',
axisLabel: {
interval: 0,
rotate: 30
},
splitLine: {
show: true,
lineStyle: this.getColor(0, 0, 1)
},
axisLine: {
show: true,
symbol: ['none', 'arrow'],
lineStyle: {
color: '#CFDEED'
}
},
axisTick: {
show: true,
alignWithLabel: true,
lineStyle: {
color: '#75BBFF'
}
},
},
yAxis: {
splitLine: {
show: false
},
//触发事件,为y轴标签/文字添加点击事件
triggerEvent: true,
componentType: String,
axisLabel: {
interval: 0,
color: "#000",
formatter: function (value) {
if (value.length > 6) {
return value.substring(0, 6) + "...";
} else {
return value;
}
},
}, axisLine: {
show: true,
lineStyle: {
color: '#CFDEED'
}
},
axisTick: {
show: true,
alignWithLabel: true,
lineStyle: {
color: '#75BBFF'
}
},
type: 'category',
data: this.serName
},
series: [
{
name: '统计次数',
type: 'bar',
data: this.serCount,
itemStyle: {
color: '#51A5DE'
},
barWidth: 20,
barGap: '0',
},
]
}
},
},
}
</script> <style scoped> </style>

springboot+vue+element:echarts开发遇见问题---vue前端(二)的更多相关文章

  1. vue+element+echarts柱状图+列表

    前端由vue+element搭建框架,引入vue和element的index.js和css就可以写页面: 页面和js可以echarts官网实例看下都是有的,主要看下如何动态赋值: 柱状图和列表: &l ...

  2. springboot+vue+element:echarts开发遇见问题---后端sql(三)

    <select id="getSumRequestRankingCount" parameterType="java.lang.String" resul ...

  3. vue+element+echarts饼状图+可折叠列表

    html: <div id="echartsDiv" style="width: 48%; height: 430px; float: left;"> ...

  4. 基于Springboot+Mybatis+Element UI开发的钢贸供应链系统

    小蓝钢贸云供应链系统以销售.采购.库存及财务一体化的设计理念,从供应商到客户的销售流程,实现订单.货物.资金的全面管控,并能对成本进行准确的跟踪与分析,为销售决策提供依据. 基于SpringBoot2 ...

  5. iOS开发遇见的坑之二:工程文件中插件和自身工程命名冲突

    在升级cocoapod后,我重新管理了一下工程,其实也就是把各个类分类进行管理 类似于这样 然后编译就发现不能运行 1.其中一个错误是工程文件缺失,根据提示添加进来进行 2.有一个是pch的相对路径变 ...

  6. 循序渐进VUE+Element 前端应用开发(23)--- 基于ABP实现前后端的附件上传,图片或者附件展示管理

    在我们一般系统中,往往都会涉及到附件的处理,有时候附件是图片文件,有时候是Excel.Word等文件,一般也就是可以分为图片附件和其他附件了,图片附件可以进行裁剪管理.多个图片上传管理,及图片预览操作 ...

  7. 循序渐进VUE+Element 前端应用开发(28)--- 附件内容的管理

    在我们很多模块里面,都需要使用到一些诸如图片.Excel文件.PDF文件等附件的管理,一般我们倾向于把它独立为一个公用的附件管理模块,这样可以有效的统一管理附件的信息.本篇随笔介绍附件内容的管理,包括 ...

  8. 在基于ABP框架的前端项目Vue&Element项目中采用电子签章处理文件和打印处理

    在一些内部OA或者流转的文件,或者给一些客户的报价文件.合同,或者一些医院出示的给保险机构的病历资料等,有时候可能都希望快速的使用电子签章的处理方式来给文件盖上特定的印章,本篇随笔介绍基于Vue&am ...

  9. 循序渐进VUE+Element 前端应用开发(10)--- 基于vue-echarts处理各种图表展示

    在我们做应用系统的时候,往往都会涉及图表的展示,综合的图表展示能够给客户带来视觉的享受和数据直观体验,同时也是增强客户认同感的举措之一.基于图表的处理,我们一般往往都是利用对应第三方的图表组件,然后在 ...

随机推荐

  1. Python中级 —— 01面向对象进阶

    面向对象进阶 总结.补充(http://blog.csdn.net/fgf00/article/details/52479307) 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 ...

  2. 【Zookeeper】编程实战之Zookeeper分布式锁实现秒杀

    1. Zookeeper简述 我们要了解一样技术,首先应该要到它的官网,因为官网的信息一般都是最准确的,如下图是Zookeeper官网对它的介绍. 从官网的介绍中,可以总结出,Zookeeper是一个 ...

  3. java虚拟机内存管理

    1. java虚拟机内存如下 2. 运行时数据区 内存图分析:

  4. cygwin下安装NCL

      1.安装cygwin 到cygwin官网https://www.cygwin.com/下载安装程序,setup-x86.exe,注意能下载这个安装程序, setup-x86_64.exe64位不支 ...

  5. ubuntu下pycharm快捷方式创建

    终端输入:sudo gedit /usr/share/applications/Pycharm.desktop 粘贴模板: [Desktop Entry] Type=Application Name= ...

  6. 20155210潘滢昊 2016-2017-2 《Java程序设计》第2周学习总结

    20155210潘滢昊 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 %%:表示字符串中的%. %d:以十进制整数格式输出 %f:以十进制浮点式格式输出 % ...

  7. # 2017-2018-1 20155336《信息安全技术》实验二——Windows口令破解

    2017-2018-1 20155336<信息安全技术>实验二——Windows口令破解 实验原理 口令破解方法 口令破解主要有两种方法:字典破解和暴力破解. 字典破解是指通过破解者对管理 ...

  8. 20145226夏艺华 《Java程序设计》实验报告一

    实验一 Java开发环境的熟悉(Linux + IDEA) 实验内容 使用JDK编译.运行简单的Java程序: 使用Eclipse 编辑.编译.运行.调试Java程序. 实验步骤 (一)命令行下Jav ...

  9. 【HNOI2014】世界树

    题面 题解 虚树好题(只是细节太多) 构出虚树后,一定要仔细梳理关键点之间的点是上面属于父亲,下面属于儿子. 然后二分出所有的点的所属就可以了 代码 #include<cstdio> #i ...

  10. kyligence enterprise3.2.x版本使用mysql作为数据源构建报错

    1.报错信息如下: exe cmd:null/bin/sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true -Dfs.de ...