<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. flask中请求勾子

    请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: *在请求开始时,建立数据库连接; *在请求开始时,根据需求进行权限校验; *在请求结束时,指定数据的交互格式; 为了让每 ...

  2. Microbit蓝芽配对

    Microbit蓝芽配对 (Bluetooth Pairing) Microbit 可以像手机或平板与其他蓝芽装置一样,一旦做完第一次配对完就可以使用”蓝芽服务” paired with the mi ...

  3. java入门---变量类型&类变量&局部变量&实例变量&静态变量

        在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下:     type identifier [ = value][, identifier [= value] ...] ; ...

  4. 20155224 《实验二 Java面向对象程序设计》实验报告

    实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 没有Linux ...

  5. day2 Opencv + image

    [参考网站]http://backyardlife.duapp.com/duan/ 1.目标: 读入一幅图像,怎样显示一幅图像,以及如何保存一幅图像 cv2.imread(),cv2.imshow() ...

  6. idea里绝对不要直接复制文件到项目中的另一处

    否则那样会将使用被复制文件的那些地方 文件名会变成复制后的那个 而路径是原来的 所以会导致找不到文件 所以绝对不要直接复制文件或者包或者目录到项目中的另一处 需要时应该新建文件 把代码复制进去 这种事 ...

  7. 二、利用EnterpriseFrameWork快速开发Web系统(B/S)

    EnterpriseFrameWork框架实例源代码下载: 实例下载 本章通过一个开发实例来讲解Web系统的开发经过,以及会碰到的一些问题.实例功能就是业务系统中最常见的增.删.改.查来演示,用一个界 ...

  8. 原生android(二)——认识activity

    一.activity的生命周期 1.onCreate():在活动第一次被创建的时候调用,用来完成活动的初始化操作,如加载布局.绑定事件等 2.onStart():在活动由不可见变为可见时被调用 3.o ...

  9. appium+python自动化☞环境搭建

    前言:appium可以说是做app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本语言也是支持java和Python.略懂Python,所以接下来的教程是 appium+pyt ...

  10. 三、Django之请求与响应-Part 1

    一.新建项目 进入你指定的项目保存目录,然后运行下面的命令: $ django-admin startproject mysite 这将在目录下生成一个mysite目录,也就是你的这个Django项目 ...