可视化报表项目效果
开源表格样式库阿帕奇
let container = document.querySelector('.app')
let myChart = echarte.init(container) // 初始化图表实例
在网站的文档中找到配置项手册,
myChart.setOption({
// 传入配置对象,通过这个配置对象确认绘制的图表内容
xAxis: {
// 默认情况下,x粥通常为category类型,y轴一般为value
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value',
splitLine:{
show: false // 去掉柱状图背景的分隔线
}
},
// series决定绘制一个什么类型的图表
series: [
{
data: [820, 932, 901, 934, 1290, 1330, 1320],/* 数据 */
type: 'bar', /* 数据显示类型 */
}
],
tooltip:{}, // 鼠标移上去显示标签
})
npm install echarts
开始前准备
给vue的prototype原型对象挂载的属性,可以在入口中给每个组件实例都注入一些成员。
import Vue from 'vue'
import App from './App.vue'
import * as echarts from 'echarts'
import vcharts from 'vue-echarts'
Vue.component('v-chart', vcharts) // 注册全局组件v-chart
Vue.config.productionTip = false
// 给vue的prototype原型对象挂载的属性,可以在入口中给每个组件实例都注入一些成员
Vue.prototype.$echarts = echarts
new Vue({
render: h => h(App)
}).$mount('#app')
封装组件,初始化图表可以通过封装好的组件来完成。使用封装好的组件可以不再进行原本的初始化内容
改为了
input为v-model绑定的data
在视图中需要写入:option="option"
这是按钮
封装好的初始化图表组件网站
// 全局注册组件
npm install vue-echarts
// ui组件vue2和vue3
npm i element-ui
npm i element-plus
// reset-css 初始化全局样式组件
npm i reset-css
// main
import Vue from 'vue'
import App from './App.vue'
import * as echarts from 'echarts'
import './plugins/element-ui' // 引入组件库
import './plugins/vue-echarts'
import 'reset-css' // 引入清除默认样式css
Vue.config.productionTip = false
// 给vue的prototype原型对象挂载的属性,可以在入口中给每个组件实例都注入一些成员
Vue.prototype.$echarts = echarts
new Vue({
render: h => h(App)
}).$mount('#app')
// element-ui 实现组件的按需引入
import Vue from 'vue'
import 'element-ui/lib/theme-chalk/index.css'
import { Button, Input } from 'element-ui' // 按需引入el的组件
Vue.use(Button)
Vue.use(Input) // 组件引入后需要在下面注册一下
// vue-echarts 实现组件的全局注册
import Vue from 'vue'
import vcharts from 'vue-echarts'
Vue.component('v-chart', vcharts) // 注册全局组件v-chart
在.eslintrc.js中的rules里书写一个'vue/multi-word-component-names': 0,将命名必须要大驼峰的规则去掉
span.increase{
display: inline-block;
width: 0;
height: 0;
border-width: 4px;
border-color: transparent transparent green transparent;
border-style: solid;
margin-left: 10px;
transform: translateY(-50%);
}
新建TotalSale.vue,使用CommonCard组件写卡片中的内容
日同比
{{reportData.salesGrowLastDay}}%
月同比
{{reportData.saleSGrowLastMonth}}%
昨日销售额
¥{{reportData.salesLastDay }}
绘制第二个卡片的图TotalOrder.vue
mixins: [CommonCardMixin],
data () {
return {
option: null
}
},
mounted () {},
watch: {
reportData (newValue) {
this.renderChart(newValue.orderTrend)
}
},
methods: {
renderChart (data) {
this.option = {
xAxis: {
type: 'category',
show: false,
boundaryGap: false
},
yAxis: {
type: 'value',
show: false
},
// 在一些宽高很小的容器上绘图的时候 可以将网格和容器靠近
grid: {
left: 0,
top: 0,
right: 0,
bottom: 0
},
series: {
type: 'line',
data,
areaStyle: {
color: 'purple'
},
lineStyle: {
width: 0
},
itemStyle: {
opacity: 0
},
smooth: true
}}}}
昨日销售额
¥ 12768
绘制第三个卡片的图,创建TodayUser.vue
退货率
{{reportData.returnRate}}%
export default {
data () {...},
methods: {
renderChart (data) {
this.option = {
series: {
type: 'wordCloud',
shape: 'cardioid',
data,
width: '100%',
height: '100%',
textStyle: {
// Color can be a callback function or a color string
color: function () {
// Random color
return 'rgb(' + [
Math.round(Math.random() * 160),
Math.round(Math.random() * 160),
Math.round(Math.random() * 160)
].join(',') + ')'
}
},
emphasis: {
focus: 'self',
textStyle: {
textShadowBlur: 5,
textShadowColor: '#333'
}
}
},
tooltip: {} // 空数组即可,只要出现
}
}
},