<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. html input file accept

    *.3gpp audio/3gpp, video/3gpp 3GPP Audio/Video*.ac3 audio/ac3 AC3 Audio*.asf allpication/vnd.ms-asf ...

  2. 记遇到的一个php坑

    最近对项目的一个高访问量业务接口进行功能扩展,上线一段时间后,服务器cpu load突然飙升,并出现大量502.一开始找运维查看日志,并没有看是什么问题,后来发现别的部门项目之前也遇到类似的问题,原来 ...

  3. Alluxio原理和应用场景随笔

    上周末有幸参加了Alluxio(之前也叫Tachyon),七牛云和示说网举办的Alluxio上海Meetup,之前我并没有在真实应用场景中使用过Alluxio,对其适用的应用场景一直报怀疑态度.自信聆 ...

  4. Home Assistant系列 -- 基于树莓派安装并设置自启动

    Home Assistant 是当前智能家居最火热的开源DIY 软件,之前的文章  智能家居系统 Home Assistant 系列 --介绍篇  已经详细介绍过了,这里就不详细介绍了,今天介绍 如何 ...

  5. 20155215 2016-2017-2 《Java程序设计》第3周学习总结

    20155215 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 第四章主要讲了类的构建,数组对象,字符串对象的构建与操作等.要学会区分基本类型与类类 ...

  6. 课上实践练习——MyOd

    编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 Linux下od -tx -tc XXX的功能 1.功能 od命令用于将指定文件内容以八进制.十 ...

  7. 20145226夏艺华 网络对抗技术 EXP7 网络欺诈技术防范

    20145226夏艺华 网络对抗技术 EXP7 网络欺诈技术防范 实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. · 简单应用SET工具建立冒名网站 · ett ...

  8. [BZOJ3218]a + b Problem-[主席树+网络流-最小割]

    Description 传送门 Solution 此处我们按最小割的思路考虑. 暴力:S->i表示该点选黑色的权值b[i]:i->T表示该点选白色的权值w[i].考虑如果某个点i受点j为白 ...

  9. day3 直方图

    1.绘制直方图 # coding=utf-8 import cv2 import numpy as np from matplotlib import pyplot as plt img1 = cv2 ...

  10. 【LG5021】[NOIP2018]赛道修建

    [LG5021][NOIP2018]赛道修建 题面 洛谷 题解 NOIP之前做过增强版还没做出来\(QAQ\) 一看到题目中的最大值最小,就很容易想到二分答案 重点是考虑如何\(check\) 设\( ...