2022-03-14 14:51:20 +08:00
|
|
|
|
<template>
|
|
|
|
|
<el-row class="article__wrapper">
|
|
|
|
|
<el-col>
|
|
|
|
|
<el-card>
|
|
|
|
|
<div class="card-body d-flex flex-column article">
|
|
|
|
|
<h1>📊 开放数据 Open Data</h1>
|
|
|
|
|
<el-col>
|
|
|
|
|
<p>
|
|
|
|
|
RYMCU 致力于建造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。现在,他也是一个开放创业项目了,就是说关于 RYMCU 的数据都是开放透明的,包括流量等等信息。
|
|
|
|
|
</p>
|
|
|
|
|
<p>
|
|
|
|
|
如果你对 RYMCU 有任何兴趣或想法,都可以扫右侧二维码加我微信交流(请备注:RYMCU)
|
|
|
|
|
</p>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col>
|
|
|
|
|
<el-row :gutter="8" class="text-center">
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<el-card style="max-height: 210px;">
|
|
|
|
|
<el-col class="mt-2rem dashboard-number">{{ dashboard.countUserNum }}</el-col>
|
|
|
|
|
<el-col class="mt-2rem">总用户数</el-col>
|
|
|
|
|
</el-card>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<el-card style="max-height: 210px;">
|
|
|
|
|
<el-col class="mt-2rem dashboard-number">{{ dashboard.countArticleNum }}</el-col>
|
|
|
|
|
<el-col class="mt-2rem">总文章数</el-col>
|
|
|
|
|
</el-card>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<el-card style="max-height: 210px;">
|
|
|
|
|
<el-image :src="gzh"></el-image>
|
|
|
|
|
</el-card>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col class="mt-2rem">
|
|
|
|
|
<div id="lastThirtyDays" style="width: 100%;height: 500px;"></div>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col class="mt-2rem">
|
|
|
|
|
<div id="lastThirtyDays2" style="width: 100%;height: 500px;"></div>
|
|
|
|
|
</el-col>
|
|
|
|
|
</div>
|
|
|
|
|
</el-card>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
import Vue from 'vue';
|
|
|
|
|
import {mapState} from 'vuex';
|
|
|
|
|
import echarts from 'echarts';
|
|
|
|
|
import gzh from "assets/rymcugzh.jpg";
|
|
|
|
|
|
|
|
|
|
Vue.prototype.$echarts = echarts;
|
|
|
|
|
export default {
|
|
|
|
|
name: "openData",
|
2022-10-09 09:42:21 +08:00
|
|
|
|
fetch() {
|
|
|
|
|
let {store, params, error} = this.$nuxt.context
|
2022-03-14 14:51:20 +08:00
|
|
|
|
return Promise.all([
|
|
|
|
|
store
|
|
|
|
|
.dispatch('open-data/fetchLastThirtyDays', params)
|
|
|
|
|
.catch(err => error({statusCode: 404})),
|
|
|
|
|
store.dispatch('open-data/fetchDashboard', params)
|
|
|
|
|
])
|
|
|
|
|
},
|
|
|
|
|
computed: {
|
|
|
|
|
...mapState({
|
|
|
|
|
dashboard: state => state['open-data'].data,
|
|
|
|
|
lastThirtyDays: state => state['open-data'].lastThirtyDays
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
gzh: gzh
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
initLastThirtyDaysCharts(data) {
|
|
|
|
|
let myChart = this.$echarts.init(document.getElementById('lastThirtyDays'));
|
|
|
|
|
// 指定图表的配置项和数据
|
|
|
|
|
let option = {
|
|
|
|
|
title: {
|
|
|
|
|
text: '浏览量(根据页面访问次数统计)'
|
|
|
|
|
},
|
|
|
|
|
tooltip: {
|
|
|
|
|
trigger: 'axis',
|
|
|
|
|
axisPointer: {
|
|
|
|
|
type: 'cross',
|
|
|
|
|
label: {
|
|
|
|
|
backgroundColor: '#6a7985'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
legend: {
|
|
|
|
|
data: ["浏览量"]
|
|
|
|
|
},
|
|
|
|
|
xAxis: {
|
|
|
|
|
type: 'category',
|
|
|
|
|
data: data.dates
|
|
|
|
|
},
|
|
|
|
|
yAxis: {
|
|
|
|
|
type: 'value'
|
|
|
|
|
},
|
|
|
|
|
series: [
|
|
|
|
|
{
|
|
|
|
|
name: '浏览量',
|
|
|
|
|
data: data.visits,
|
|
|
|
|
type: 'line',
|
|
|
|
|
smooth: true,
|
|
|
|
|
areaStyle: {}
|
|
|
|
|
}]
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 使用刚指定的配置项和数据显示图表。
|
|
|
|
|
myChart.setOption(option);
|
|
|
|
|
|
|
|
|
|
let myChart2 = this.$echarts.init(document.getElementById('lastThirtyDays2'));
|
|
|
|
|
// 指定图表的配置项和数据
|
|
|
|
|
let option2 = {
|
|
|
|
|
title: {
|
|
|
|
|
text: '访客数(根据访问 IP 统计)'
|
|
|
|
|
},
|
|
|
|
|
tooltip: {
|
|
|
|
|
trigger: 'axis',
|
|
|
|
|
axisPointer: {
|
|
|
|
|
type: 'cross',
|
|
|
|
|
label: {
|
|
|
|
|
backgroundColor: '#6a7985'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
legend: {
|
|
|
|
|
data: ["访客数"]
|
|
|
|
|
},
|
|
|
|
|
xAxis: {
|
|
|
|
|
type: 'category',
|
|
|
|
|
data: data.dates
|
|
|
|
|
},
|
|
|
|
|
yAxis: {
|
|
|
|
|
type: 'value'
|
|
|
|
|
},
|
|
|
|
|
series: [
|
|
|
|
|
{
|
|
|
|
|
name: '访客数',
|
|
|
|
|
data: data.visitIps,
|
|
|
|
|
type: 'line',
|
|
|
|
|
smooth: true,
|
|
|
|
|
areaStyle: {}
|
|
|
|
|
}]
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 使用刚指定的配置项和数据显示图表。
|
|
|
|
|
myChart2.setOption(option2);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mounted() {
|
|
|
|
|
this.$store.commit("setActiveMenu", "open-data");
|
2022-10-31 19:54:53 +08:00
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.initLastThirtyDaysCharts(this.lastThirtyDays)
|
|
|
|
|
}, 500);
|
2022-03-14 14:51:20 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
|
|
|
|
|
|
.article__wrapper {
|
|
|
|
|
max-width: 980px;
|
|
|
|
|
margin: 20px auto;
|
|
|
|
|
display: block;
|
|
|
|
|
padding-left: 1rem;
|
|
|
|
|
padding-right: 1rem;
|
|
|
|
|
box-sizing: border-box;;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.mt-2rem {
|
|
|
|
|
margin: 2rem auto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.dashboard-number {
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
font-size: 2em;
|
|
|
|
|
}
|
|
|
|
|
</style>
|