【前端】智能库房综合管理系统前端项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

279 lines
6.8 KiB

<template>
<div id="main1" :style="{height:height,width:width}" />
</template>
<script>
import echarts from 'echarts'
import resize from '@/views/dashboard/mixins/resize'
export default {
name: 'BarEcharts',
mixins: [resize],
props: {
storageData: {
type: Object,
require: true,
default: function() {
return {}
}
},
width: {
type: String,
default: '100%'
},
height: {
type: String,
default: '100%'
}
},
data() {
return {
chart: null
}
},
watch: {
'storageData': {
handler(val) {
setTimeout(() => {
this.drawChart()
}, 100)
},
immediate: true,
deep: true
}
},
mounted() {
this.drawChart()
},
methods: {
drawChart() {
const app = {}
const chartDom = document.getElementById('main1')
this.chart = echarts.init(chartDom)
let option = null
const posList = [
'left',
'right',
'top',
'bottom',
'inside',
'insideTop',
'insideLeft',
'insideRight',
'insideBottom',
'insideTopLeft',
'insideTopRight',
'insideBottomLeft',
'insideBottomRight'
]
app.configParameters = {
rotate: {
min: -90,
max: 90
},
align: {
options: {
left: 'left',
center: 'center',
right: 'right'
}
},
verticalAlign: {
options: {
top: 'top',
middle: 'middle',
bottom: 'bottom'
}
},
position: {
options: posList.reduce(function(map, pos) {
map[pos] = pos
return map
}, {})
},
distance: {
min: 0,
max: 100
}
}
app.config = {
rotate: 90,
align: 'left',
verticalAlign: 'middle',
position: 'insideBottom',
distance: 15,
onChange: function() {
const labelOption = {
rotate: app.config.rotate,
align: app.config.align,
verticalAlign: app.config.verticalAlign,
position: app.config.position,
distance: app.config.distance
}
this.chart.setOption({
series: [
{
label: labelOption
},
{
label: labelOption
}
]
})
}
}
const labelOption = {
show: false,
position: app.config.position,
distance: app.config.distance,
align: app.config.align,
verticalAlign: app.config.verticalAlign,
rotate: app.config.rotate,
formatter: '{c} {name|{a}}',
fontSize: 16,
rich: {
name: {}
}
}
option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
},
formatter: function(params) {
var res = "<div style='width:100%;height:24px;margin-bottom:5px;padding:0 12px;line-height:24px;'><p>" + echarts.format.formatTime('yyyy年M月', new Date(params[0].name)) + ' </p></div>'
for (var i = 0; i < params.length; i++) {
res += `<div style="color: #fff;font-size: 14px; padding:0 12px;line-height: 24px">
<span style="display:inline-block;margin-right:5px;border-radius:2px;width:10px;height:10px;background:${[params[i].color]};"></span>
${params[i].seriesName}
${params[i].data}
</div>`
}
return res
}
},
legend: { // 图例
data: ['出库', '入库'],
right: 20,
top: 10,
icon: 'circle',
textStyle: {
color: '#fff'
}
},
grid: {
left: '3%',
right: '3%',
bottom: '8%',
top: '17%',
containLabel: true
},
xAxis: [{
type: 'category',
axisTick: { show: false },
data: this.storageData.storageMonths,
axisLine: {// 轴线的颜色以及宽度
lineStyle: {
color: '#113D72'
}
},
axisLabel: {// x轴文字的配置
show: true,
textStyle: {
color: '#fff'
},
formatter: function(value) {
return echarts.format.formatTime('M月', new Date(value))
}
},
splitLine: {// 分割线配置
lineStyle: {
color: '#113D72',
type: 'dashed'
}
}
}],
yAxis: [{
min: 0,
max: 900,
splitNumber: 3,
type: 'value',
axisLine: {// 轴线的颜色以及宽度
show: false
},
axisLabel: {// 轴文字的配置
show: true,
textStyle: {
color: '#fff'
}
},
axisTick: { // 刻度线隐藏
show: false
},
splitLine: {// 分割线配置
lineStyle: {
color: '#113D72',
type: 'dashed'
}
}
}],
series: [
{
name: '出库',
type: 'bar',
barWidth: 10, // 柱图宽度
barGap: '30%',
label: labelOption,
emphasis: {
focus: 'series'
},
data: this.storageData.outStorageData,
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0,
color: '#6E48E6'
},
{
offset: 1,
color: '#3AA6FA '
}
])
},
{
name: '入库',
type: 'bar',
barWidth: 10, // 柱图宽度
label: labelOption,
emphasis: {
focus: 'series'
},
data: this.storageData.inStorageData,
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0,
color: '#9DDD92'
},
{
offset: 1,
color: '#10BFAA'
}
])
}
]
}
option && this.chart.setOption(option)
}
}
}
</script>
<style lang="scss" scoped>
</style>