no message

This commit is contained in:
蔡玲
2024-10-12 15:49:37 +08:00
parent f6253aeb33
commit f3a9d79852
3 changed files with 310 additions and 156 deletions

View File

@@ -403,7 +403,11 @@ export const getAllBigScreen = () => {
"region_name": "蒸汽脱蜡区",
"region_code": "ZQTL"
}
]
],
stateStatistics: {
count: '110',
fourState: [{'status': '50', 'stateName': '正常运行'}, {'status': '30', 'stateName': '暂未生产'}, {'status': '20', 'stateName': '空闲设备'}, {'status': '10', 'stateName': '故障设备'}]
},
}
return res
}

View File

@@ -27,6 +27,15 @@
<div class="pie_wraper">
<div ref="echartsRef2" style="width: 100%; height: 100%;"></div>
</div>
<div class="pie_legend">
<div class="pie_legend_item" v-for="(e, i) in stateStatistics.fourState" :key="i" :class="'pie_legend_item_bg_' + (i + 1)">
<p class="pie_legend_txt_1">{{ e.stateName }}</p>
<div class="pie_legend_txt_wraper">
<p class="pie_legend_txt_2">{{ e.status }}</p>
<p class="pie_legend_txt_3">{{ e.rate }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
@@ -52,6 +61,15 @@
<div class="pie_wraper">
<div ref="echartsRef4" style="width: 100%; height: 100%;"></div>
</div>
<div class="pie_legend">
<div class="pie_legend_item" v-for="(e, i) in stateStatistics.fourState" :key="i" :class="'pie_legend_item_bg_' + (i + 1)">
<p class="pie_legend_txt_1">{{ e.stateName }}</p>
<div class="pie_legend_txt_wraper">
<p class="pie_legend_txt_2">{{ e.status }}</p>
<p class="pie_legend_txt_3">{{ e.rate }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
@@ -77,6 +95,7 @@ export default {
taskList: [], // 当日搬运任务
agvList: [],
rgvList: [],
stateStatistics: {}, // 设备运行统计
myChart1: null,
myChart2: null,
myChart3: null,
@@ -140,6 +159,12 @@ export default {
let res = await getAllBigScreen()
this.materList = [...res.inventoryAnalysis]
this.curList = [...res.inventoryIOAnalysis]
res.stateStatistics.fourState.map(el => {
let rate = Number(el.status) * 100 / Number(res.stateStatistics.count)
rate = rate.toFixed(2) + '%'
this.$set(el, 'rate', rate)
})
this.stateStatistics = res.stateStatistics
this.setEchart1()
this.setEchart2()
this.setEchart3()
@@ -174,7 +199,7 @@ export default {
itemGap: 15,
itemWidth: 4,
itemHeight: 4,
data: [{name: '入库', itemStyle: {color: '#67D470'}}, {name: '出库', itemStyle: {color: '#1980EA'}}]
data: [{name: '生产中', itemStyle: {color: '#67D470'}}, {name: '已完成', itemStyle: {color: '#1980EA'}}]
},
xAxis: {
type: 'category',
@@ -221,7 +246,7 @@ export default {
},
series: [
{
name: '入库',
name: '生产中',
type: 'bar',
barWidth: '10',
itemStyle: {
@@ -243,7 +268,7 @@ export default {
data: barData1
},
{
name: '出库',
name: '已完成',
type: 'bar',
barWidth: '10',
itemStyle: {
@@ -289,24 +314,14 @@ export default {
},
setEchart2 () {
let colors = ['#1980EA', '#67D470', '#B4C9EF', '#EF5252']
let seriesData = []
let seriesName = []
this.materList.map((e, i) => {
if (i === 0) {
seriesData.push({name: e.material_name, value: e.total_material_qty, percentage: e.percentage, radius: ['70%', '100%']})
} else {
seriesData.push({name: e.material_name, value: e.total_material_qty, percentage: e.percentage})
}
seriesName.push({name: e.material_name})
let colorListIn = ['#15347b', '#67D470', '#B4C9EF', '#EF5252']
let colorListOut = ['#1980EA', '#15347b', '#15347b', '#15347b']
let seriesData = this.stateStatistics.fourState
seriesData.map((el, i) => {
el.value = el.status
el.name = el.stateName
})
console.log(seriesData)
let total = 0
this.materList.map(e => {
total = total + Number(e.total_material_qty)
}, 0)
if (!this.materList.length) {
total = '0'
}
let total = this.stateStatistics.count
let option = {
color: colors,
grid: {
@@ -317,9 +332,9 @@ export default {
containLabel: true
},
title: {
left: '19%',
left: '50%',
top: '50%',
text: `{a|总数(台)}\n{b|${total}}`,
text: `{a|总数/台}\n{b|${total}}`,
textAlign: 'center',
textVerticalAlign: 'middle',
padding: 0,
@@ -338,70 +353,86 @@ export default {
}
}
},
legend: {
show: true,
// type: 'scroll',
orient: 'vertical',
right: 0,
bottom: 0,
itemGap: 6,
icon: 'rect',
itemWidth: 4,
itemHeight: 4,
data: seriesName,
formatter: (name) => {
const item = seriesData.filter((item) => item.name === name)[0]
return `{a|${name}}\n{b| ${item.value + '}'}`
},
textStyle: {
rich: {
a: {
fontSize: 8,
lineHeight: 10,
padding: [0, 0, 0, 0],
wordWrap: 'break-word',
color: '#9BB9DD',
align: 'left'
},
b: {
fontSize: 8,
lineHeight: 10,
padding: [0, 0, 0, 0],
color: '#DFECFB',
align: 'left'
}
}
}
},
// legend: {
// show: true,
// // type: 'scroll',
// orient: 'vertical',
// right: 0,
// bottom: 0,
// itemGap: 6,
// icon: 'rect',
// itemWidth: 4,
// itemHeight: 4,
// itemStyle: {
// color: (params) => {
// return colors[params.dataIndex]
// }
// },
// data: seriesData,
// formatter: (name) => {
// const item = seriesData.filter((item) => item.name === name)[0]
// return `{a|${name}}\n{b| ${item.value + '}'}`
// },
// textStyle: {
// rich: {
// a: {
// fontSize: 8,
// lineHeight: 10,
// padding: [0, 0, 0, 0],
// wordWrap: 'break-word',
// color: '#9BB9DD',
// align: 'left'
// },
// b: {
// fontSize: 8,
// lineHeight: 10,
// padding: [0, 0, 0, 0],
// color: '#DFECFB',
// align: 'left'
// }
// }
// }
// },
series: [
{
clockwise: true,
hoverAnimation: false,
legendHoverLink: false,
hoverOffset: 0,
name: '外层空心圆',
name: '内层实心圆',
type: 'pie',
radius: ['80%', '80%'],
center: ['19%', '50%'],
avoidLabelOverlap: false,
hoverOffset: 0,
radius: '51%',
center: ['50%', '50%'],
startAngle: 270,
label: {
show: false,
position: 'center'
},
labelLine: {
show: false
},
itemStyle: {
borderColor: '#4774AD',
borderColor: '#2C4E6E',
borderWidth: 3,
color: '#132942'
},
data: [{ value: 0 }]
},
{
name: '外层空心圆',
type: 'pie',
hoverOffset: 0,
radius: ['90%', '90%'],
center: ['50%', '50%'],
startAngle: 270,
label: {
show: false
},
itemStyle: {
borderColor: '#4677B8',
borderWidth: 1
},
data: [{ value: 0 }]
},
{
name: '库存量监控',
name: '设备运行统计内圈',
type: 'pie',
radius: ['50%', '60%'],
center: ['19%', '50%'],
radius: ['60%', '70%'],
center: ['50%', '50%'],
startAngle: 270,
labelLine: {
show: false
},
@@ -409,15 +440,39 @@ export default {
show: false
},
itemStyle: {
borderColor: 'RGBA(27, 58, 98, .5)',
borderWidth: 2
borderColor: '#15347b',
borderWidth: 1,
color: (params) => {
return colorListIn[params.dataIndex]
}
},
label: {
show: false
},
data: seriesData
},
{
name: '设备运行统计外圈',
type: 'pie',
radius: ['70%', '80%'],
center: ['50%', '50%'],
startAngle: 270,
labelLine: {
show: false
},
tooltip: {
show: false
},
itemStyle: {
borderColor: '#15347b',
borderWidth: 1,
color: (params) => {
return colorListOut[params.dataIndex]
}
},
label: {
show: false
},
selectedMode: true,
hoverAnimation: false,
selectedOffset: 2,
data: seriesData
}
]
@@ -453,7 +508,7 @@ export default {
itemGap: 15,
itemWidth: 4,
itemHeight: 4,
data: [{name: '入库', itemStyle: {color: '#67D470'}}, {name: '出库', itemStyle: {color: '#1980EA'}}]
data: [{name: '生产中', itemStyle: {color: '#67D470'}}, {name: '已完成', itemStyle: {color: '#1980EA'}}]
},
xAxis: {
type: 'category',
@@ -500,7 +555,7 @@ export default {
},
series: [
{
name: '入库',
name: '生产中',
type: 'bar',
barWidth: '10',
itemStyle: {
@@ -522,7 +577,7 @@ export default {
data: barData1
},
{
name: '出库',
name: '已完成',
type: 'bar',
barWidth: '10',
itemStyle: {
@@ -558,19 +613,14 @@ export default {
},
setEchart4 () {
let colors = ['#1980EA', '#67D470', '#B4C9EF', '#EF5252']
let seriesData = []
let seriesName = []
this.materList.map((e, i) => {
seriesData.push({name: e.material_name, value: e.total_material_qty, percentage: e.percentage})
seriesName.push({name: e.material_name})
let colorListIn = ['#15347b', '#67D470', '#B4C9EF', '#EF5252']
let colorListOut = ['#1980EA', '#15347b', '#15347b', '#15347b']
let seriesData = this.stateStatistics.fourState
seriesData.map((el, i) => {
el.value = el.status
el.name = el.stateName
})
let total = 0
this.materList.map(e => {
total = total + Number(e.total_material_qty)
}, 0)
if (!this.materList.length) {
total = '0'
}
let total = this.stateStatistics.count
let option = {
color: colors,
grid: {
@@ -581,79 +631,150 @@ export default {
containLabel: true
},
title: {
x: '16%',
y: '35%',
text: '总数',
subtext: total,
left: '50%',
top: '50%',
text: `{a|总数/台}\n{b|${total}}`,
textAlign: 'center',
textStyle: {
fontSize: 9,
lineHeight: 10,
color: '#A8C3E6'
},
subtextStyle: {
fontSize: 10,
lineHeight: 8,
color: '#DBE7F6'
}
},
legend: {
show: true,
// type: 'scroll',
orient: 'vertical',
right: 0,
bottom: 0,
itemGap: 6,
icon: 'rect',
itemWidth: 4,
itemHeight: 4,
data: seriesName,
formatter: (name) => {
const item = seriesData.filter((item) => item.name === name)[0]
return `{a|${name}}\n{b| ${item.value + '}'}`
},
textVerticalAlign: 'middle',
padding: 0,
textStyle: {
rich: {
a: {
fontSize: 8,
lineHeight: 10,
padding: [0, 0, 0, 0],
wordWrap: 'break-word',
color: '#9BB9DD',
align: 'left'
color: '#A8C3E6'
},
b: {
fontSize: 8,
lineHeight: 10,
padding: [0, 0, 0, 0],
color: '#DFECFB',
align: 'left'
fontSize: 14,
lineHeight: 16,
color: '#DBE7F6'
}
}
}
},
series: [{
name: '库存量监控',
type: 'pie',
radius: ['50%', '60%'],
center: ['19%', '50%'],
labelLine: {
show: false
// legend: {
// show: true,
// // type: 'scroll',
// orient: 'vertical',
// right: 0,
// bottom: 0,
// itemGap: 6,
// icon: 'rect',
// itemWidth: 4,
// itemHeight: 4,
// itemStyle: {
// color: (params) => {
// return colors[params.dataIndex]
// }
// },
// data: seriesData,
// formatter: (name) => {
// const item = seriesData.filter((item) => item.name === name)[0]
// return `{a|${name}}\n{b| ${item.value + '}'}`
// },
// textStyle: {
// rich: {
// a: {
// fontSize: 8,
// lineHeight: 10,
// padding: [0, 0, 0, 0],
// wordWrap: 'break-word',
// color: '#9BB9DD',
// align: 'left'
// },
// b: {
// fontSize: 8,
// lineHeight: 10,
// padding: [0, 0, 0, 0],
// color: '#DFECFB',
// align: 'left'
// }
// }
// }
// },
series: [
{
name: '内层实心圆',
type: 'pie',
hoverOffset: 0,
radius: '51%',
center: ['50%', '50%'],
startAngle: 270,
label: {
show: false
},
itemStyle: {
borderColor: '#2C4E6E',
borderWidth: 3,
color: '#132942'
},
data: [{ value: 0 }]
},
tooltip: {
show: false
{
name: '外层空心圆',
type: 'pie',
hoverOffset: 0,
radius: ['90%', '90%'],
center: ['50%', '50%'],
startAngle: 270,
label: {
show: false
},
itemStyle: {
borderColor: '#4677B8',
borderWidth: 1
},
data: [{ value: 0 }]
},
itemStyle: {
borderColor: 'RGBA(27, 58, 98, .5)',
borderWidth: 2
{
name: '设备运行统计内圈',
type: 'pie',
radius: ['60%', '70%'],
center: ['50%', '50%'],
startAngle: 270,
labelLine: {
show: false
},
tooltip: {
show: false
},
itemStyle: {
borderColor: '#15347b',
borderWidth: 1,
color: (params) => {
return colorListIn[params.dataIndex]
}
},
label: {
show: false
},
data: seriesData
},
label: {
show: false
},
selectedMode: 'single',
selectedOffset: 20,
data: seriesData
}]
{
name: '设备运行统计外圈',
type: 'pie',
radius: ['70%', '80%'],
center: ['50%', '50%'],
startAngle: 270,
labelLine: {
show: false
},
tooltip: {
show: false
},
itemStyle: {
borderColor: '#15347b',
borderWidth: 1,
color: (params) => {
return colorListOut[params.dataIndex]
}
},
label: {
show: false
},
data: seriesData
}
]
}
this.myChart4.setOption(option, true)
}

View File

@@ -75,23 +75,52 @@
width 100%
height calc(100% - 24px)
padding 4px
background-color rgba(30, 65, 126, 70%)
background-color #15347b
.content_wraper_2
padding 0
display flex
justify-content space-between
.pie_wraper
width 100%
width 50%
height 100%
// padding 1px 0 0 1px
// background left center / 111px 111px url('../../../images/pie-bg_2_s.png') no-repeat
.pie_legend
width calc(100% - 200px)
width 50%
height 100%
margin-left 200px
display flex
flex-direction row
justify-content space-between
align-items center
flex-wrap: wrap
.pie_legend_item
width 50%
padding 0 0px 2px 10px
.pie_legend_txt_1
font-size: 8px;
line-height: 8px
color: #9BB9DD;
margin-bottom 2px
.pie_legend_txt_wraper
width 100%
.pie_legend_txt_2
font-size 8px
line-height: 8px
color: #fff
margin-bottom 2px
.pie_legend_txt_3
font-size: 8px;
line-height: 8px
color: #9BB9DD;
opacity: 0.5;
.pie_legend_item_bg_1
background top left / 8px auto url('../../../images/fk_1.png') no-repeat
.pie_legend_item_bg_2
background top left / 8px auto url('../../../images/fk_2.png') no-repeat
.pie_legend_item_bg_3
background top left / 8px auto url('../../../images/fk_3.png') no-repeat
.pie_legend_item_bg_4
background top left / 8px auto url('../../../images/fk_5.png') no-repeat
.scroll_wrap
width 100%
height 100%