Files
screen-lnsh/src/pages/modules/homepage/two.vue
2023-06-05 14:35:45 +08:00

734 lines
22 KiB
Vue

<template>
<div class="n_container">
<div class="n_header">
<div class="n_header_h1">
<h1>据控制中心</h1>
</div>
</div>
<div class="n_body_container">
<div class="n_body_container_wraper">
<div class="n_left_content">
<div class="status_wrap">
<div class="status_item">
<div class="status_tip green"></div>
<div class="status_name">运行中/困料中</div>
</div>
<div class="status_item">
<div class="status_tip yellow"></div>
<div class="status_name">待机/困料完成</div>
</div>
<div class="status_item">
<div class="status_tip gray"></div>
<div class="status_name">关机</div>
</div>
<div class="status_item">
<div class="status_tip red"></div>
<div class="status_name">故障/困料超时</div>
</div>
</div>
<div class="right_wrap">
<div class="machine_wrap mtp_wrap_1">
<div v-for="(e,i) in [1,2,3,4,5,6]" :key="i" class="mtp">
<img src="../../../images/workshop/mtp.png" alt="">
</div>
</div>
<div class="machine_wrap mtp_wrap_1 mtp_wrap_2">
<div v-for="(e,i) in [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]" :key="i" class="mtp">
<img src="../../../images/workshop/mtp.png" alt="">
</div>
</div>
<div class="machine_wrap gtssj_wrap_1">
<div v-for="(e,i) in [1,2,3,4,5]" :key="i" class="gtssj">
<img src="../../../images/workshop/gtssj.png" alt="">
</div>
</div>
<div class="machine_wrap cpj_wrap_1">
<div class="cpj">
<img src="../../../images/workshop/cpj.png" alt="">
</div>
</div>
<div class="machine_wrap yao_wrap">
<div class="yaosb">
<img src="../../../images/workshop/yao.png" alt="">
</div>
<div class="sh_machine yjbyx_1">
<img src="../../../images/workshop/yjbyx.png" alt="">
</div>
<div class="sh_machine yjbyx_2">
<img src="../../../images/workshop/yjbyx.png" alt="">
</div>
<div class="machine_wrap mtp_wrap_3">
<div v-for="(e,i) in [1,2,3,4]" :key="i" class="mtp">
<img src="../../../images/workshop/mtp.png" alt="">
</div>
</div>
<div class="machine_wrap mtp_wrap_3 mtp_wrap_4">
<div v-for="(e,i) in [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]" :key="i" class="mtp">
<img src="../../../images/workshop/mtp.png" alt="">
</div>
</div>
</div>
<div class="cmd_block">
<div class="machine_wrap cmd_wrap_1">
<div class="sh_machine kongtuopan_1">
<img src="../../../images/workshop/mtp.png" alt="">
</div>
<div class="sh_machine kongtuopan_2">
<img src="../../../images/workshop/mtp.png" alt="">
</div>
<div class="sh_machine robot_1">
<img src="../../../images/workshop/robot_4.png" alt="">
</div>
<div class="sh_machine weilan">
<img src="../../../images/workshop/weilan_5.png" alt="">
</div>
<div class="sh_machine fjfztb">
<img src="../../../images/workshop/fjfztb.png" alt="">
</div>
<div class="sh_machine guntssj_1">
<img src="../../../images/workshop/guntssj.png" alt="">
</div>
<div class="sh_machine guntssj_2">
<img src="../../../images/workshop/guntssj.png" alt="">
</div>
<div class="sh_machine robot_2">
<img src="../../../images/workshop/robot_4.png" alt="">
</div>
</div>
<div class="machine_wrap cmd_wrap_1 cmd_wrap_2">
<div class="sh_machine kongtuopan_1">
<img src="../../../images/workshop/mtp.png" alt="">
</div>
<div class="sh_machine kongtuopan_2">
<img src="../../../images/workshop/mtp.png" alt="">
</div>
<div class="sh_machine robot_1">
<img src="../../../images/workshop/robot_4.png" alt="">
</div>
<div class="sh_machine weilan">
<img src="../../../images/workshop/weilan_5.png" alt="">
</div>
<div class="sh_machine fjfztb">
<img src="../../../images/workshop/fjfztb.png" alt="">
</div>
<div class="sh_machine guntssj_1">
<img src="../../../images/workshop/guntssj.png" alt="">
</div>
<div class="sh_machine guntssj_2">
<img src="../../../images/workshop/guntssj.png" alt="">
</div>
<div class="sh_machine robot_2">
<img src="../../../images/workshop/robot_4.png" alt="">
</div>
</div>
<div class="machine_wrap liu_wrap">
<div class="sh_machine liu">
<img src="../../../images/workshop/liu.png" alt="">
</div>
</div>
</div>
</div>
</div>
<div class="n_right_content">
<div class="item_wrap">
<div class="item_tip item_tip_bg_s">
<div class="item_tip_left">设备运行情况</div>
</div>
<div class="item_content">
<div id="home_echart_4" style="width: 100%; height: 100%;"></div>
</div>
</div>
<div class="item_wrap">
<div class="item_tip item_tip_bg_s">
<div class="item_tip_left">近一月故障次数前5设备</div>
</div>
<div class="item_content">
<div id="home_echart_5" style="width: 100%; height: 100%;"></div>
</div>
</div>
<div class="item_wrap">
<div class="item_tip item_tip_bg_s">
<div class="item_tip_left">最近10次设备故障</div>
</div>
<div class="item_content">
<div class="scroll_wrap">
<ul class="scroll_tab_1">
<li>故障时间</li>
<li>设备编码</li>
<li>设备名称</li>
<li>故障信息</li>
<li>当前状态</li>
</ul>
<div class="scroll_container_1">
<vue-seamless-scroll :data="array1" :class-option="defaultOption1">
<ul class="scroll-ul_1">
<li v-for="(e, i) in array1" :key="i">
<div class="scroll-ul_1_div">{{e.time}}</div>
<div class="scroll-ul_1_div">{{e.code}}</div>
<div class="scroll-ul_1_div">{{e.name}}</div>
<div class="scroll-ul_1_div">{{e.info}}</div>
<div class="scroll-ul_1_div">{{e.status}}</div>
</li>
</ul>
</vue-seamless-scroll>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'two',
data () {
return {
myCharts1: '',
myCharts2: '',
array1: [{time: '12-01 09:09:09', code: 'hn01', name: '混碾01', info: '机械故障 ', status: '故障'}, {time: '12-01 09:09:09', code: 'hn01', name: '混碾01', info: '机械故障 ', status: '故障'}, {time: '12-01 09:09:09', code: 'hn01', name: '混碾01', info: '机械故障 ', status: '故障'}, {time: '12-01 09:09:09', code: 'hn01', name: '混碾01', info: '机械故障 ', status: '故障'}, {time: '12-01 09:09:09', code: 'hn01', name: '混碾01', info: '机械故障 ', status: '故障'}, {time: '12-01 09:09:09', code: 'hn01', name: '混碾01', info: '机械故障 ', status: '故障'}]
}
},
computed: {
defaultOption1 () {
return {
step: 0.4, // 数值越大速度滚动越快
limitMoveNum: 15, // 开始无缝滚动的数据量 this.dataList.length
hoverStop: true, // 是否开启鼠标悬停stop
direction: 1, // 0向下 1向上 2向左 3向右
openWatch: true, // 开启数据实时监控刷新dom
singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
waitTime: 1000 // 单步运动停止的时间(默认值1000ms)
}
}
},
mounted () {
this.setEchart1()
this.setEchart2()
},
methods: {
setEchart1 () {
let colors = ['#30EBC9', '#E2BB0E', '#516282', '#F96700']
let status = ['运行', '待机', '关机', '故障']
let barName = ['混料', '压制', '干燥', '包装']
let data = [[16, 14, 6, 9], [2, 1, 2, 3], [0, 0, 2, 2], [2, 1, 2, 3]]
let option = {
grid: {
top: 50,
left: 0,
right: 0,
bottom: 0,
containLabel: true
},
legend: {
textStyle: {
color: '#fff',
fontSize: 14,
lineHeight: 14
},
itemGap: 30.86,
itemWidth: 14.16,
itemHeight: 7.38,
data: status
},
color: colors,
xAxis: {
type: 'category',
axisTick: {
show: false
},
axisLine: {
show: true,
lineStyle: {
width: 2,
color: '#8FABBF'
}
},
axisLabel: {
interval: 0,
textStyle: {
color: '#8FABBF',
fontSize: 16
}
},
data: barName
},
yAxis: {
type: 'value',
axisLine: {
show: false
},
// splitNumber: 2,
axisTick: {
show: false
},
axisLabel: {
textStyle: {
color: '#8FABBF',
fontSize: 14
}
},
splitLine: {
show: true,
lineStyle: {
type: [8, 4],
dashOffset: 4,
color: '#8FABBF'
}
}
},
series: []
}
for (let j = 0; j < status.length; j++) {
option.series.push({
name: status[j],
type: 'bar',
stack: '总数',
barWidth: '20',
label: {
show: false,
position: 'insideRight'
},
data: data[j]
// itemStyle: {
// normal: {
// label: {
// show: true, // 开启显示
// position: 'top', // 在上方显示
// textStyle: {
// // 数值样式
// color: '#fff',
// fontSize: 14,
// fontWeight: 600
// }
// }
// }
// }
})
}
let echart = document.getElementById('home_echart_4')
if (this.myCharts1 !== '') {
this.myCharts1.dispose()
}
if (echart !== null) {
this.myCharts1 = this.$echarts.init(echart)
this.myCharts1.setOption(option)
window.addEventListener('resize', () => {
this.myCharts1.resize()
})
}
},
setEchart2 () {
let barName = ['机器5', '混碾5', '机器1', '混碾2', '压机1']
let barData = [6, 7, 8, 9, 10]
let maxNum = 0
for (let i = 0; i < barData.length; i++) {
if (barData[i] > maxNum) {
maxNum = barData[i]
}
}
var option = {
grid: {
top: 5,
left: 0,
right: 70,
bottom: 0,
containLabel: true
},
xAxis: {
show: false,
type: 'value'
},
yAxis: [{
type: 'category',
axisLabel: {
show: true,
textStyle: {
color: '#8FABBF', // y轴字体颜色
fontSize: '12'
}
},
splitLine: {
show: false
},
axisTick: {
show: false
},
axisLine: {
lineStyle: {
type: [8, 4],
dashOffset: 4,
color: '#3D5266', // y轴线颜色
opacity: 0.4
}
},
data: barName
}, {
type: 'category',
inverse: true,
axisTick: 'none',
axisLine: 'none',
show: false,
axisLabel: {
textStyle: {
color: '#ffffff',
fontSize: 12
},
formatter: function (value) {
return value + ' %'
}
},
data: barData
}],
series: [
{
name: '故障次数',
type: 'bar',
zlevel: 1,
itemStyle: {
normal: {
color: new this.$echarts.graphic.LinearGradient(1, 0, 0, 0, [
{
offset: 0,
color: '#B68845',
opacity: 1
},
{
offset: 1,
color: 'rgba(134,98,45,0.25)',
opacity: 0.25
}
]),
barBorderRadius: 0
}
},
barWidth: 10,
data: barData
},
{
type: 'bar',
barWidth: 10,
barGap: '-100%',
data: barData.map(function (item) {
return {
realValue: item,
value: maxNum
}
}),
label: {
show: true,
position: 'right',
distance: 70,
align: 'right',
formatter: function (params) {
return params.data.realValue + ' 台'
},
color: '#fff',
fontSize: 15
},
itemStyle: {
normal: {
color: 'rgba(255, 255, 255, 0)'
}
}
}
]
}
let echart = document.getElementById('home_echart_5')
if (this.myCharts2 !== '') {
this.myCharts2.dispose()
}
if (echart !== null) {
this.myCharts2 = this.$echarts.init(echart)
this.myCharts2.setOption(option)
window.addEventListener('resize', () => {
this.myCharts2.resize()
})
}
}
}
}
</script>
<style lang="stylus" scoped>
@import '~@css/mixin'
.n_container
_wh(100%, 100%)
.n_header
_wh(100%, 8%)
_bis('../../../images/bg_header.jpg')
.n_header_h1
_wh(100%, 100%)
_fj(row, flex-start)
_bis('../../../images/top_right.png',auto,,left)
h1
_font(32px, 1, #fff,,right)
padding-bottom 2%
letter-spacing 6px
font-family "阿里妈妈数黑体" !important
padding-left 3px
.n_body_container
_wh(100%, 92%)
padding 40px 20px 20px 0
_bis('../../../images/bg_content_r.jpg')
.n_body_container_wraper
_wh(100%, 100%)
_fj(row)
.n_left_content
position relative
_wh(calc(67% - 16px), 100%)
.n_right_content
_wh(33%, 100%)
background-color #070b1c
.item_wrap
_wh(100%, 33%)
+.item_wrap
margin-top .5%
.item_tip
_wh(100%, 32px)
line-height 32px
padding 0 10px
.item_tip_bg_s
_bis('../../../images/bg_title_s.png')
.item_tip_left
_wh(60%, 100%)
font-family "SourceHanSansCN"
_font(18px, inherit, #fff, 700, left)
letter-spacing 2px
text-shadow 0 0 9px #159AFF
padding-left 34px
_bis('../../../images/bg_title_tip.png', 22px, 22px, left)
.item_content
_wh(100%, calc(100% - 32px))
padding 10px 5px
.right_wrap
position relative
z-index 1
_wh(100%, 100%)
// _bis('../../../images/workshop/workshop_r.png')
.scroll_wrap
_wh(100%, 100%)
border 1px solid rgba(8,205,248,0.3)
.scroll_tab_1
_wh(100%, 40px)
border-bottom 1 solid rgba(8,205,248,0.3)
li
float left
width 20%
_font(14px,40px,#78B1DE,,center)
word-wrap break-word
word-break break-all
white-space nowrap
padding 0 5px
overflow hidden
box-sizing border-box
.scroll_container_1
width 100%
height calc(100% - 40px)
overflow hidden
.scroll-ul_1
li
_wh(100%, 44px)
border-bottom 1 solid rgba(8,205,248,0.3)
&:nth-child(even)
background rgba(1,24,52,0.60)
box-shadow inset 0px 1px 0px 0px rgba(13,89,115,0.3)
.scroll-ul_1_div
float left
_wh(20%, 44px)
_fj(row, center)
_font(14px, 16px, #fff,,center)
word-wrap break-word
word-break break-all
// white-space nowrap
padding 0 5px
overflow hidden
.status_wrap
position absolute
top -26px
right 40px
z-index 1
_fj(row)
.status_item
_fj(row)
+.status_item
margin-left 20px
.status_tip
_wh(15px, 15px)
border-radius 50%
margin-right 10px
box-shadow 0px 0px 4px 0px rgba(33,121,195,0.88)
.status_name
_font(16px, 1, #fff)
.green
background-color $green2
.yellow
background-color $yellow
.gray
background-color $gray1
.red
background-color $orange
.machine_wrap
position absolute
z-index 2
.sh_machine
position absolute
top 0
left 0
z-index 3
width 100%
img
position absolute
top 0
left 0
z-index 4
_wh(100%, auto)
.mtp_wrap_1
width 2.5%
top 9%
left 3%
.mtp
width 100%
img
_wh(100%, auto)
.mtp_wrap_2
top 30%
.gtssj_wrap_1
width 2.5%
top 30%
left 8%
.gtssj
width 100%
img
_wh(100%, auto)
.cpj_wrap_1
width 4.5%
top 33%
left 6.5%
.cpj
width 100%
img
_wh(100%, auto)
.yao_wrap
width 69%
top 6.5%
left auto
right 7%
background-color #676767
.yaosb
width 100%
img
_wh(100%, auto)
.yjbyx_1
width: 4%;
top: -2%;
left: 2%;
img
_wh(100%, auto)
.yjbyx_2
width: 4%;
top: -2%;
left: auto;
right: 2%;
img
_wh(100%, auto)
.mtp_wrap_3
width: 3.5%;
height: 10%;
top: 84%;
left: -0.8%;
transform rotate(-90deg)
z-index 4
.mtp
width 100%
margin-bottom 10%
img
_wh(100%, auto)
.mtp_wrap_4
left 13%
.cmd_block
width 40%
height 50%
position absolute
top: 35%;
left: 28%;
.cmd_wrap_1
width: 24%;
height: 36%;
top: 0
left: 0
.robot_1
width: 20%;
left: 38%;
top: -2%;
.kongtuopan_1
width 15%
height 13%
top 3%
left 3%
img
_wh(100%, 100%)
.kongtuopan_2
width 15%
height 13%
top 3%
left auto
right 3%
transform rotate(180deg)
img
_wh(100%, 100%)
.fjfztb
width: 44%;
height: 60%;
top: 27%;
left: 26%;
img
_wh(100%, 100%)
.weilan
width: 100%;
height: 53%;
top: auto;
bottom: -19%;
left: 0;
img
_wh(100%, 100%)
.guntssj_1
width: 26%;
height: 27%;
top: auto
left: 0;
bottom: -16%
img
_wh(100%, 100%)
.guntssj_2
width: 26%;
height: 27%;
top: auto;
left: auto;
right: 0;
bottom: -16%
img
_wh(100%, 100%)
.robot_2
width: 20%;
left: 38%;
top: auto;
bottom: 9%
.cmd_wrap_2
left 38%
.liu_wrap
width: 122%;
top: 43%;
left: -12%;
.liu
width: 100%;
top: 0;
left: 0;
img
_wh(100%, auto)
</style>