From 1cbd090a810b899652f50c1f750fde16cf1835c6 Mon Sep 17 00:00:00 2001 From: yubinCloud Date: Fri, 30 Apr 2021 18:08:48 +0800 Subject: [PATCH] =?UTF-8?q?11-9=20=E5=B1=95=E7=A4=BA=2030=20=E5=A4=A9?= =?UTF-8?q?=E8=B6=8B=E5=8A=BF=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fairywiki/dto/resp/StatisticRespDto.java | 3 + web/src/components/the-welcome.vue | 96 +++++++++++++++---- 2 files changed, 83 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/github/yubincloud/fairywiki/dto/resp/StatisticRespDto.java b/src/main/java/io/github/yubincloud/fairywiki/dto/resp/StatisticRespDto.java index 5facb20..af1643a 100644 --- a/src/main/java/io/github/yubincloud/fairywiki/dto/resp/StatisticRespDto.java +++ b/src/main/java/io/github/yubincloud/fairywiki/dto/resp/StatisticRespDto.java @@ -1,11 +1,14 @@ package io.github.yubincloud.fairywiki.dto.resp; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.util.Date; @Data public class StatisticRespDto { + + @JsonFormat(pattern="MM-dd", timezone = "GMT+8") private Date date; private int viewCount; diff --git a/web/src/components/the-welcome.vue b/web/src/components/the-welcome.vue index 3d102aa..20688cd 100644 --- a/web/src/components/the-welcome.vue +++ b/web/src/components/the-welcome.vue @@ -136,7 +136,10 @@ export default defineComponent({ const statistic = ref(); statistic.value = {}; - const getStatistic = () => { + /** + * 生成昨天和今天的数据统计表格 + */ + const genTwoDayStatisticTable = () => { axios.get('/ebook-snapshot/get-statistic').then((response) => { const respData = response.data; if (respData.code === 0) { @@ -158,28 +161,89 @@ export default defineComponent({ }); }; - const testEcharts = () => { - const chart = echarts.init(document.getElementById('chart') as HTMLCanvasElement); - chart.setOption({ + const init30DayEcharts = (list: any) => { + // 基于准备好的dom,初始化echarts实例 + const statisticChart = echarts.init(document.getElementById('chart') as HTMLCanvasElement); + + const xAxis = []; + const seriesView = []; + const seriesVote = []; + for (let i = 0; i < list.length; i++) { + const record = list[i]; + xAxis.push(record.date); + seriesView.push(record.viewIncrease); + seriesVote.push(record.voteIncrease); + } + + // 指定图表的配置项和数据 + const option = { title: { - text: 'ECharts 入门示例' + text: '30天趋势图' + }, + tooltip: { + trigger: 'axis' + }, + legend: { + data: ['总阅读量', '总点赞量'] + }, + grid: { + left: '1%', + right: '3%', + bottom: '3%', + containLabel: true + }, + toolbox: { + feature: { + saveAsImage: {} + } }, - tooltip: {}, xAxis: { - data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子'] + type: 'category', + boundaryGap: false, + data: xAxis }, - yAxis: {}, - series: [{ - name: '销量', - type: 'bar', - data: [5, 20, 36, 10, 10, 20] - }] + yAxis: { + type: 'value' + }, + series: [ + { + name: '总阅读量', + type: 'line', + // stack: '总量', 不堆叠 + data: seriesView, + smooth: true + }, + { + name: '总点赞量', + type: 'line', + // stack: '总量', 不堆叠 + data: seriesVote, + smooth: true + } + ] + }; + + // 使用刚指定的配置项和数据显示图表。 + statisticChart.setOption(option); + }; + + /** + * 生成近30天的数据统计图 + */ + const gen30DayStatisticChart = () => { + axios.get('/ebook-snapshot/get-30-statistic').then((response) => { + const respData = response.data; + if (respData.code === 0) { + const statisticList = respData.data; + init30DayEcharts(statisticList); + } }); - } + }; + onMounted(() => { - getStatistic(); - testEcharts(); + genTwoDayStatisticTable(); + gen30DayStatisticChart(); }); return { -- GitLab