课程名称:Vue + EChart 4.0 从0到1打造商业级数据报表项目
课程章节:顶部核心数据指标布局前三个card设置
课程讲师: Sam
课程内容:
核心指标公共组件抽取,使用slot做插槽,分别定义中间的跟底部的不一致,底部的利用slot,name进行区分,中间的利用slot默认插槽进行区分,根据border设置公共的三角形,方便其他的组件使用
<template>
<div class="common-card">
<div class="title">{{title}}</div>
<div class="value">{{value}}</div>
<div class="chart">
<slot></slot>
</div>
<div class="line" />
<div class="total">
<slot name="footer"></slot>
</div>
</div>
</template>
<script>
export default {
props: {
title: String,
value: [String, Number]
}
}
</script>
<style lang="scss" scoped>
.title {
font-size: 12px;
color: #999;
}
.value {
font-size: 25px;
color: #000;
margin-top: 5px;
letter-spacing: 1px;
}
.chart {
height: 50px;
}
.line {
margin: 10px 0;
border-top: 1px solid #eee;
}
.total {
font-size: 12px;
color: #666;
}
</style>
<style lang="scss">
.emphasis {
margin-left: 5px;
color: #333;
font-weight: 700;
}
.increase {
width: 0;
height: 0;
border-width: 3px;
border-color: transparent transparent red transparent;
border-style: solid;
margin: 0 0 3px 5px;
}
.decrease {
width: 0;
height: 0;
border-width: 3px;
border-color: green transparent transparent transparent;
border-style: solid;
margin: 3px 0 0 5px;
}
</style>
新建四个中间插槽页面分别是:TotalSales、TotalOrder、TodyUsers、TopUsers,分别设置
销售额度、订单、每天用户、总用户的量
TotalSales
<template>
<common-card
title="累计销售额"
:value="salesToday"
>
<template>
<div class="compare-wrapper">
<div class="compare">
<span>日同比</span>
<span class="emphasis">{{salesGrowthLastDay}}</span>
<div class="increase" />
</div>
<div class="compare">
<span>月同比</span>
<span class="emphasis">{{salesGrowthLastMonth}}</span>
<div class="decrease" />
</div>
</div>
</template>
<template v-slot:footer>
<span>昨日销售额 </span>
<span class="emphasis">{{salesLastDay}}</span>
</template>
</common-card>
</template>
<script>
import commonCardMixin from '../../mixins/commonCardMixin'
import commonDataMixin from '../../mixins/commonDataMixin'
export default {
mixins: [commonCardMixin, commonDataMixin]
}
</script>
<style lang="scss" scoped>
.compare-wrapper {
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
.compare {
display: flex;
align-items: center;
font-size: 12px;
margin-top: 3px;
color: #666;
}
}
</style>
TotalOrder
<template>
<common-card
title="累计订单量"
:value="orderToday"
>
<template>
<v-chart :options="getOptions()" />
</template>
<template v-slot:footer>
<span>昨日订单量 </span>
<span class="emphasis">{{orderLastDay}}</span>
</template>
</common-card>
</template>
<script>
import commonCardMixin from '../../mixins/commonCardMixin'
import commonDataMixin from '../../mixins/commonDataMixin'
export default {
mixins: [commonCardMixin, commonDataMixin],
methods: {
getOptions() {
return this.orderTrend.length > 0 ? {
xAxis: {
type: 'category',
show: false,
boundaryGap: false
},
yAxis: {
show: false
},
series: [{
type: 'line',
data: this.orderTrend,
areaStyle: {
color: 'purple'
},
lineStyle: {
width: 0
},
itemStyle: {
opacity: 0
},
smooth: true
}],
grid: {
top: 0,
bottom: 0,
left: 0,
right: 0
}
} : null
}
}
}
</script>
echart在setoption的时候,至少需要的配置参数
- xAxis: { x轴
type:[] 默认是value,如果是value,会绘制成一条直线;category会分类,应该是会按原来的顺序渲染点的数据
data: [] data和下方series数据一一对应
show:false 可以隐藏x轴
boundaryGay: false x轴两边会有间距,false取消间距
}
- yAxis: { y轴
show:false 可以隐藏y轴
}
- series: [{ 系列,一个系列就是一张表
type: '' 图表类型
data: [] 图表数据
areaStyle: { 控制面积区域的配置
color:'' 面积区域颜色
},
lineStyle:{ 线的样式
width: 0 隐藏线
},
itemStyle:{ 数据点的样式
opacity:0 透明度置0隐藏数据点
},
smooth: true 让线条更加平滑地展示
}],
- grid:{ 视图布局,下面布局表示顶格显示
top:0
bottom:0
left:0
right: 0
}
TodyUsers
<template>
<common-card
title="今日交易用户数"
:value="orderUser"
>
<template>
<v-chart :options="getOptions()" />
</template>
<template v-slot:footer>
<span>退货率 </span>
<span class="emphasis">{{returnRate}}</span>
</template>
</common-card>
</template>
<script>
import commonCardMixin from '../../mixins/commonCardMixin'
import commonDataMixin from '../../mixins/commonDataMixin'
export default {
mixins: [commonCardMixin, commonDataMixin],
methods: {
getOptions() {
return {
color: ['#3398DB'],// 修改柱状图颜色
tooltip: {},
series: [{
name: '用户实时交易量',
type: 'bar',
data: this.orderUserTrend,
barWidth: '60%'
}],
xAxis: {
type: 'category',
data: this.orderUserTrendAxis,
show: false
},
yAxis: {
show: false
},
grid: {
top: 0,
left: 0,
bottom: 0,
right: 0
}
}
}
}
}
</script>
<style lang="scss" scoped>
</style>
setOption({
color: [’’] 所绘制的数据图形的样式,如柱状图就是柱体的颜色
series:[{
barWidth: 60%; 柱状图实际宽度的60%
}]
})
totalusers
<template>
<common-card
title="累计用户数"
:value="userToday"
>
<template>
<v-chart :options="getOptions()" />
</template>
<template v-slot:footer>
<div class="total-users-footer">
<span>日同比</span>
<span class="emphasis">{{userGrowthLastDay}}</span>
<div class="increase" />
<span class="month">月同比</span>
<span class="emphasis">{{userGrowthLastMonth}}</span>
<div class="decrease" />
</div>
</template>
</common-card>
</template>
<script>
import commonCardMixin from '../../mixins/commonCardMixin'
import commonDataMixin from '../../mixins/commonDataMixin'
export default {
mixins: [commonCardMixin, commonDataMixin],
methods: {
getOptions() {
return {
grid: {
left: 0,
right: 0,
top: 0,
bottom: 0
},
xAxis: {
type: 'value',
show: false
},
yAxis: {
type: 'category',
show: false
},
series: [{
name: '上月平台用户数',
type: 'bar',
stack: '总量',
data: [this.userLastMonth],
barWidth: 10,
itemStyle: {
color: '#45c946'
}
}, {
name: '今日平台用户数',
type: 'bar',
stack: '总量',
data: [this.userTodayNumber],
itemStyle: {
color: '#eee'
}
}, {
type: 'custom',
stack: '总量',
data: [this.userLastMonth],
renderItem: (params, api) => {
const value = api.value(0)
const endPoint = api.coord([value, 0])
return {
type: 'group',
position: endPoint,
children: [{
type: 'path',
shape: {
d: 'M1024 255.996 511.971 767.909 0 255.996 1024 255.996z',
x: -5,
y: -20,
width: 10,
height: 10,
layout: 'cover'
},
style: {
fill: '#45c946'
}
}, {
type: 'path',
shape: {
d: 'M0 767.909l512.029-511.913L1024 767.909 0 767.909z',
x: -5,
y: 10,
width: 10,
height: 10,
layout: 'cover'
},
style: {
fill: '#45c946'
}
}]
}
}
}]
}
}
}
}
</script>
<style lang="scss" scoped>
.total-users-footer {
display: flex;
align-items: center;
.month {
margin-left: 10px;
}
}
</style>
stack: ‘总量’, 合并两条线为同一条,设置stack名称一样,就可以
-
category就是定义实际横坐标的东西,value就是定义实际纵坐标的东西
-
series列表每有一个元素表示在该category下绘制多一个图
-
series 单个元素里加上stack属性表示把相同系列的图合并
-
series 单个元素里加上color表示图主体的颜色,比如柱状图的柱体
课程收获:
数据表格设置,学到了怎么在vue2中加载表格,如何设置根据自己的需求设置表格的样式,比如隐藏x,y再有就是学习到了,设置对x的颜色整体颜色设置,怎么设置x,x的宽度,怎么根据需求抽离出来不一样的模板,并设置slot,自定义样式,再根据slot的name区分两个模块的区别等
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦