07-首页图表(课后自行完成)
- 样式不一定非要一模一样哈,目的是复习echarts绘制图表一些配置
1.本项目首页图表没有服务器接口,因此只需要渲染本地数据即可
2.由于之前的课程已经深度学习了echarts图表制作,因此本项目的图标作为课后作业,由学生自主完成
原因:
大事件项目图表比之前CMS项目的图表要更加简单
-
1.echarts官网:echarts.apache.org/zh/index.ht…
-
2.下载echarts
- npm i echarts
-
3.导入echarts :echarts.apache.org/handbook/zh…
- import * as echarts from 'echarts'
-
整体布局使用的是element-ui的layout布局:element.eleme.cn/#/zh-CN/com…
-
本案例所需要数据如下 (渲染的时候因为有dom操作,所以要在mounted钩子中进行哟)
-
折线图
-
let aListAll = [ { count: 36, date: '2019-04-13' }, { count: 52, date: '2019-04-14' }, { count: 78, date: '2019-04-15' }, { count: 85, date: '2019-04-16' }, { count: 65, date: '2019-04-17' }, { count: 72, date: '2019-04-18' }, { count: 88, date: '2019-04-19' }, { count: 64, date: '2019-04-20' }, { count: 72, date: '2019-04-21' }, { count: 90, date: '2019-04-22' }, { count: 96, date: '2019-04-23' }, { count: 100, date: '2019-04-24' }, { count: 102, date: '2019-04-25' }, { count: 110, date: '2019-04-26' }, { count: 123, date: '2019-04-27' }, { count: 100, date: '2019-04-28' }, { count: 132, date: '2019-04-29' }, { count: 146, date: '2019-04-30' }, { count: 200, date: '2019-05-01' }, { count: 180, date: '2019-05-02' }, { count: 163, date: '2019-05-03' }, { count: 110, date: '2019-05-04' }, { count: 80, date: '2019-05-05' }, { count: 82, date: '2019-05-06' }, { count: 70, date: '2019-05-07' }, { count: 65, date: '2019-05-08' }, { count: 54, date: '2019-05-09' }, { count: 40, date: '2019-05-10' }, { count: 45, date: '2019-05-11' }, { count: 38, date: '2019-05-12' } ] - 其他图表数据可以随便写(主要是练习echarts布局的)
-
-
1.1-整体布局
<template>
<div>
<div class="container-fluid">
<el-row class="spannel_list" :gutter="10">
<el-col :sm="6" :xs="12">
<div class="spannel">
<em>10015</em><span>篇</span>
<b>总文章数</b>
</div>
</el-col>
<el-col :sm="6" :xs="12">
<div class="spannel scolor01">
<em>123</em><span>篇</span>
<b>日新增文章数</b>
</div>
</el-col>
<el-col :sm="6" :xs="12">
<div class="spannel scolor02">
<em>35</em><span>条</span>
<b>评论总数</b>
</div>
</el-col>
<el-col :sm="6" :xs="12">
<div class="spannel scolor03">
<em>123</em><span>条</span>
<b>日新增评论数</b>
</div>
</el-col>
</el-row>
</div>
<div class="container-fluid">
<el-row class="curve-pie" :gutter="10">
<el-col :sm="16" :xs="16">
<div class="gragh_pannel" id="curve_show"></div>
</el-col>
<el-col :sm="8" :xs="8">
<div class="gragh_pannel" id="pie_show"></div>
</el-col>
</el-row>
</div>
<div class="container-fluid">
<div class="column_pannel" id="column_show"></div>
</div>
</div>
</template>
<script>
import * as echarts from 'echarts'
export default {
name: 'Home',
}
</script>
<style lang="less" scoped>
.spannel_list {
margin-top: 20px;
}
.spannel {
height: 100px;
overflow: hidden;
text-align: center;
position: relative;
background-color: #fff;
border: 1px solid #e7e7e9;
margin-bottom: 20px;
}
.spannel em {
font-style: normal;
font-size: 50px;
line-height: 50px;
display: inline-block;
margin: 10px 0 0 20px;
font-family: 'Arial';
color: #83a2ed;
}
.spannel span {
font-size: 14px;
display: inline-block;
color: #83a2ed;
margin-left: 10px;
}
.spannel b {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
line-height: 24px;
background: #e5e5e5;
color: #333;
font-size: 14px;
font-weight: normal;
}
.scolor01 em,
.scolor01 span {
color: #6ac6e2;
}
.scolor02 em,
.scolor02 span {
color: #5fd9de;
}
.scolor03 em,
.scolor03 span {
color: #58d88e;
}
.gragh_pannel {
height: 350px;
border: 1px solid #e7e7e9;
background-color: #fff !important;
margin-bottom: 20px;
}
.column_pannel {
margin-bottom: 20px;
height: 400px;
border: 1px solid #e7e7e9;
background-color: #fff !important;
}
</style>
1.2-完整代码
<template>
<div>
<div class="container-fluid">
<el-row class="spannel_list" :gutter="10">
<el-col :sm="6" :xs="12">
<div class="spannel">
<em>10015</em><span>篇</span>
<b>总文章数</b>
</div>
</el-col>
<el-col :sm="6" :xs="12">
<div class="spannel scolor01">
<em>123</em><span>篇</span>
<b>日新增文章数</b>
</div>
</el-col>
<el-col :sm="6" :xs="12">
<div class="spannel scolor02">
<em>35</em><span>条</span>
<b>评论总数</b>
</div>
</el-col>
<el-col :sm="6" :xs="12">
<div class="spannel scolor03">
<em>123</em><span>条</span>
<b>日新增评论数</b>
</div>
</el-col>
</el-row>
</div>
<div class="container-fluid">
<el-row class="curve-pie" :gutter="10">
<el-col :sm="16" :xs="16">
<div class="gragh_pannel" id="curve_show"></div>
</el-col>
<el-col :sm="8" :xs="8">
<div class="gragh_pannel" id="pie_show"></div>
</el-col>
</el-row>
</div>
<div class="container-fluid">
<div class="column_pannel" id="column_show"></div>
</div>
</div>
</template>
<script>
import * as echarts from 'echarts'
export default {
name: 'Home',
mounted() {
let oChart = echarts.init(document.getElementById('curve_show'))
let aListAll = [ { count: 36, date: '2019-04-13' }, { count: 52, date: '2019-04-14' }, { count: 78, date: '2019-04-15' }, { count: 85, date: '2019-04-16' }, { count: 65, date: '2019-04-17' }, { count: 72, date: '2019-04-18' }, { count: 88, date: '2019-04-19' }, { count: 64, date: '2019-04-20' }, { count: 72, date: '2019-04-21' }, { count: 90, date: '2019-04-22' }, { count: 96, date: '2019-04-23' }, { count: 100, date: '2019-04-24' }, { count: 102, date: '2019-04-25' }, { count: 110, date: '2019-04-26' }, { count: 123, date: '2019-04-27' }, { count: 100, date: '2019-04-28' }, { count: 132, date: '2019-04-29' }, { count: 146, date: '2019-04-30' }, { count: 200, date: '2019-05-01' }, { count: 180, date: '2019-05-02' }, { count: 163, date: '2019-05-03' }, { count: 110, date: '2019-05-04' }, { count: 80, date: '2019-05-05' }, { count: 82, date: '2019-05-06' }, { count: 70, date: '2019-05-07' }, { count: 65, date: '2019-05-08' }, { count: 54, date: '2019-05-09' }, { count: 40, date: '2019-05-10' }, { count: 45, date: '2019-05-11' }, { count: 38, date: '2019-05-12' } ]
const aCount = []
const aDate = []
for (let i = 0; i < aListAll.length; i++) {
aCount.push(aListAll[i].count)
aDate.push(aListAll[i].date)
}
let chartopt = {
title: {
text: '月新增文章数',
left: 'center',
top: '10'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['新增文章'],
top: '40'
},
toolbox: {
show: true,
feature: {
mark: { show: true },
dataView: { show: true, readOnly: false },
magicType: { show: true, type: ['line', 'bar'] },
restore: { show: true },
saveAsImage: { show: true }
}
},
calculable: true,
xAxis: [
{
name: '日',
type: 'category',
boundaryGap: false,
data: aDate
}
],
yAxis: [
{
name: '月新增文章数',
type: 'value'
}
],
series: [
{
name: '新增文章',
type: 'line',
smooth: true,
areaStyle: { type: 'default' },
itemStyle: { color: '#f80', lineStyle: { color: '#f80' } },
data: aCount
}
],
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: 'rgba(255,136,0,0.39)'
},
{
offset: 0.34,
color: 'rgba(255,180,0,0.25)'
},
{
offset: 1,
color: 'rgba(255,222,0,0.00)'
}
])
}
},
grid: {
show: true,
x: 50,
x2: 50,
y: 80,
height: 220
}
}
oChart.setOption(chartopt)
let oPie = echarts.init(document.getElementById('pie_show'))
let oPieopt = {
title: {
top: 10,
text: '分类文章数量比',
x: 'center'
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c} ({d}%)'
},
color: ['#5885e8', '#13cfd5', '#00ce68', '#ff9565'],
legend: {
x: 'center',
top: 65,
data: ['奇趣事', '会生活', '爱旅行', '趣美味']
},
toolbox: {
show: true,
x: 'center',
top: 35,
feature: {
mark: { show: true },
dataView: { show: true, readOnly: false },
magicType: {
show: true,
type: ['pie', 'funnel'],
option: {
funnel: {
x: '25%',
width: '50%',
funnelAlign: 'left',
max: 1548
}
}
},
restore: { show: true },
saveAsImage: { show: true }
}
},
calculable: true,
series: [
{
name: '访问来源',
type: 'pie',
radius: ['45%', '60%'],
center: ['50%', '65%'],
data: [
{ value: 300, name: '奇趣事' },
{ value: 100, name: '会生活' },
{ value: 260, name: '爱旅行' },
{ value: 180, name: '趣美味' }
]
}
]
}
oPie.setOption(oPieopt)
let oColumn = echarts.init(document.getElementById('column_show'))
let oColumnopt = {
title: {
text: '文章访问量',
left: 'center',
top: '10'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['奇趣事', '会生活', '爱旅行', '趣美味'],
top: '40'
},
toolbox: {
show: true,
feature: {
mark: { show: true },
dataView: { show: true, readOnly: false },
magicType: { show: true, type: ['line', 'bar'] },
restore: { show: true },
saveAsImage: { show: true }
}
},
calculable: true,
xAxis: [
{
type: 'category',
data: ['1月', '2月', '3月', '4月', '5月']
}
],
yAxis: [
{
name: '访问量',
type: 'value'
}
],
series: [
{
name: '奇趣事',
type: 'bar',
barWidth: 20,
areaStyle: { type: 'default' },
itemStyle: {
color: '#fd956a'
},
data: [800, 708, 920, 1090, 1200]
},
{
name: '会生活',
type: 'bar',
barWidth: 20,
areaStyle: { type: 'default' },
itemStyle: {
color: '#2bb6db'
},
data: [400, 468, 520, 690, 800]
},
{
name: '爱旅行',
type: 'bar',
barWidth: 20,
areaStyle: { type: 'default' },
itemStyle: {
color: '#13cfd5'
},
data: [500, 668, 520, 790, 900]
},
{
name: '趣美味',
type: 'bar',
barWidth: 20,
areaStyle: { type: 'default' },
itemStyle: {
color: '#00ce68'
},
data: [600, 508, 720, 890, 1000]
}
],
grid: {
show: true,
x: 50,
x2: 30,
y: 80,
height: 260
},
dataZoom: [
// 给x轴设置滚动条
{
start: 0, // 默认为0
end: 100 - 1000 / 31, // 默认为100
type: 'slider',
show: true,
xAxisIndex: [0],
handleSize: 0, // 滑动条的 左右2个滑动条的大小
height: 8, // 组件高度
left: 45, // 左边的距离
right: 50, // 右边的距离
bottom: 26, // 右边的距离
handleColor: '#ddd', // h滑动图标的颜色
handleStyle: {
borderColor: '#cacaca',
borderWidth: '1',
shadowBlur: 2,
background: '#ddd',
shadowColor: '#ddd'
}
}
]
}
oColumn.setOption(oColumnopt)
}
}
</script>
<style lang="less" scoped>
.spannel_list {
margin-top: 20px;
}
.spannel {
height: 100px;
overflow: hidden;
text-align: center;
position: relative;
background-color: #fff;
border: 1px solid #e7e7e9;
margin-bottom: 20px;
}
.spannel em {
font-style: normal;
font-size: 50px;
line-height: 50px;
display: inline-block;
margin: 10px 0 0 20px;
font-family: 'Arial';
color: #83a2ed;
}
.spannel span {
font-size: 14px;
display: inline-block;
color: #83a2ed;
margin-left: 10px;
}
.spannel b {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
line-height: 24px;
background: #e5e5e5;
color: #333;
font-size: 14px;
font-weight: normal;
}
.scolor01 em,
.scolor01 span {
color: #6ac6e2;
}
.scolor02 em,
.scolor02 span {
color: #5fd9de;
}
.scolor03 em,
.scolor03 span {
color: #58d88e;
}
.gragh_pannel {
height: 350px;
border: 1px solid #e7e7e9;
background-color: #fff !important;
margin-bottom: 20px;
}
.column_pannel {
margin-bottom: 20px;
height: 400px;
border: 1px solid #e7e7e9;
background-color: #fff !important;
}
</style>
\