Files
screen-hl-one/src/pages/DeviceScreen.vue
2022-08-01 15:23:53 +08:00

1978 lines
56 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="container">
<div class="left_wrap">
<div class="item_wrap">
<div class="item_tip">
<div class="item_tip_left">设备实时状态</div>
</div>
<div class="item_5_l">
<div class="item_content_0">
<div id="echart_d01" style="width: 100%; height: 100%"></div>
</div>
<div class="total">
<div v-show="totalNum">{{totalNum}}<span></span></div>
</div>
<div v-show="totalNum" class="total-desc">设备总数</div>
</div>
<div class="item_5_r">
<div class="right_1_down_inner_3_i" v-for="(e, i) in arrR01" :key="i">
<div class="right_1_down_inner_3_l">
<span :style="{'background-color': e.color}"><i :style="{'background-color': e.color}"></i></span>
<span>{{e.name}}</span>
</div>
<div class="right_1_down_inner_3_r">
<span>{{e.value}}</span>
<span></span>
</div>
</div>
</div>
</div>
<div class="item_wrap">
<div class="item_tip">
<div class="item_tip_left">设备管理</div>
</div>
<div class="item_content_1">
<div class="item_content_1_inner">
<div class="item_content_1_inner_1">弯头工段</div>
<div class="item_content_1_inner_2 item_content_1_inner_2_bg">
<p class="item_content_1_inner_2_p1">OEE</p>
<p class="item_content_1_inner_2_p2">{{sbgl_jo1.oee}}</p>
</div>
<div class="item_content_1_inner_2 item_content_1_inner_2_bg">
<p class="item_content_1_inner_2_p1">MIBF</p>
<p class="item_content_1_inner_2_p2">{{sbgl_jo1.MIBF}}h</p>
</div>
<div class="item_content_1_inner_2 item_content_1_inner_2_bg">
<p class="item_content_1_inner_2_p1">MTTR</p>
<p class="item_content_1_inner_2_p2">{{sbgl_jo1.MTTR}}h</p>
</div>
<div class="item_content_1_inner_2">
<p class="item_content_1_inner_2_p1 cred">报警</p>
<p class="item_content_1_inner_2_p2 cred">{{sbgl_jo1.err_times}}</p>
</div>
</div>
<div class="item_content_1_inner">
<div class="item_content_1_inner_1">综合工段</div>
<div class="item_content_1_inner_2 item_content_1_inner_2_bg">
<p class="item_content_1_inner_2_p1">OEE</p>
<p class="item_content_1_inner_2_p2">{{sbgl_jo2.oee}}</p>
</div>
<div class="item_content_1_inner_2 item_content_1_inner_2_bg">
<p class="item_content_1_inner_2_p1">MIBF</p>
<p class="item_content_1_inner_2_p2">{{sbgl_jo2.MIBF}}h</p>
</div>
<div class="item_content_1_inner_2 item_content_1_inner_2_bg">
<p class="item_content_1_inner_2_p1">MTTR</p>
<p class="item_content_1_inner_2_p2">{{sbgl_jo2.MTTR}}h</p>
</div>
<div class="item_content_1_inner_2">
<p class="item_content_1_inner_2_p1 cred">报警</p>
<p class="item_content_1_inner_2_p2 cred">{{sbgl_jo2.err_times}}</p>
</div>
</div>
<div class="item_content_1_inner">
<div class="item_content_1_inner_1">成品工段</div>
<div class="item_content_1_inner_2 item_content_1_inner_2_bg">
<p class="item_content_1_inner_2_p1">OEE</p>
<p class="item_content_1_inner_2_p2">{{sbgl_jo3.oee}}</p>
</div>
<div class="item_content_1_inner_2 item_content_1_inner_2_bg">
<p class="item_content_1_inner_2_p1">MIBF</p>
<p class="item_content_1_inner_2_p2">{{sbgl_jo3.MIBF}}h</p>
</div>
<div class="item_content_1_inner_2 item_content_1_inner_2_bg">
<p class="item_content_1_inner_2_p1">MTTR</p>
<p class="item_content_1_inner_2_p2">{{sbgl_jo3.MTTR}}h</p>
</div>
<div class="item_content_1_inner_2">
<p class="item_content_1_inner_2_p1 cred">报警</p>
<p class="item_content_1_inner_2_p2 cred">{{sbgl_jo3.err_times}}</p>
</div>
</div>
</div>
</div>
<div class="item_wrap">
<div class="item_tip">
<div class="item_tip_left">设备产能利用</div>
</div>
<div class="item_content_1">
<div id="echart_d02" style="width: 100%; height: 100%"></div>
</div>
</div>
</div>
<div class="center_wrap">
<div class="item_wrap_1 inlblock">
<div class="item_tip item_tip_01">
<div class="item_tip_left">设备综合效率OEE&产能利用效率TEEP</div>
</div>
<div class="item_content_1">
<div id="echart_d03" style="width: 100%; height: 100%"></div>
</div>
</div>
<div class="item_wrap_1 inlblock">
<div class="item_tip item_tip_01">
<div class="item_tip_left">运行设备大类产能比</div>
</div>
<div class="item_content_1">
<div id="echart_d04" style="width: 100%; height: 100%"></div>
</div>
</div>
<div class="item_wrap_2 item_wrap_3">
<div class="item_tip item_tip_2">
<div class="item_tip_left">设备综合统计</div>
</div>
<div class="item_content_1">
<div id="echart_d05" style="width: 100%; height: 100%"></div>
</div>
</div>
<div class="item_wrap_2">
<div class="item_tip item_tip_2">
<div class="item_tip_left">设备状态列表</div>
</div>
<div class="item_content_2">
<div class="scroll_wrap">
<ul class="scroll_tab_1">
<li>设备编号</li>
<li>设备名称</li>
<li>设备大类</li>
<li>设备状态</li>
<!-- <li>产量</li> -->
<li>开机时间</li>
<li>关机时间</li>
<!-- <li>生产日期</li> -->
</ul>
<div class="scroll_container_1 scroll_container_3" v-show="array1.length">
<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.device_code}}</div>
<div class="scroll-ul_1_div">{{e.device_name}}</div>
<div class="scroll-ul_1_div">{{e.workprocedure_name}}</div>
<div class="scroll-ul_1_div scroll-ul_1_div4"><span :style="{'background-color': e.color}"></span><i>{{e.device_status}}</i></div>
<!-- <div class="scroll-ul_1_div">{{e.product_qty}}</div> -->
<div class="scroll-ul_1_div">{{e.start_time}}</div>
<div class="scroll-ul_1_div">{{e.end_time}}</div>
<!-- <div class="scroll-ul_1_div">{{e.product_time}}</div> -->
</li>
</ul>
</vue-seamless-scroll>
</div>
</div>
</div>
</div>
</div>
<div class="right_wrap">
<div class="item_wrap">
<div class="item_tip">
<div class="item_tip_left">设备TOP10故障次数</div>
</div>
<div class="item_content_1">
<div id="echart_d08" style="width: 100%; height: 100%"></div>
</div>
</div>
<div class="item_wrap">
<div class="item_tip">
<div class="item_tip_left">设备报警信息</div>
</div>
<div class="item_content_4">
<div class="scroll_wrap">
<ul class="scroll_tab_2">
<li>编号</li>
<li>名称</li>
<li>报警原因</li>
<li>报警时间</li>
</ul>
<div class="scroll_container_2">
<vue-seamless-scroll :data="array2" :class-option="defaultOption2">
<ul class="scroll-ul_2">
<li v-for="(e, i) in array2" :key="i">
<div class="scroll-ul_2_div">{{e.device_code}}</div>
<div class="scroll-ul_2_div">{{e.device_name}}</div>
<div class="scroll-ul_2_div">{{e.err_name}}</div>
<div class="scroll-ul_2_div">{{e.start_time}}</div>
</li>
</ul>
</vue-seamless-scroll>
</div>
</div>
</div>
</div>
<div class="item_wrap">
<div class="item_tip">
<div class="item_tip_left">近10天设备故障统计</div>
</div>
<!-- <div class="item_content_5">
<div id="echart_d4" style="width: 100%; height: 100%"></div>
</div> -->
<div class="item_content_1">
<div id="echart_d10" style="width: 100%; height: 100%"></div>
</div>
</div>
</div>
</div>
</template>
<script>
import {deviceStatus, oeeAndTeep, queryDeviceByWork, deviceErrorNum, deviceManage, deviceCensus, deviceErrorInfo, deviceUseRate, deviceStatusList, errCensus} from '@js/getData1.js'
import * as echarts from 'echarts'
export default {
name: 'DeviceScreen',
data () {
return {
interTime: this.$store.getters.setTime,
timer1: null,
timer2: null,
timer4: null,
timeOut1: null,
timeOut2: null,
timeOut3: null,
totalNum: '',
// arrR01: [
// {
// color: '#2D7CEB',
// name: '正常运行',
// value: '10'
// },
// {
// color: '#07E083',
// name: '暂未生产',
// value: '20'
// },
// {
// color: '#00D5FF',
// name: '空闲设备',
// value: '30'
// },
// {
// color: '#CC6060',
// name: '故障设备',
// value: '40'
// }
// ],
arrR01: [],
data01: [{value: 500, name: '正常运行'}, {value: 300, name: '暂未生产'}, {value: 200, name: '空闲设备'}, {value: 100, name: '故障设备'}],
sbgl_jo1: {},
sbgl_jo2: {},
sbgl_jo3: {},
data03: '',
chartData1: [],
chartData2: [],
// chartData1: [
// {
// teep: '31',
// workprocedure_name: 'D001'
// },
// {
// teep: '22',
// workprocedure_name: 'D002'
// },
// {
// teep: '10',
// workprocedure_name: 'D003'
// },
// {
// teep: '38',
// workprocedure_name: 'D004'
// },
// {
// teep: '15',
// workprocedure_name: 'D005'
// },
// {
// teep: '66',
// workprocedure_name: 'D006'
// },
// {
// teep: '77',
// workprocedure_name: 'D007'
// }
// ],
// chartData2: [
// {
// err_times: '21',
// device_name: 'SBGZ0001'
// },
// {
// err_times: '32',
// device_name: 'SBGZ0002'
// },
// {
// err_times: '60',
// device_name: 'SBGZ0003'
// },
// {
// err_times: '78',
// device_name: 'SBGZ0004'
// },
// {
// err_times: '12',
// device_name: 'SBGZ0005'
// },
// {
// err_times: '6',
// device_name: 'SBGZ0006'
// },
// {
// err_times: '88',
// device_name: 'SBGZ0007'
// }
// ],
xData: ['无屑下料机', '三通成型机', '推弯一体机', 'L22-35货压机'], // 横坐标
yData: [23, 24, 18, 25], // 人数数据
taskDate: [10, 11, 9, 17],
taskDate2: [15, 19, 3, 23],
data05_d0: [],
data05_d1: [],
data05_d2: [],
data05_d3: [],
data05_d4: [],
data06_d0: [],
data06_d1: [],
timer: null,
time: '',
hours: '',
minutes: '',
seconds: '',
date: '',
week: '',
myCharts01: '',
myCharts02: '',
myCharts03: '',
myCharts04: '',
myCharts05: '',
myCharts08: '',
myCharts10: '',
myCharts2: '',
myCharts3: '',
myCharts4: '',
// array1: [{material_code: '001'}, {material_code: '001'}, {material_code: '001'}, {material_code: '001'}, {material_code: '001'}, {material_code: '001'}],
// array2: [{material_code: '01'}, {material_code: '01'}, {material_code: '01'}, {material_code: '01'}],
array1: [],
array2: []
}
},
computed: {
defaultOption1 () {
return {
step: 0.4, // 数值越大速度滚动越快
limitMoveNum: 5, // 开始无缝滚动的数据量 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)
}
},
defaultOption2 () {
return {
step: 0.4, // 数值越大速度滚动越快
limitMoveNum: 5, // 开始无缝滚动的数据量 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)
}
}
},
// created () {
// this.refresh()
// },
mounted () {
this.refresh()
setTimeout(() => {
this.$router.push('/MonitoringScreen')
}, 5000)
},
beforeDestroy () {
this.$once('hook:beforeDestroy', () => {
clearInterval(this.timer1)
clearInterval(this.timer2)
clearInterval(this.interTime)
clearInterval(this.timeOut1)
clearInterval(this.timeOut2)
clearInterval(this.timeOut3)
})
},
methods: {
initData () {
this._deviceStatus()
this._deviceManage()
this._deviceUseRate()
this._oeeAndTeep()
this._queryDeviceByWork() // gun
this._deviceCensus()
this._deviceStatusList() // 中grid
this._deviceErrorNum()
this._deviceErrorInfo() // 右grid
},
refresh () {
this.initData()
this._errCensus() // 右下
this.timer2 = setInterval(() => {
this.initData()
}, this.interTime)
this.timer1 = setInterval(() => {
this._errCensus()
}, 60000)
},
fontSize (res) {
const clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth
if (!clientWidth) return
let fontSize = clientWidth * res / 1920
return fontSize
},
updateTime () {
let cd = new Date()
let year = cd.getFullYear()
let month = cd.getMonth() + 1 < 10 ? '0' + (cd.getMonth() + 1) : cd.getMonth() + 1
let date = cd.getDate() < 10 ? '0' + cd.getDate() : cd.getDate()
let hh = cd.getHours() < 10 ? '0' + cd.getHours() : cd.getHours()
let mm = cd.getMinutes() < 10 ? '0' + cd.getMinutes() : cd.getMinutes()
let ss = cd.getSeconds() < 10 ? '0' + cd.getSeconds() : cd.getSeconds()
var weekday = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
let myddy = new Date().getDay()
let week = weekday[myddy]
this.time = `${hh}:${mm}:${ss}`
this.hours = `${hh}`
this.minutes = `${mm}`
this.seconds = `${ss}`
this.date = `${year}${month}${date}`
this.week = `${week}`
},
setEchart08 () {
var dataLine = this.data06_d1
let numMax = Math.max.apply(null, dataLine)
let manNum = numMax + 1
let positionLeft = 0.4
let max = manNum + 2 * positionLeft
// var dataLine = [5, 66, 33, 25, 10]
// let positionLeft = 0.4
// let max = 100 + 2 * positionLeft
var option = {
grid: [
{
left: '8%',
top: '5%',
right: '5%',
bottom: '0%',
containLabel: true
},
{
left: '10%',
top: '5%',
right: '5%',
bottom: '0%',
containLabel: true
}
],
xAxis: [{
max: max,
show: false
}],
yAxis: [
{
axisTick: 'none',
axisLine: 'none',
offset: '5',
axisLabel: {
textStyle: {
color: '#8FABBF', // y轴字体颜色
fontSize: '12'
}
},
data: this.data06_d0
// data: ['设备01', '设备02', '设备03', '设备04', '设备05']
},
{
axisTick: 'none',
axisLine: 'none',
show: false,
axisLabel: {
textStyle: {
color: '#ffffff',
fontSize: '12'
}
},
data: [1, 1, 1, 1]
},
{
axisLine: {
lineStyle: {
type: [8, 4],
dashOffset: 4,
// color: 'rgba(0,0,0,0)' // y轴线颜色
color: '#3D5266', // y轴线颜色
opacity: 0.4
}
},
data: []
},
{
// 设置柱状图右边参数
show: true,
inverse: true,
data: [],
axisLine: {
show: false
},
splitLine: {
show: false
},
axisTick: {
show: false
}
}
],
series: [
{
name: '条',
type: 'bar',
stack: 'b',
yAxisIndex: 0,
data: dataLine,
barGap: '400%', // 柱图间距
label: {
normal: {
show: false,
position: 'right',
distance: 2,
formatter: function (param) {
return param.value + '%'
},
textStyle: {
color: '#ffffff',
fontSize: '16'
}
}
},
barWidth: 8,
// itemStyle: {
// normal: {
// color: new echarts.graphic.LinearGradient(
// 1, 0, 0, 0,
// [
// {offset: 0, color: '#FF0000'},
// {offset: 1, color: '#FF7744'}
// ]
// ),
// barBorderRadius: 0
// }
// },
itemStyle: {
normal: {
color: new 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
}
},
z: 2
},
{
name: '外框',
type: 'bar',
yAxisIndex: 2,
barGap: '-100%',
data: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100],
barWidth: 23,
label: {
normal: {
show: true,
position: 'right',
distance: 2,
color: '#ffffff',
formatter: function (data) {
return dataLine[data.dataIndex] + '次'
}
}
},
itemStyle: {
normal: {
// color: '#ffffff',
color: '#00000000', // #8个f代表黑色全透明
barBorderRadius: 0
}
},
z: 0
}
]
}
let echart = document.getElementById('echart_d08')
this.myCharts08 = this.$echarts.init(echart)
this.myCharts08.setOption(option)
window.addEventListener('resize', () => {
this.myCharts08.resize()
})
},
setEchart01 () {
let data = this.data01
var option = {
// legend: {
// orient: 'vertical',
// right: 0,
// data: ['正常运行', '暂未生产', '空闲设备', '故障设备'],
// textStyle: {
// color: '#ffffff',
// fontSize: '12'
// }
// },
color: ['#0966E8', '#07E083', '#00D5FF', '#CC6060'],
series: [
{
type: 'pie',
radius: ['50%', '70%'],
label: {
formatter: ''
},
labelLine: {
show: false
},
data: data
}
]
}
let echart = document.getElementById('echart_d01')
this.myCharts01 = this.$echarts.init(echart)
this.myCharts01.setOption(option)
window.addEventListener('resize', () => {
this.myCharts01.resize()
})
},
setEchart04 () {
// 多列柱状图
// 到外面壳边框的距离
let option = {
dataZoom: [
{
show: false, // 为true滚动条出现
type: 'slider', // type:'inside',滚动条在最下面,鼠标点击滚动
startValue: 0, // 从头开始。
endValue: 2 // end百分比显示范围endValue具体显示几个数值
}
],
grid: {
top: this.fontSize(50),
left: 0,
right: this.fontSize(25),
bottom: 0,
containLabel: true
},
// 图例
legend: {
// icon: 'rect',
textStyle: {
color: '#fff',
fontSize: 14,
lineHeight: 14
},
itemGap: 30.86,
itemWidth: 14.16,
itemHeight: 7.38,
data: [{name: '最大产能', itemStyle: {color: '#0E90FD'}}, {name: '平均产能', itemStyle: {color: '#33CCCC'}}, {name: '最小产能', itemStyle: {color: '#EAAD24'}}]
},
xAxis: {
type: 'category',
axisTick: {
show: false
},
axisLine: {
show: true,
lineStyle: {
width: 2,
color: '#8FABBF'
}
},
axisLabel: {
interval: 0,
textStyle: {
color: '#8FABBF',
fontSize: 14
}
},
data: this.xData
},
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',
opacity: 0.2
}
}
},
series: [
{
type: 'bar', // 形状为柱状图
data: this.yData,
name: '最大产能', // legend属性
barGap: '150%', // 柱图间距
barWidth: '8', // 柱图宽度
itemStyle: {
normal: {
show: true,
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 1,
color: 'rgba(96,112,128,0.10)',
opacity: 1
},
{
offset: 0,
color: '#0E90FD',
opacity: 0.1
}
])
}
}
},
{
type: 'line', // 形状为折线图
data: this.taskDate2,
name: '最小产能', // legend属性
barGap: '150%', // 柱图间距
barWidth: '8', // 柱图宽度
itemStyle: {
normal: {
show: true,
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#B68845',
opacity: 1
},
{
offset: 1,
color: 'rgba(134,98,45,0.25)',
opacity: 0.25
}
])
}
}
},
{
type: 'bar', // 形状为柱状图
data: this.taskDate,
name: '平均产能', // legend属性
barGap: '150%', // 柱图间距
barWidth: '8', // 柱图宽度
itemStyle: {
normal: {
show: true,
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#33CCCC',
opacity: 1
},
{
offset: 1,
color: 'rgba(31,89,89,0.25)',
opacity: 0.25
}
])
}
}
}
]
}
let echart = document.getElementById('echart_d04')
this.myCharts04 = this.$echarts.init(echart)
this.myCharts04.setOption(option)
this.autoMove(option, 1)
window.addEventListener('resize', () => {
this.myCharts04.resize()
})
},
setEchart03 () {
let d03 = this.data03
let data1 = [d03.oee.value1, d03.teep.value1]
let data2 = [d03.oee.value2, d03.teep.value2]
let data3 = [d03.oee.value3, d03.teep.value3]
// let data1 = [50, 80]
// let data2 = [50, 69]
// let data3 = [25, 88]
let option = {
grid: {
top: 50,
left: 0,
right: 0,
bottom: 0,
containLabel: true
},
legend: {
icon: 'rect',
textStyle: {
color: '#fff',
fontSize: 14,
lineHeight: 14
},
itemGap: 30.86,
itemWidth: 14.16,
itemHeight: 7.38,
data: [{name: '过去一个月', itemStyle: {color: '#0E90FD'}}, {name: '目标', itemStyle: {color: '#33CCCC'}}, {name: '实际', itemStyle: {color: '#EAAD24'}}]
},
xAxis: {
type: 'category',
axisTick: {
show: false
},
axisLine: {
show: true,
lineStyle: {
width: 2,
color: '#8FABBF'
}
},
axisLabel: {
interval: 0,
textStyle: {
color: '#8FABBF',
fontSize: 14
}
},
data: ['设备综合效率OEE', '产能利用效率TEEP']
},
yAxis: {
type: 'value',
axisLine: {
show: false
},
splitNumber: 2,
axisTick: {
show: false
},
axisLabel: {
formatter: '{value} %',
textStyle: {
color: '#8FABBF',
fontSize: 14
}
},
splitLine: {
show: true,
lineStyle: {
type: [8, 4],
dashOffset: 4,
color: '#8FABBF',
opacity: 0.2
}
}
},
series: [
{
name: '过去一个月',
type: 'bar',
barGap: '400%', // 柱图间距
barWidth: '8', // 柱图宽度
itemStyle: {
normal: {
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 1,
color: 'rgba(96,112,128,0.10)',
opacity: 1
},
{
offset: 0,
color: '#0E90FD',
opacity: 0.1
}
])
}
},
label: {
// 柱状图上方文本标签,默认展示数值信息
show: true,
position: 'top',
textStyle: {
color: '#8FABBF',
fontSize: 14
},
formatter: function (data) {
return data.value + '%'
}
},
data: data1
},
{
name: '目标',
type: 'bar',
barGap: '400%', // 柱图间距
barWidth: '8', // 柱图宽度
itemStyle: {
normal: {
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#33CCCC',
opacity: 1
},
{
offset: 1,
color: 'rgba(31,89,89,0.25)',
opacity: 0.25
}
])
}
},
label: {
// 柱状图上方文本标签,默认展示数值信息
show: true,
position: 'top',
textStyle: {
color: '#8FABBF',
fontSize: 14
},
formatter: function (data) {
return data.value + '%'
}
},
data: data2
},
{
name: '实际',
type: 'bar',
barGap: '400%', // 柱图间距
// barCategoryGap: '10%',
barWidth: '8', // 柱图宽度
itemStyle: {
normal: {
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#B68845',
opacity: 1
},
{
offset: 1,
color: 'rgba(134,98,45,0.25)',
opacity: 0.25
}
])
}
},
label: {
// 柱状图上方文本标签,默认展示数值信息
show: true,
position: 'top',
textStyle: {
color: '#8FABBF',
fontSize: 14
},
formatter: function (data) {
return data.value + '%'
}
},
data: data3
}
]
}
let echart = document.getElementById('echart_d03')
this.myCharts03 = this.$echarts.init(echart)
this.myCharts03.setOption(option)
window.addEventListener('resize', () => {
this.myCharts03.resize()
})
},
setEchart05 () {
let option = {
grid: {
top: 50,
left: 0,
right: 0,
bottom: 0,
containLabel: true
},
legend: {
icon: 'rect',
textStyle: {
color: '#fff',
fontSize: 14,
lineHeight: 14
},
itemGap: 30.86,
itemWidth: 14.16,
itemHeight: 7.38,
data: [{name: '运行设备', itemStyle: {color: '#0E90FD'}}, {name: '暂未生产设备', itemStyle: {color: '#07E083'}}, {name: '关机设备', itemStyle: {color: '#EAAD24'}}, {name: '故障设备', itemStyle: {color: '#CC6060'}}]
},
xAxis: {
type: 'category',
axisTick: {
show: false
},
axisLine: {
show: true,
lineStyle: {
width: 2,
color: '#8FABBF'
}
},
axisLabel: {
interval: 0,
textStyle: {
color: '#8FABBF',
fontSize: 14
}
},
data: this.data05_d0
// data: ['无屑下料机1', '无屑下料机1', '无屑下料机1', '无屑下料机1', '无屑下料机1', '无屑下料机1']
},
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',
opacity: 0.2
}
}
},
series: [
{
name: '运行设备',
type: 'bar',
barWidth: '8',
barGap: '100%', // 柱图间距
itemStyle: {
normal: {
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 1,
color: 'rgba(96,112,128,0.10)',
opacity: 1
},
{
offset: 0,
color: '#0E90FD',
opacity: 0.1
}
])
}
},
data: this.data05_d1
// data: ['390', '390', '390', '390', '390', '390']
},
{
name: '暂未生产设备',
type: 'bar',
barWidth: '8',
barGap: '100%', // 柱图间距
itemStyle: {
normal: {
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#07E083',
opacity: 1
},
{
offset: 1,
color: 'rgba(31,89,89,0.25)',
opacity: 0.25
}
])
}
},
data: this.data05_d2
// data: ['230', '230', '230', '230', '230', '230']
},
{
name: '关机设备',
type: 'bar',
barWidth: '8',
barGap: '100%', // 柱图间距
itemStyle: {
normal: {
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#B68845',
opacity: 1
},
{
offset: 1,
color: 'rgba(134,98,45,0.25)',
opacity: 0.25
}
])
}
},
data: this.data05_d3
// data: ['210', '210', '210', '210', '210', '210']
},
{
name: '故障设备',
type: 'bar',
barWidth: '8',
barGap: '100%', // 柱图间距
itemStyle: {
normal: {
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#CC6060',
opacity: 1
},
{
offset: 1,
color: 'rgba(123,33,33,0.25)',
opacity: 0.25
}
])
}
},
data: this.data05_d4
// data: ['110', '110', '110', '110', '110', '110']
}
]
}
let echart = document.getElementById('echart_d05')
this.myCharts05 = this.$echarts.init(echart)
this.myCharts05.setOption(option)
window.addEventListener('resize', () => {
this.myCharts05.resize()
})
},
setEchart02 () {
// 左3
let total = []
let names = []
let max = 0
this.chartData1.map(el => {
total.push(el.teep)
names.push(el.workprocedure_name)
max = Math.max(max, Number(el.teep))
})
let option = {
dataZoom: [
{
show: false, // 为true滚动条出现
type: 'slider', // type:'inside',滚动条在最下面,鼠标点击滚动
startValue: 0, // 从头开始。
endValue: 8 // end百分比显示范围endValue具体显示几个数值
}
],
grid: {
top: 30,
left: 0,
right: 0,
bottom: 0,
borderColor: '#ffffff',
containLabel: true
},
xAxis: {
type: 'category',
axisTick: {
show: false
},
axisLine: {
lineStyle: {
color: '#8FABBF ',
fontSize: 14,
lineHeight: 14
}
},
axisLabel: {
color: '#8FABBF ',
rotate: 50
},
data: names
},
yAxis: {
axisTick: {
show: false
},
axisLine: {
lineStyle: {
color: '#909399'
}
},
// axisLabel: {
// color: '#909399'
// },
axisLabel: {
formatter: '{value} %',
textStyle: {
color: '#8FABBF',
fontSize: 14
}
},
splitLine: {
show: false,
lineStyle: {
type: [8, 4],
dashOffset: 4,
color: '#8FABBF',
opacity: 0.2
}
},
max: max
},
series: [
{
type: 'bar',
barWidth: 8,
itemStyle: {
normal: {
show: true,
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#0E90FD',
opacity: 1
},
{
offset: 1,
color: 'rgba(96,112,128,0.10)',
opacity: 0.1
}
]),
borderWidth: 0
}
},
// data: [100, 51, 90, 41, 91, 61, 51]
data: total,
label: {
show: true,
position: 'top',
// distance: 5,
// fontSize: 12,
textStyle: {
color: '#8FABBF',
fontSize: 14
},
formatter: function (data) {
return data.value + '%'
}
}
}
]
}
let echart = document.getElementById('echart_d02')
this.myCharts02 = this.$echarts.init(echart)
this.myCharts02.setOption(option)
this.autoMove(option, 2)
window.addEventListener('resize', () => {
this.myCharts02.resize()
})
},
setEchart10 () {
// 右3
let total = []
let names = []
let max = 0
this.chartData2.map(el => {
total.push(el.err_times)
names.push(el.device_name)
max = Math.max(max, Number(el.err_times))
})
let option = {
dataZoom: [
{
show: false, // 为true滚动条出现
type: 'slider', // type:'inside',滚动条在最下面,鼠标点击滚动
startValue: 0, // 从头开始。
endValue: 9 // end百分比显示范围endValue具体显示几个数值
}
],
grid: {
top: 30,
left: 0,
right: 0,
bottom: 0,
borderColor: '#ffffff',
containLabel: true
},
xAxis: {
type: 'category',
axisTick: {
show: false
},
axisLine: {
lineStyle: {
color: '#8FABBF ',
fontSize: 14,
lineHeight: 14
}
},
axisLabel: {
color: '#8FABBF ',
rotate: 50
},
data: names
},
yAxis: {
axisTick: {
show: false
},
axisLine: {
lineStyle: {
color: '#909399'
}
},
axisLabel: {
color: '#909399'
},
splitLine: {
show: false,
lineStyle: {
type: [8, 4],
dashOffset: 4,
color: '#8FABBF',
opacity: 0.2
}
},
max: max
},
series: [
{
type: 'bar',
barWidth: 8,
itemStyle: {
normal: {
show: true,
// color: '#67c23a',
color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: '#0E90FD',
opacity: 1
},
{
offset: 1,
color: 'rgba(96,112,128,0.10)',
opacity: 0.1
}
]),
borderWidth: 0
}
},
// data: [100, 51, 90, 41, 91, 61, 51]
data: total
}
]
}
let echart = document.getElementById('echart_d10')
this.myCharts10 = this.$echarts.init(echart)
this.myCharts10.setOption(option)
this.autoMove(option, 3)
window.addEventListener('resize', () => {
this.myCharts10.resize()
})
},
autoMove (option, type) {
if (type === 1) {
this.timeOut1 = setInterval(() => {
if (Number(option.dataZoom[0].endValue) === option.series[0].data.length - 1) {
option.dataZoom[0].endValue = 2
option.dataZoom[0].startValue = 0
} else {
option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1
option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1
}
this.myCharts04.setOption(option)
}, 5000)
}
if (type === 2) {
this.timeOut2 = setInterval(() => {
if (Number(option.dataZoom[0].endValue) === option.series[0].data.length - 1) {
option.dataZoom[0].endValue = 8
option.dataZoom[0].startValue = 0
} else {
option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1
option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1
}
this.myCharts02.setOption(option)
}, 5000)
}
if (type === 3) {
this.timeOut3 = setInterval(() => {
if (Number(option.dataZoom[0].endValue) === option.series[0].data.length - 1) {
option.dataZoom[0].endValue = 9
option.dataZoom[0].startValue = 0
} else {
option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1
option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1
}
this.myCharts10.setOption(option)
}, 5000)
}
},
/** 左1 */
async _deviceStatus () {
let res = await deviceStatus()
if (res.code === '1') {
this.totalNum = res.result.total_num
this.data01 = res.result.ja
let colors = ['#2D7CEB', '#07E083', '#00D5FF', '#CC6060']
res.result.ja.map((e, i) => {
this.$set(e, 'color', colors[i])
})
this.arrR01 = [...res.result.ja]
this.setEchart01() // 左1
} else {
this.Dialog(res.desc)
}
},
/** 左2 */
async _deviceManage () {
let res = await deviceManage()
if (res.code === '1') {
this.sbgl_jo1 = res.result.jo1
this.sbgl_jo2 = res.result.jo2
this.sbgl_jo3 = res.result.jo3
} else {
this.Dialog(res.desc)
}
},
/** 左3 */
async _deviceUseRate () {
let res = await deviceUseRate()
if (res.code === '1') {
this.chartData1 = res.result
if (res.result.length) {
clearInterval(this.timeOut2)
this.setEchart02() // 左3
}
// this.setEchart02() // 左3
} else {
this.Dialog(res.desc)
}
},
/** 中1 */
async _oeeAndTeep () {
let res = await oeeAndTeep()
if (res.code === '1') {
this.data03 = res.result
this.setEchart03() // 中1
} else {
this.Dialog(res.desc)
}
},
/** 中2 */
async _queryDeviceByWork () {
let res = await queryDeviceByWork()
if (res.code === '1') {
this.xData = []
this.yData = []
this.taskDate = []
this.taskDate2 = []
res.result.map((e, i) => {
this.xData.push(e.workprocedure_name)
this.yData.push(e.max_productivity)
this.taskDate.push(e.ave_productivity)
this.taskDate2.push(e.min_productivity)
})
if (res.result.length) {
clearInterval(this.timeOut1)
this.setEchart04() // 中2
}
} else {
this.Dialog(res.desc)
}
},
/** 中3 */
async _deviceCensus () {
let res = await deviceCensus()
if (res.code === '1') {
this.data05_d0 = []
this.data05_d1 = []
this.data05_d2 = []
this.data05_d3 = []
this.data05_d4 = []
res.result.map((e, i) => {
this.data05_d0.push(e.workprocedure_name)
this.data05_d1.push(e.run_device)
this.data05_d2.push(e.prepare_device)
this.data05_d3.push(e.free_device)
this.data05_d4.push(e.err_device)
})
this.setEchart05() // 中3
} else {
this.Dialog(res.desc)
}
},
/** 中4 */
async _deviceStatusList () {
let res = await deviceStatusList()
if (res.code === '1') {
// let colors = ['#2D7CEB', '#07E083', '#00D5FF', '#CC6060', '#fc0']
res.result.map((e, i) => {
if (e.device_status === '02') {
this.$set(e, 'color', '#2D7CEB')
}
if (e.device_status === '03') {
this.$set(e, 'color', '#07E083')
}
if (e.device_status === '04') {
this.$set(e, 'color', '#00D5FF')
}
if (e.device_status === '05') {
this.$set(e, 'color', '#CC6060')
}
if (e.device_status === '') {
this.$set(e, 'color', '#fc0')
}
})
this.array1 = res.result
} else {
this.Dialog(res.desc)
}
},
/** 右1 */
async _deviceErrorNum () {
let res = await deviceErrorNum()
if (res.code === '1') {
this.data06_d0 = []
this.data06_d1 = []
res.result.map((e, i) => {
this.data06_d0.push(e.device_name)
this.data06_d1.push(e.err_num)
})
this.setEchart08() // 右1
} else {
this.Dialog(res.desc)
}
},
/** 右2 */
async _deviceErrorInfo () {
let res = await deviceErrorInfo()
if (res.code === '1') {
this.array2 = res.result
} else {
this.Dialog(res.desc)
}
},
/** 右3 */
async _errCensus () {
let res = await errCensus()
if (res.code === '1') {
this.chartData2 = res.result
if (res.result.length) {
clearInterval(this.timeOut3)
this.setEchart10() // 右3
}
// this.setEchart10() // 右3
} else {
this.Dialog(res.desc)
}
}
}
}
</script>
<style lang="stylus" scoped>
@import '~@css/mixin'
.bg
_wh(100%, 100%)
background #050d20 center center / 100% 100% url(../assets/images/screen1/bg.png) no-repeat
overflow hidden
header
width 100%
height 1rem
position relative
background center center / 100% 100% url(../assets/images/screen1/header.png) no-repeat
p
font-family "PangMenZhengDao"
_font(.48rem, 1rem, #ffffff, lighter, center)
letter-spacing .05rem
text-shadow 0 .08rem .08rem rgba(0,0,0,0.30)
.data_box
position absolute
right 0
top .14rem
height .37rem
.date, .week
padding-right .2rem
.time
width 1.7rem
text-align center
.date_item
float left
_font(.2rem, .37rem, #fff,,)
.tiem_item
float left
_font(.32rem, .37rem, #fff,,)
.colon
float left
_font(.32rem, .37rem, #fff,,)
.container
_wh(100%, calc(100% - 1.38rem))
padding .3rem .2509rem 0
overflow hidden
clear both
.bottom
_wh(100%, .38rem)
background center bottom / 19.06rem 100% url(../assets/images/screen1/bottom.png) no-repeat
.left_wrap
float left
_wh(4.0756rem, 100%)
.center_wrap
float left
// _wh(9.96rem, 100%)
_wh(10rem, 100%)
margin-left .2936rem
// padding .4rem .16rem
.right_wrap
float right
_wh(4.0273rem, 100%)
.item_wrap
_wh(100%, calc(100% / 3))
.item_tip
clear both
_wh(100%, .32rem)
line-height .32rem
background center center / 100% 100% url(../assets/images/screen1/title_bg_1.png) no-repeat
.item_tip_01
width 100%
background center center / 100% 100% url(../assets/images/screen1/title_bg_d1.png) no-repeat
.item_tip_2
background center center / 100% 100% url(../assets/images/screen1/title_bg_d2.png) no-repeat
.item_tip_left
float left
// _wh(60%, 100%)
_wh(100%, 100%)
font-family "SourceHanSansCN"
_font(.18rem, inherit, #fff, 700,)
letter-spacing .02rem
text-shadow 0 0 .09rem #159AFF
padding-left .38rem
.item_content_0
width 2.2rem
height 2.2rem
// _fj(space-around)
// padding .17rem 0 .24rem
.item_content_1
_wh(100%, calc(100% - .32rem))
_fj(space-around)
padding .17rem 0 .24rem
.item_content_1_inner
_wh(1.2rem, 100%)
background-color #011834
.item_content_1_inner_1
_wh(100%, .37rem)
font-family "SourceHanSansCN"
_font(.14rem, .37rem, #78B1DE, 700, center)
letter-spacing .02rem
background center center / 100% 100% url(../assets/images/screen1/item_1.png) no-repeat
.item_content_1_inner_2
_wh(100%, calc((100% - .37rem) / 4))
// overflow hidden
// _fj(space-evenly)
// flex-direction column
padding-top .06rem
.item_content_1_inner_2_bg
background center bottom / 1.02rem .03rem url(../assets/images/screen1/line_1.png) no-repeat
.item_content_1_inner_2_p1
float left
margin 0.17rem 0 0 0.08rem
font-family "SourceHanSansCN"
_font(.14rem, .14rem, #84B0DA, 700, left)
.item_content_1_inner_2_p2
float right
margin 0.15rem 0.08rem 0 0
font-family "SourceHanSansCN"
_font(.18rem, .18rem, #FFFFFF, 700, right)
.item_wrap_1
// _wh(100%, calc((100% - .4rem) / 2))
_wh(48.8%, calc((100% - .4rem) / 3))
.item_wrap_2
// _wh(100%, calc((100% - .4rem) / 2))
_wh(100%, calc((100% - .4rem) / 3))
.item_wrap_3
margin-top .26rem
.inlblock
display inline-block
margin-right 0.08rem
.item_content_2
_wh(100%, calc(100% - .32rem))
margin-top .06rem
border .01rem solid rgba(8,205,248,0.3)
.scroll_wrap
_wh(100%, 100%)
// scroll1
.scroll_tab_1
_wh(100%, .4rem)
border-bottom .01rem solid rgba(8,205,248,0.3)
li
float left
width 15%
_font(.14rem,.4rem,#78B1DE,,center)
word-wrap break-word
word-break break-all
white-space nowrap
padding 0 .02rem
overflow hidden
box-sizing border-box
&:nth-child(5)
width 20%
&:nth-child(6)
width 20%
.scroll_container_1
width 100%
height calc(100% - .4rem)
overflow hidden
.scroll-ul_1
li
_wh(100%, .4rem)
border-bottom .01rem 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(15%, .4rem)
_fj(center)
_font(.14rem, .4rem, #fff,,center)
word-wrap break-word
word-break break-all
white-space nowrap
padding 0 .02rem
overflow hidden
&:nth-child(5)
width 20%
&:nth-child(6)
width 20%
&:nth-child(4)
// text-align left
span
// display inline-block
_wh(.0725rem, .0725rem)
border-radius 100%
background-color #2D7CEB
margin-right .1rem
// scroll2
.scroll_tab_2
_wh(100%, .4rem)
border-bottom .01rem solid rgba(8,205,248,0.3)
li
float left
width 18%
_font(.14rem,.4rem,#78B1DE,,center)
word-wrap break-word
word-break break-all
white-space nowrap
padding 0 .02rem
overflow hidden
box-sizing border-box
&:nth-child(4)
width 46%
.scroll_container_2
width 100%
height calc(100% - .4rem)
overflow hidden
.scroll-ul_2
li
_wh(100%, .44rem)
border-bottom .01rem 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_2_div
float left
_wh(18%, .44rem)
_fj(center)
_font(.12rem, .44rem, #fff,,center)
word-wrap break-word
word-break break-all
white-space nowrap
padding 0 .02rem
overflow hidden
&:nth-child(4)
font-size .12rem
width 46%
_fj(left)
_font(.12rem, .44rem, #fff,,left)
word-wrap break-word
word-break break-all
white-space nowrap
padding 0 .02rem
overflow hidden
.right_1_up
clear both
_wh(100%, 1.6rem)
padding 0 .3rem .2rem
background center bottom / 100% .03rem url(../assets/images/screen1/line_2.png) no-repeat
.right_1_up_left
float left
_wh(1.4rem, 1.4rem)
background center bottom / 100% 100% url(../assets/images/screen1/item_3.png) no-repeat
_fj(center)
.right_1_up_right
float right
_wh(1.71rem, 100%)
.right_1_up_right_item
_wh(100%, .6rem)
background center bottom / 100% 100% url(../assets/images/screen1/item_4.png) no-repeat
_fj(space-evenly)
flex-direction column
&:nth-child(2)
margin-top .2rem
.right_1_up_p1
font-family "SourceHanSansCN"
_font(.14rem, .14rem, #78B1DE, 700, center)
.right_1_up_p2
font-family "SourceHanSansCN"
_font(.18rem, .18rem, #fff, 700, center)
span
_font(.12rem, .18rem, #fff, 700, center)
.right_1_down
_wh(100%, calc(100% - 1.6rem))
padding .05rem .3rem 0
.right_1_down_inner_1
_wh(100%, .28rem)
overflow hidden
_fj()
div
&:nth-child(1)
font-family "SourceHanSansCN"
_font(.12rem, .28rem, #84B0DA, 700,)
letter-spacing .0171rem
&:nth-child(2)
font-family "SourceHanSansCN"
_font(.16rem, .28rem, #fff, 700, right)
letter-spacing .02rem
.right_1_down_inner_2
_wh(100%, .1811rem)
background-color rgba(0,213,255,0.20)
_fj()
div
&:nth-child(1)
_wh(50%, .0805rem)
background-color #07E083
&:nth-child(2)
_wh(50%, .0805rem)
background-color #B68845
.right_1_down_inner_3
_wh(100%, .3rem)
margin-top .1rem
_fj()
.right_1_down_inner_3_i
_wh(1.83rem, .3rem)
_fj()
background center bottom / 100% 100% url(../assets/images/screen1/item_5.png) no-repeat
.right_1_down_inner_3_l
_wh(50%, 100%)
overflow hidden
_fj()
span
display block
&:nth-child(1)
_wh(.0725rem, .0725rem)
border-radius 100%
background-color #2D7CEB
margin-left .15rem
&:nth-child(2)
font-family "SourceHanSansCN"
_font(.14rem, .3rem, #fff,400,)
.right_1_down_inner_3_r
_wh(50%, 100%)
line-height .3rem
overflow hidden
text-align center
span
font-family "SourceHanSansCN"
_font(.12rem, .3rem, #fff,700,)
&:nth-child(1)
font-family "SourceHanSansCN"
_font(.18rem, .3rem, #00D5FF,700,)
.item_content_4
_wh(100%, calc(100% - .32rem))
padding .1rem 0 .2rem
overflow hidden
.item_content_5
_wh(100%, calc(100% - .32rem))
padding-top .3rem
clear both
.item_5_l
float left
_wh(1.83rem, .3rem)
margin-top .2rem
.item_5_r
float right
margin-top .4rem
_wh(1.83rem, 60%)
_fj()
flex-direction column
.right_1_down_inner_3_i
margin-bottom .045rem
.item_5_l_1
_wh(100%, 60%)
background right center / .02rem 100% url(../assets/images/screen1/line_3.png) no-repeat
.item_5_l_2
_wh(100%, 40%)
.right_1_down_inner_3_i
&:nth-child(1), &:nth-child(2)
margin-bottom 5%
.total
position absolute
top 2.7rem
left .3rem
text-align center
width 2.2rem
div
line-height 0.24rem
// color #f80
color #00D9FF
font-size .3rem
margin-top 0.08rem
font-weight 700
.total-desc
width 2.2rem
text-align center
.cred
color #CC6060
.scroll_container_3
li
.scroll-ul_1_div
&:nth-child(4)
i
display block
width .4rem
_font(.14rem, .4rem, #fff,,center)
font-style normal
</style>