factory_web/src/views/bigScreen/index_6dept.vue

644 lines
28 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>
<el-container class="dashboard">
<el-header class="header">
<div style="font-weight: bold;">6车间生产数据大看板</div>
<div style="font-size: 14px;margin-top:18px">2023-11-14 13:50</div>
</el-header>
<el-main>
<el-row style="height: 60%" :gutter="10">
<el-col :xs="24" :md="10">
<el-row style="height: 29%" :gutter="10">
<el-col :xs="24" :md="24">
<div class="box">
<div class="boxtitle">
<div class="boxlabel">今日任务</div>
</div>
<div style="height: 4px;"></div>
<div class="boxmain bigdata border">
<el-row>
<el-col :span="12">
<div
style="display:flex;align-items:center;justify-content:space-around;border: 1px solid transparent;margin-top:6%;">
<div>ZB2</div>
<div
style="color: #fef000;margin-left: 10px;font-weight:bold;font-family:electronicFont;">
130</div>
</div>
</el-col>
<el-col :span="12">
<div
style="display:flex;align-items:center;justify-content:space-around;border: 1px solid transparent;margin-top:6%">
<div>ZJ2</div>
<div
style="color: #fef000;margin-left: 10px;font-weight:bold;font-family:electronicFont;">
130</div>
</div>
</el-col>
</el-row>
</div>
</div>
</el-col>
</el-row>
<div style="height: 1%;"></div>
<el-row style="height:70%">
<el-col>
<div class="box">
<div class="boxtitle">
<div class="boxlabel">发货情况</div>
</div>
<div style="height: 4px;"></div>
<div class="boxmain">
<div class="wrapper" @mouseover="mouseOver" @mouseout="mouseOut">
<table class="totall">
<tr class="title">
<th v-for="itemx in liData" :key="itemx">{{ itemx }}</th>
</tr>
</table>
<div ref="moocBox" class="wrapper2">
<table :class="{ marquee_top: animate }">
<tr v-for="(itemy,index) in listData" class="rollData" ref="con1" :key="itemy">
<td>{{ index+1 }}</td>
<td v-for="(itemz,index2) in itemy" :key="itemz">
<el-progress v-if="index2==3" :text-inside="true" :stroke-width="14" :percentage="itemz"
:status="getStatus(itemz)"/>
<span v-else-if="index2==5">
<el-tag type="warning" effect="light">{{ itemz }}</el-tag>
</span>
<span v-else>{{ itemz }}</span>
</td>
</tr>
<tr v-for="(itemy,index) in listData" class="rollData" ref="con2" :key="itemy">
<td>{{ index+1 }}</td>
<td v-for="(itemz,index2) in itemy" :key="itemz">
<el-progress v-if="index2==3" :text-inside="true" :stroke-width="14" :percentage="itemz"
:status="getStatus(itemz)"/>
<span v-else-if="index2==5">
<el-tag type="warning" effect="light">{{ itemz }}</el-tag>
</span>
<span v-else>{{ itemz }}</span>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</el-col>
</el-row>
</el-col>
<el-col :xs="24" :md="14">
<div class="box">
<div class="boxtitle">
<div class="boxlabel">昨日工序进度</div>
</div>
<div style="height: 4px;"></div>
<div class="boxmain">
<table border="0" cellspacing="16">
<tbody>
<tr>
<th>序号</th>
<th>产品名称</th>
<th>型号</th>
<th>计划周期</th>
<th>完成进度</th>
<th>产量</th>
<th>状态</th>
</tr>
<tr>
<td>1</td>
<th>光纤预制管</th>
<td>8098</td>
<td>19.80%</td>
<td><el-progress :text-inside="true" :stroke-width="14" :percentage="100"
status="green" /></td>
<td>368</td>
<td><el-tag type="" effect="light">已完成</el-tag></td>
</tr>
<tr>
<td>2</td>
<th>光纤预制管</th>
<td>7506</td>
<td>6.70%</td>
<td><el-progress :text-inside="true" :stroke-width="14" :percentage="70"
status="success" /></td>
<td>339</td>
<td><el-tag type="warning" effect="light">生产中</el-tag></td>
</tr>
<tr>
<td>3</td>
<th>光纤预制管</th>
<td>3261</td>
<td>32.30%</td>
<td><el-progress :text-inside="true" :stroke-width="14" :percentage="70"
status="warning" /></td>
<td>325</td>
<td><el-tag type="warning" effect="light">生产中</el-tag></td>
</tr>
<tr>
<td>4</td>
<th>光纤预制管</th>
<td>1993</td>
<td> 201%</td>
<td><el-progress :text-inside="true" :stroke-width="14" :percentage="30"
status="exception" /></td>
<td> 199</td>
<td><el-tag type="warning" effect="light">生产中</el-tag></td>
</tr>
</tbody>
</table>
</div>
</div>
</el-col>
</el-row>
<div style="height: 1%;"></div>
<el-row style="height:39%" :gutter="10">
<el-col :xs="24" :md="12">
<div class="box">
<div class="boxtitle">
<div class="boxlabel">本月生产统计</div>
</div>
<div class="boxmain" id="chart1">
</div>
</div>
</el-col>
<el-col :xs="24" :md="12">
<div class="box">
<div class="boxtitle">
<div class="boxlabel">本月交付统计</div>
</div>
<div class="boxmain" id="chart2">
</div>
</div>
</el-col>
</el-row>
</el-main>
</el-container>
</template>
<script>
import * as echarts from "echarts";
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}
export default {
data() {
return {
basicOption: {
backgroundColor: '',
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
legend: {
icon: "stack",
right: 0,
data: [{
backgroundColor: 'rgb(1,235,239)',
name: '棒',
itemStyle: {
// color:'rgb(1,235,239)',
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: 'rgb(1,235,239)'
},
{
offset: 1,
color: 'rgb(5, 158, 163)'
}])
},
textStyle: {
color: '#fff'
}
}, {
name: '管',
textStyle: {
color: '#fff'
}
}],
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: 'rgb(250,205,0)'
},
{
offset: 1,
color: 'rgb(254,129,0)'
}
])
}
},
toolbox: {
feature: {
// saveAsImage: {}
}
},
grid: {
left: '2%',
right: '2%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
boundaryGap: true,
data: ['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日', '29日', '30日'],
nameTextStyle: {
color: '#ffffff'
},
axisLabel: {
color: '#ffffff'
},
}
],
yAxis: [
{
name: "生产统计",
type: 'value',
nameTextStyle: {
color: '#ffffff'
},
axisLabel: {
color: '#ffffff'
},
splitLine: {
show: false,
lineStyle: {
type: 'dashed', //y轴分割线类型
color: 'rgba(102,102,102,0.9)',
width: 1,
},
},
}
],
series: [
{
name: '棒',
type: 'bar',
stack: 'Total',
smooth: true,
lineStyle: {
width: 1, color: 'rgb(1,235,239)'
},
showSymbol: false,
areaStyle: {
opacity: 0.8,
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: 'rgb(1,235,239)'
},
{
offset: 1,
color: 'rgb(5, 158, 163)'
}
])
},
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: 'rgb(1,235,239)'
},
{
offset: 1,
color: 'rgb(5, 158, 163)'
}])
},
emphasis: {
focus: 'series'
},
label: {
show: true,
position: 'insideTop',
color:'#666'
},
data: [140, 232, 101, 264, 90, 340, 250,140, 232, 101, 264, 90, 340, 250,140, 232, 101, 264, 90, 340, 250,140, 232, 101, 264, 90, 340, 250, 340, 250]
},
{
name: '管',
type: 'bar',
stack: 'Total',
smooth: true,
lineStyle: {
width: 0, color: 'rgb(250,205,0)'
},
showSymbol: false,
areaStyle: {
opacity: 0.8,
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: 'rgb(250,205,0)'
},
{
offset: 1,
color: 'rgb(254,129,0)'
}
])
},
itemStyle: {
borderRadius: [2, 2, 0, 0],
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: 'rgb(250,205,0)'
},
{
offset: 1,
color: 'rgb(254,129,0)'
}
])
},
emphasis: {
focus: 'series'
},
label: {
show: true,
position: 'insideTop',
color:'#666',
font:'10'
},
data:[100, 202, 101, 204, 190, 140, 150,100, 132, 161, 164, 190, 240, 150,110, 202, 100, 164, 90, 240, 150,340, 232, 101, 164, 190, 240, 250, 240, 150]
},
]
},
taskBoard: {
header: ['姓名', '岗位', '班次', '状态'],
headerBGC: '#0a3f44',
data: [
['小王', '成型人', '白班', '到岗'],
['小李', '成型人', '白班', '到岗'],
['小张', '成型人', '白班', '未到岗'],
],
index: true,
columnWidth: [50],
align: ['center'],
},
liData: ['序号','产品名称', '型号', '计划周期', '完成进度', '产量', '状态'],
listData: [
["光纤预制管A", "8098", "19.80%", 100,"368",'已完成'],
["光纤预制管B", "8098", "19.80%", 90,"368",'已完成'],
["光纤预制管C", "8098", "19.80%", 80,"368",'已完成'],
["光纤预制管D", "8098", "19.80%", 70,"368",'已完成'],
["光纤预制管E", "8098", "19.80%", 60,"368",'已完成'],
["光纤预制管F", "8098", "19.80%", 50,"368",'已完成'],
["光纤预制管G", "8098", "19.80%", 40,"368",'已完成'],
["光纤预制管H", "8098", "19.80%", 30,"368",'已完成'],
],
speed: 2000,
myScroll: null,
iliHeight: 30,
time: null,
delay: 20,
tableData: [
['产品名称', '型号', '计划周期', '完成进度', '产量', '状态'],
['ZB2', 'xxx', '2023-11-01至2023-11-11', '70', '5000', '生产中'],
],
taskBoard2: {
header: ['产品名称', '型号', '计划周期', '完成进度', '产量', '状态', 'xx'],
headerBGC: '#0a3f44',
waitTime: 3000,
rowNum: 8,
columnWidth: [2, 1, 1, 1, 1, 1],
data: [
['<span style="color:#37a2da;">行1列1</span>', '行1列2', '行1列3', '<el-progress :text-inside="true" :stroke-width="14" :percentage="100" status="green"/>', '行1列3', '行1列3', 'xx'],
['行2列1', '<span style="color:#32c5e9;">行2列2</span>', '行2列3', '行1列3', '行1列3', '行1列3', 'xx'],
['行3列1', '行3列2', '<span style="color:#67e0e3;">行3列3</span>', '行1列3', '行1列3', '行1列3', 'xx'],
['行4列1', '<span style="color:#9fe6b8;">行4列2</span>', '行4列3', '行1列3', '行1列3', '行1列3', 'xx'],
['<span style="color:#ffdb5c;">行5列1</span>', '行5列2', '行5列3', '行1列3', '行1列3', '行1列3', 'xx'],
['行6列1', '<span style="color:#ff9f7f;">行6列2</span>', '行6列3', '行1列3', '行1列3', '行1列3', 'xx'],
['行7列1', '行7列2', '<span style="color:#fb7293;">行7列3</span>', '行1列3', '行1列3', '行1列3', 'xx'],
['行8列1', '<span style="color:#e062ae;">行8列2</span>', '行8列3', '行1列3', '行1列3', '行1列3', 'xx'],
['<span style="color:#e690d1;">行9列1</span>', '行9列2', '行9列3', '行1列3', '行1列3', '行1列3', 'xx'],
['行10列1', '<span style="color:#e7bcf3;">行10列2</span>', '行10列3', '行1列3', '行1列3', '行1列3', 'xx'],
['行10列1', '<span style="color:#e7bcf3;">行10列2</span>', '行10列3', '行1列3', '行1列3', '行1列3', 'xx'],
['行10列1', '<span style="color:#e7bcf3;">行10列2</span>', '行10列3', '行1列3', '行1列3', '行1列3', 'xx'],
['行10列1', '<span style="color:#e7bcf3;">行10列2</span>', '行10列3', '行1列3', '行1列3', '行1列3', 'xx'],
['行10列1', '<span style="color:#e7bcf3;">行10列2</span>', '行10列3', '行1列3', '行1列3', '行1列3', 'xx'],
],
index: true,
columnWidth: [50],
align: ['center'],
chartInterval1: null,
chartInterval2: null,
chartInterval3: null
},
}
},
mounted() {
this.myScroll = setInterval(() => {
this.scrollUp();
}, this.speed);
let chart1Option = deepCopy(this.basicOption)
this.setChart("chart1", chart1Option);
let chart2Option = deepCopy(this.basicOption)
chart2Option.yAxis[0].name = '交付统计';
chart2Option.series[0].type = 'line';
chart2Option.series[1].type = 'line';
this.setChart("chart2", chart2Option)
let chart3Option = {
backgroundColor: '',
legend: {
top: 'bottom'
},
series: [
{
name: 'Nightingale Chart',
type: 'pie',
center: ['50%', '50%'],
roseType: 'area',
itemStyle: {
borderRadius: 8
},
data: [
{ value: 40, name: 'rose 1' },
{ value: 38, name: 'rose 2' },
{ value: 32, name: 'rose 3' },
{ value: 30, name: 'rose 4' },
{ value: 28, name: 'rose 5' },
{ value: 26, name: 'rose 6' },
{ value: 22, name: 'rose 7' },
{ value: 18, name: 'rose 8' }
]
}
]
};
this.setChart("chart3", chart3Option)
},
methods: {
getStatus(status){
if(status==100){
return "success"
}else if(status>=80){
return "primary"
}else if(status>=60){
return "warning"
}else{
return "exception"
}
},
setChart(name, option = null) {
// 根据name 渲染数据, option需填写否则option为模拟数据
var myChart = echarts.getInstanceByDom(document.getElementById(name));
if (myChart == undefined) {
myChart = echarts.init(document.getElementById(name), 'dark', { renderer: 'svg' });
}
if (option == null) {
option = Object.assign({}, this.basicOption)
}
setTimeout(() => {
try {
myChart.setOption(option);
} catch (error) { }
}, 500)
},
//滚动
scrollUp() {
// console.log(this.$refs.moocBox.scrollTop)
// console.log(this.$refs.moocBox.scrollHeight)
if (this.$refs.moocBox.scrollTop >= this.$refs.moocBox.scrollHeight / 2) {
//判断条件是否达到临界
this.$refs.moocBox.scrollTop = 0;
} else {
this.$refs.moocBox.scrollTop=this.$refs.moocBox.scrollTop+40;
}
}, // 鼠标滑过暂停滚动
mouseOver() {
clearInterval(this.myScroll);
}, //鼠标移开重新滚动
mouseOut() {
this.myScroll = setInterval(() => {
this.scrollUp();
},
this.speed);
},
},
beforeDestoryed() {
clearInterval(myScroll);
this.myScroll = null;
},
}
</script>
<style scoped>
.dashboard {
background-image: url("https://cdn-upload.datav.aliyun.com/upload/download/1678758744858-EWBrlDVf.jpg");
color: #fff;
font-family: "Microsoft Yahei" !important;
}
.header {
background: url("/public/img/photon_header.png");
border-bottom: none;
background-size: 100% 100%;
font-size: 26px;
display: block;
height: 80px;
color: rgb(149, 255, 255);
font-family: 'Microsoft Yahei';
text-align: center;
padding: 12px 0px;
}
.box {
background: rgba(10, 63, 68, 0.5);
height: 100%;
}
.boxtitle {
color: #fff;
font-size: 16px;
display: flex;
height: 36px;
background: linear-gradient(40deg, rgba(11, 101, 140, 0.451), rgba(0, 34, 48, 0.335), rgba(11, 101, 140, 0.451));
}
.bgimg {
background-image: url('https://cdn-upload.datav.aliyun.com/upload/download/1678762309227-E6RP8z2R.png');
background-size: 140% 100%;
}
.boxlabel {
margin-left: 6px;
font-size: 18px;
margin-top: 6px
}
.boxmain {
height: calc(100% - 40px);
}
@media screen and (max-width: 800px) {
.boxmain {
height: 200px;
}
}
.flex_center {
display: flex;
align-items: center;
justify-content: center
}
.border{
border: 1px dashed #49bcf7;
}
.bigdata {
font-size: 24px;
}
.wrapper{
overflow: hidden;
height: 220px;
}
.wrapper2{
height: 180px;
overflow: hidden;
}
table{
width: 100%;
text-align: center;
border-collapse: collapse;
border-spacing: 0;
table-layout: fixed;
width: 100%;
}
.title{
height: 40px;
line-height: 40px;
text-align: center;
}
table th{
font-size: 14px;
background: rgba(0, 0, 0, .1);
}
table td {
font-size: 14px;
height: 40px;
text-align: center;
color: rgba(255, 255, 255, .8);
}
table th,table td{
padding: .1rem 0;
border-bottom: none !important;
background:none !important;
}
.marquee_top{
transition: all 0.5s ease-in-out;
margin-top: -26px;
}
.totall{
color: #fff;
background-color: rgb(10, 63, 68);
}
.rollData{
background-color: rgb(10, 39, 50);
}
.rollData:nth-of-type(2n+1){
background-color: rgb(0, 59, 81);
}
</style>