This commit is contained in:
2023-08-25 13:33:31 +08:00
parent 261b698148
commit e21744a41c
25 changed files with 4826 additions and 3716 deletions

133
src/assets/css/layout2.styl Normal file
View File

@@ -0,0 +1,133 @@
@import 'mixin2.styl'
//
.style_block
display none
position absolute
_wh(calc(100% / 3), calc(100% / 3))
background red
//
.tooltip_wrap
position fixed
bottom 10%
z-index 10
_wh(auto, 40px)
padding 5px 5px
background-color rgba(228,233,237,1)
_fj(row)
&:hover
opacity 1 !important
.left_tooltip_wrap
right 0
border-top-left-radius 12px
border-bottom-left-radius 12px
.right_tooltip_wrap
left 0
border-top-right-radius 12px
border-bottom-right-radius 12px
.tooltip_arrow
_wh(40px, 100%)
_font(14px, 30px, #999,,)
.tooltip_pages
height 100%
_fj(row)
transition width .3s ease
overflow hidden
.tooltip_page
height 100%
margin 0 5px
_font(14px, 30px, #999,,)
border 1px solid #999
border-radius: 30px;
box-sizing: border-box;
padding: 0 10px;
&:hover
background-color #03fcfd
border-color #03fcfd
color #fff
.current_page
background-color #02d0d0
border-color #02d0d0
color #fff
//
.popup_block_wraper
position fixed
top 0
left 0
z-index 100
width 550px
padding 20px 14px 30px 14px
_bis('../images/screen3/popup_bg.png')
.foldline
position absolute
right -109px
z-index 10
_wh(127px,105px)
_bis('../images/screen3/dot_line.png')
.foldline_right
right -109px
.foldline_left
left -109px
transform rotateY(180deg)
.popup_bg
_wh(100%, 100%)
background top center / 100% 18px url(../images/screen3/popup_line.png) no-repeat
overflow hidden
.popup_block
_wh(100%,100%)
padding 15px 0 0 0
.pop_header
_wh(100%, 28px)
padding 0 5px
_fj(row)
.pop_name
width 50%
_font(14px,28px,#32C5FF,,left)
text-shadow 2px 2px 4px #A6E6FF
margin-bottom 8px
.pop_status
_wh(50%, 28px)
_fj(row,flex-end)
.pop_status_dot
_wh(15px, 15px)
border-radius 50%
margin-right 10px
.pop_status_text
_font(16px, 28px, #fff,,)
.pop_content
_wh(100%, calc(100% - 28px))
padding 0 5px
overflow-y auto
_fj(row,flex-start)
flex-wrap wrap
.pop_item
_wh(calc(50% - 2.5px), 30px)
_fj(row,flex-start)
background-color rgba(50,197,255,50%)
border-left 3px solid #fdfd0f
margin-bottom 5px
padding 0 5px
&:nth-child(2n+2)
width calc(50% - 2.5px)
margin-left 5px
.pop_label
width 100px
_font(12px, 24px, #fff,,left)
.pop_val
width calc(100% - 100px)
_font(13px, 24px, #0ff,,left)
white-space nowrap
.pop_val_s
width calc(100% - 118px)
.pop_unit
width 18px
_font(13px, 24px, #fff,,right)
overflow hidden
.icon-guanbi
position absolute
top 8px
right 9px
_wh(30px, 22px)
_font(15px, 22px, #fff,,center)
background-color #0a3679

View File

@@ -0,0 +1,48 @@
$green = #30EBC9
$yellow = #E2BB0E
$gray = #516282
$gray1 = #8B90A6
$orange = #F96700
$green2 = #65d837
.green
background-color #11ff0d
.yellow
background-color #fdfd0f
.gray
background-color #bfbfbf
.gray1
background-color #d8d1d1
.red
background-color #ff1016
//
_wh(w, h)
width: w
height: h
//
_font(size,height,color=#ffffff,weight=normal,align=center)
font-size: size
line-height: height
color: color
font-weight: weight
text-align: align
//
_bis(url,w=100%,h=100%,x=center,y=center,r=no-repeat)
background-position: x y
background-size: w h
background-image: url(url)
background-repeat: r
//
_shadow(w,c)
filter drop-shadow(w 0 0 c)
//flex
_fj(c=column, x=space-between,y=center)
display: flex
flex-direction: c
justify-content: x
align-items: y

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 895 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

1587
src/assets/js/getData0.js Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -24,52 +24,116 @@ export const errCensus = (id) => post('api/deviceScreen/errCensus', {})
/** 仓储监控 */
export const storageMonitor = (id) => post('api/dashboard/warehouseMonitor', {})
/** 生产统计 */
export const productionStatistics = (id) => post('api/dashboard/productionStatistics', {})
// export const productionStatistics = () => {
// let res = {
// 'total': {
// 'pressWeight': 0,
// 'dryWeight': 0,
// 'sortWeight': 0
// },
// 'mixProduction': [
// {
// 'value': 0,
// 'name': 'string'
// }
// ],
// 'pressProduction': {
// 'dailyProductionQty': 0,
// 'dailyProductionWeight': 0,
// 'equipmentProduction': [
// {
// 'name': 'string',
// 'qty': 0,
// 'weight': 0
// }
// ]
// },
// 'finishedProductCompletionRate': [
// {
// 'name': 'string',
// 'completed': 0,
// 'uncompleted': 0
// }
// ],
// 'workOrder': [
// {
// 'workOrderCode': 'string',
// 'equipment': 'string',
// 'materialCode': 'string',
// 'customer': 'string',
// 'planned': 0,
// 'completed': 0,
// 'status': 'string',
// 'planStartTime': 'string',
// 'startTime': 'string',
// 'endTime': 'string'
// }
// ]
// }
// return res
// }
// export const productionStatistics = (id) => post('api/dashboard/productionStatistics', {})
export const productionStatistics = () => {
let res = {
'pressProduction': {
'dailyProductionQty': 32.25,
'equipmentProduction': [
{
'qty': 11000,
'name': '压机1',
'weight': 13000
},
{
'qty': 4000,
'name': '压机2',
'weight': 19000
},
{
'qty': 5000,
'name': '压机3',
'weight': 3000
}
],
'dailyProductionWeight': 64.25
},
'workOrder': [
{
'planStartTime': '2023-08-18 14:02:48',
'workOrderCode': 'DD001',
'equipment': '压机1',
'materialCode': 'WL01',
'startTime': '2023-08-18 14:02:48',
'planned': '1000kg',
'completed': '827kg',
'endTime': '2023-08-18 14:02:48',
'customer': '厂家1',
'status': '完成'
},
{
'planStartTime': '2023-08-18 14:02:48',
'workOrderCode': 'DD002',
'equipment': '混料机2',
'materialCode': 'WL02',
'startTime': '2023-08-18 14:02:48',
'planned': '1000kg',
'completed': '894kg',
'customer': '厂家2',
'status': '已下发'
},
{
'planStartTime': '2023-08-18 14:02:48',
'workOrderCode': 'DD003',
'equipment': '压机3',
'materialCode': 'WL03',
'planned': '3000kg',
'completed': '627kg',
'customer': '厂家3',
'status': '未生产'
},
{
'planStartTime': '2023-08-18 14:02:48',
'workOrderCode': 'DD004',
'equipment': '混料机4',
'materialCode': 'WL04',
'startTime': '2023-08-18 14:02:48',
'planned': '8000kg',
'completed': '6137kg',
'customer': '厂家4',
'status': '暂停'
}
],
'total': {
'pressWeight': 30.25,
'dryWeight': 20.25,
'sortWeight': 16.25
},
'finishedProductCompletionRate': [
{
'uncompleted': 5000,
'name': '物料1',
'completed': 4000
},
{
'uncompleted': 3000,
'name': '物料2',
'completed': 4000
},
{
'uncompleted': 4000,
'name': '物料3',
'completed': 3000
}
],
'mixProduction': [
{
'name': '物料1',
'value': 800.25
},
{
'name': '物料2',
'value': 800.25
},
{
'name': '物料3',
'value': 900.25
},
{
'name': '物料4',
'value': 600.25
}
]
}
return res
}

File diff suppressed because it is too large Load Diff

View File

@@ -5,6 +5,7 @@ import router from './router'
import store from './vuex/store'
import '@css/reset.css'
import '@css/layout.styl'
import '@css/layout2.styl'
// import '@js/rem.js'
import filter from '@js/filter.js'
import { Dialog, toast } from '@js/mUtils.js'

View File

@@ -1,6 +1,6 @@
<template>
<section class="bg">
<t-header title="顺和大屏监控">
<t-header title="顺和大屏监控-生产统计">
<!-- <p class="p1">1</p> -->
</t-header>
<div class="container">

View File

@@ -3,6 +3,13 @@
<t-header title="顺和大屏监控——仓储监控">
<!-- <p class="p1">1</p> -->
</t-header>
<!-- <t-header title="顺和大屏监控——仓储监控">
<div class="pages">
<router-link to="/setup">物流工艺</router-link>
<router-link to="/setup">生产统计</router-link>
<router-link to="/setup">设备监控</router-link>
</div>
</t-header> -->
<div class="container">
<div class="top_wrapper">
<div class="yard-wrap">
@@ -27,96 +34,239 @@
</div>
</div>
</div>
<div class="yard_group clearfix">
<div class="yard_group_ul yard_group_ul_1 fl">
<div class="yard_group_cell" v-for="(e, i) in group01" :key="i" :class="{lock:e.lock_type ==='01'}">
<div class="yard_group_p" @click="getInfo1(e)">
<p class="fontselect">{{e.point_name}}</p>
<div v-if="e.struct_url == '1'" class="machine_1"></div>
<!-- <div class="ingbox" :style="{height:(Number(e.show_struct_qty)/1000*60+'px')}" :class="{green:e.stand_status ==='2',yellow:e.stand_status ==='3',red:e.stand_status ==='4',blue:e.stand_status ==='5'}"></div> -->
<div class="ingbox" style="height:78px;" :class="{green:e.stand_status ==='2',yellow:e.stand_status ==='3',red:e.stand_status ==='4',blue:e.stand_status ==='5'}"></div>
</div>
<div v-show="code1 === e.point_code" class="locate-wrap clearfix" :class="e.mgl">
<div :class="e.aline">
<div class="foldcricle0 foldcricle1"></div>
<div class="foldline0 foldline1"></div>
</div>
<div :class="e.bline">
<div class="foldline0 foldline2"></div>
<div class="foldcricle0 foldcricle2"></div>
</div>
<div class="clearfix locate-content" :class="e.coordinate">
<div class="tan_pline">
<p class="tan_p">货位{{e.point_name}}<span :class="{cgreen:e.stand_status ==='2',cyellow:e.stand_status ==='3',cred:e.stand_status ==='4',cblue:e.stand_status ==='5'}">{{e.stand_status_name}}</span></p>
<p class="tan_p">载具{{e.vehicle_code}}</p>
<p class="tan_p">BOM{{e.material_code}}</p>
<p class="tan_p">重量(千克){{e.ivt_qty}}</p>
<p class="tan_p">入库时间{{e.instorage_time}}</p>
<p class="tan_p">静置(小时){{e.standing_time}}</p>
<div class="yard_group clearfix" style="display: flex;">
<div class="tcon1">
<div class="lbox">
<div class="conn1" v-for="(e, i) in group01.slice(0, 12)" :key="i" :class="{mgl10: i === 2 || i === 4 || i === 6 || i === 8 || i === 10}">
<div class="a-box" @click="showInfo(e)">
<div class="atext">{{e.storageLocation}}</div>
<div class="acon">
<div class="maskbox" :class="{green:e.standStatus ==='1',yellow:e.standStatus ==='2',red:e.standStatus ==='3',blue:e.pointStatus ==='2'}"></div>
</div>
</div>
<div class="b-box" v-show="flg === e.storageLocation">
<div class="border left-top-border">
<img src="../../assets/images/screen3/dot_line.png" alt="">
</div>
<div class="content">
<div class="iconfont icon-guanbi close_btn" @click="closeInfo"></div>
<p class="tan_p">货位{{e.storageLocation}}<span>{{e.standStatus}}</span></p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">重量(kg){{e.weight}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
<p class="tan_p">静置(h){{e.standTime}}</p>
<!-- <img src="../../assets/images/screen3/popup_bg.png" alt=""> -->
<!-- <img src="../../assets/images/screen3/popup_line.png" alt=""> -->
</div>
</div>
</div>
</div>
<div class="lbox lbox2">
<div class="conn1" v-for="(e, i) in group01.slice(12, 26)" :key="i">
<div class="a-box" @click="showInfo(e)">
<div class="atext">{{e.storageLocation}}</div>
<div class="acon">
<div class="maskbox" :class="{green:e.standStatus ==='1',yellow:e.standStatus ==='2',red:e.standStatus ==='3',blue:e.pointStatus ==='2'}"></div>
</div>
</div>
<div class="b-box" v-show="flg === e.storageLocation">
<div class="border left-top-border">
<img src="../../assets/images/screen3/dot_line.png" alt="">
</div>
<div class="content">
<div class="iconfont icon-guanbi close_btn" @click="closeInfo"></div>
<p class="tan_p">货位{{e.storageLocation}}<span>{{e.standStatus}}</span></p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">重量(kg){{e.weight}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
<p class="tan_p">静置(h){{e.standTime}}</p>
</div>
<div class="iconfont icon-guanbi close_btn" @click="closebtn"></div>
</div>
</div>
</div>
</div>
<div class="yard_group_ul yard_group_ul_3 fr">
<div class="yard_group_cell" v-for="(e, i) in group03" :key="i" :class="{lock:e.lock_type ==='01'}">
<div class="yard_group_p" @click="getInfo1(e)">
<p class="fontselect">{{e.point_name}}</p>
<div v-if="e.struct_url == '1'" class="machine_1"></div>
<div class="ingbox" style="height:78px;" :class="{green:e.stand_status ==='2',yellow:e.stand_status ==='3',red:e.stand_status ==='4',blue:e.stand_status ==='5'}"></div>
</div>
<div v-show="code1 === e.point_code" class="locate-wrap clearfix" :class="e.mgl">
<div :class="e.aline">
<div class="foldcricle0 foldcricle1"></div>
<div class="foldline0 foldline1"></div>
</div>
<div :class="e.bline">
<div class="foldline0 foldline2"></div>
<div class="foldcricle0 foldcricle2"></div>
</div>
<div class="clearfix locate-content" :class="e.coordinate">
<div class="tan_pline">
<p class="tan_p">货位{{e.point_name}}<span :class="{cgreen:e.stand_status ==='2',cyellow:e.stand_status ==='3',cred:e.stand_status ==='4',cblue:e.stand_status ==='5'}">{{e.stand_status_name}}</span></p>
<p class="tan_p">载具{{e.vehicle_code}}</p>
<p class="tan_p">BOM{{e.material_code}}</p>
<p class="tan_p">重量(千克){{e.ivt_qty}}</p>
<p class="tan_p">入库时间{{e.instorage_time}}</p>
<p class="tan_p">静置(小时){{e.standing_time}}</p>
<div class="tcon2">
<div class="lbox">
<div class="conn1" v-for="(e, i) in group01.slice(26, 30)" :key="i">
<div class="a-box" @click="showInfo(e)">
<div class="atext">{{e.storageLocation}}</div>
<div class="acon">
<div class="maskbox" :class="{green:e.standStatus ==='1',yellow:e.standStatus ==='2',red:e.standStatus ==='3',blue:e.pointStatus ==='2'}"></div>
</div>
</div>
<div class="b-box" v-show="flg === e.storageLocation">
<div class="border left-top-border">
<img src="../../assets/images/screen3/dot_line.png" alt="">
</div>
<div class="content">
<div class="iconfont icon-guanbi close_btn" @click="closeInfo"></div>
<p class="tan_p">货位{{e.storageLocation}}<span>{{e.standStatus}}</span></p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">重量(kg){{e.weight}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
<p class="tan_p">静置(h){{e.standTime}}</p>
</div>
</div>
</div>
</div>
<div class="lbox">
<div class="conn1" v-for="(e, i) in group01.slice(30, 34)" :key="i">
<div class="a-box" @click="showInfo(e)">
<div class="atext">{{e.storageLocation}}</div>
<div class="acon">
<div class="maskbox" :class="{green:e.standStatus ==='1',yellow:e.standStatus ==='2',red:e.standStatus ==='3',blue:e.pointStatus ==='2'}"></div>
</div>
</div>
<div class="b-box" v-show="flg === e.storageLocation">
<div class="border left-top-border">
<img src="../../assets/images/screen3/dot_line.png" alt="">
</div>
<div class="content">
<div class="iconfont icon-guanbi close_btn" @click="closeInfo"></div>
<p class="tan_p">货位{{e.storageLocation}}<span>{{e.standStatus}}</span></p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">重量(kg){{e.weight}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
<p class="tan_p">静置(h){{e.standTime}}</p>
</div>
</div>
</div>
</div>
<div class="lbox">
<div class="conn1" v-for="(e, i) in group01.slice(34, 38)" :key="i">
<div class="a-box" @click="showInfo(e)">
<div class="atext">{{e.storageLocation}}</div>
<div class="acon">
<div class="maskbox" :class="{green:e.standStatus ==='1',yellow:e.standStatus ==='2',red:e.standStatus ==='3',blue:e.pointStatus ==='2'}"></div>
</div>
</div>
<div class="b-box" v-show="flg === e.storageLocation">
<div class="border left-top-border">
<img src="../../assets/images/screen3/dot_line.png" alt="">
</div>
<div class="content">
<div class="iconfont icon-guanbi close_btn" @click="closeInfo"></div>
<p class="tan_p">货位{{e.storageLocation}}<span>{{e.standStatus}}</span></p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">重量(kg){{e.weight}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
<p class="tan_p">静置(h){{e.standTime}}</p>
</div>
</div>
</div>
</div>
</div>
<div class="tcon3">
<div class="lbox">
<div class="conn1" v-for="(e, i) in group01.slice(38, 41)" :key="i" :class="{mgl10: i === 1 || i === 2 || i === 3}">
<div class="a-box" @click="showInfo(e)">
<div class="atext">{{e.storageLocation}}</div>
<div class="acon">
<div class="maskbox" :class="{green:e.standStatus ==='1',yellow:e.standStatus ==='2',red:e.standStatus ==='3',blue:e.pointStatus ==='2'}"></div>
</div>
</div>
<div class="b-box" v-show="flg === e.storageLocation">
<div class="border left-top-border">
<img src="../../assets/images/screen3/dot_line.png" alt="">
</div>
<div class="content">
<div class="iconfont icon-guanbi close_btn" @click="closeInfo"></div>
<p class="tan_p">货位{{e.storageLocation}}<span>{{e.standStatus}}</span></p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">重量(kg){{e.weight}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
<p class="tan_p">静置(h){{e.standTime}}</p>
</div>
</div>
</div>
</div>
<div class="lbox">
<div class="conn1" v-for="(e, i) in group01.slice(16, 17)" :key="i">
<div class="a-box" @click="showInfo(e)">
<div class="atext">{{e.storageLocation}}</div>
<div class="acon">
<div class="maskbox" :class="{green:e.standStatus ==='1',yellow:e.standStatus ==='2',red:e.standStatus ==='3',blue:e.pointStatus ==='2'}"></div>
</div>
</div>
<div class="b-box" v-show="flg === e.storageLocation">
<div class="border left-top-border">
<img src="../../assets/images/screen3/dot_line.png" alt="">
</div>
<div class="content">
<div class="iconfont icon-guanbi close_btn" @click="closeInfo"></div>
<p class="tan_p">货位{{e.storageLocation}}<span>{{e.standStatus}}</span></p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">重量(kg){{e.weight}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
<p class="tan_p">静置(h){{e.standTime}}</p>
</div>
<div class="iconfont icon-guanbi close_btn" @click="closebtn"></div>
</div>
</div>
</div>
</div>
</div>
<div class="corridor_2">成型暂存监控</div>
<div class="yard_group clearfix">
<div class="yard_group_ul yard_group_ul_2">
<div class="yard_group_cell" v-for="(e, i) in group02" :key="i" :class="{lock:e.lock_type ==='01'}">
<div class="yard_group_p" @click="getInfo1(e)">
<p class="fontselect">{{e.point_name}}</p>
<div v-if="e.struct_url == '2'" class="machine_2"></div>
<div class="ingbox" :style="{height:(Number(e.show_struct_qty)/1000*60+'px')}"></div>
</div>
<div v-show="code1 === e.point_code" class="locate-wrap clearfix" :class="e.mgl">
<div :class="e.aline">
<div class="foldcricle0 foldcricle1"></div>
<div class="foldline0 foldline1"></div>
</div>
<div :class="e.bline">
<div class="foldline0 foldline2"></div>
<div class="foldcricle0 foldcricle2"></div>
</div>
<div class="clearfix locate-content" :class="e.coordinate">
<div class="tan_pline">
<p class="tan_p">货位{{e.point_name}}</p>
<p class="tan_p">载具{{e.vehicle_code}}</p>
<p class="tan_p">物料{{e.material_code}}</p>
<p class="tan_p">库存(){{e.ivt_qty}}</p>
<p class="tan_p">入库时间{{e.instorage_time}}</p>
<div class="yard_group clearfix" style="display: flex;">
<div class="tcon1">
<div class="lbox">
<div class="conn1" style="width: 137px;" v-for="(e, i) in group02.slice(0, 14)" :key="i">
<div class="a-box" @click="showInfo(e)">
<div class="atext">{{e.storageLocation}}</div>
<div class="acon acon2">
<div class="maskbox"></div>
</div>
</div>
<div class="b-box" v-show="flg === e.storageLocation">
<div class="border left-top-border">
<img src="../../assets/images/screen3/dot_line.png" alt="">
</div>
<div class="content">
<div class="iconfont icon-guanbi close_btn" @click="closeInfo"></div>
<p class="tan_p">货位{{e.storageLocation}}</p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">库存(){{e.qty}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
</div>
</div>
</div>
</div>
<div class="lbox lbox2">
<div class="conn1" style="width: 137px;" v-for="(e, i) in group02.slice(14, 28)" :key="i">
<div class="a-box" @click="showInfo(e)">
<div class="atext">{{e.storageLocation}}</div>
<div class="acon acon2">
<div class="maskbox"></div>
</div>
</div>
<div class="b-box" v-show="flg === e.storageLocation">
<div class="border left-top-border">
<img src="../../assets/images/screen3/dot_line.png" alt="">
</div>
<div class="content">
<div class="iconfont icon-guanbi close_btn" @click="closeInfo"></div>
<p class="tan_p">货位{{e.storageLocation}}</p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">库存(){{e.qty}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
</div>
<div class="iconfont icon-guanbi close_btn" @click="closebtn"></div>
</div>
</div>
</div>
@@ -125,32 +275,107 @@
</div>
<div class="yard-right">
<div class="corridor_2">出窑暂存监控</div>
<div class="yard_group clearfix">
<div class="yard_group_ul yard_group_ul_4">
<div class="yard_group_cell" v-for="(e, i) in group02" :key="i" :class="{lock:e.lock_type ==='01'}">
<div class="yard_group_p" @click="getInfo1(e)">
<p class="fontselect">{{e.point_name}}</p>
<div v-if="e.struct_url == '2'" class="machine_2" style="height: 55px;"></div>
<div class="ingbox" :style="{height:(Number(e.show_struct_qty)/1000*60+'px')}"></div>
</div>
<div v-show="code1 === e.point_code" class="locate-wrap clearfix" :class="e.mgl">
<div :class="e.aline">
<div class="foldcricle0 foldcricle1"></div>
<div class="foldline0 foldline1"></div>
</div>
<div :class="e.bline">
<div class="foldline0 foldline2"></div>
<div class="foldcricle0 foldcricle2"></div>
</div>
<div class="clearfix locate-content" :class="e.coordinate">
<div class="tan_pline">
<p class="tan_p">货位{{e.point_name}}</p>
<p class="tan_p">载具{{e.vehicle_code}}</p>
<p class="tan_p">物料{{e.material_code}}</p>
<p class="tan_p">库存(){{e.ivt_qty}}</p>
<p class="tan_p">入库时间{{e.instorage_time}}</p>
<div class="yard_group clearfix" style="display: flex; margin-top: -25px;">
<div class="tcon1">
<div class="lbox colbox">
<div class="conn1" v-for="(e, i) in group03.slice(0, 7)" :key="i">
<div class="a-box" @click="showInfo(e)">
<div class="atext">{{e.storageLocation}}</div>
<div class="acon acon2">
<div class="maskbox"></div>
</div>
</div>
<div class="b-box" v-show="flg === e.storageLocation">
<div class="border left-bottom-border">
<img src="../../assets/images/screen3/dot_line.png" alt="">
</div>
<div class="content contentrt">
<div class="iconfont icon-guanbi close_btn" @click="closeInfo"></div>
<p class="tan_p">货位{{e.storageLocation}}</p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">库存(){{e.qty}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
</div>
</div>
</div>
</div>
</div>
<div class="tcon1">
<div class="lbox colbox">
<div class="conn1" v-for="(e, i) in group03.slice(7, 14)" :key="i">
<div class="a-box" @click="showInfo(e)">
<div class="atext">{{e.storageLocation}}</div>
<div class="acon acon2">
<div class="maskbox"></div>
</div>
</div>
<div class="b-box" v-show="flg === e.storageLocation">
<div class="border left-bottom-border">
<img src="../../assets/images/screen3/dot_line.png" alt="">
</div>
<div class="content contentrt">
<div class="iconfont icon-guanbi close_btn" @click="closeInfo"></div>
<p class="tan_p">货位{{e.storageLocation}}</p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">库存(){{e.qty}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
</div>
</div>
</div>
</div>
</div>
<div class="tcon1" style="margin-left: 60px;">
<div class="lbox colbox">
<div class="conn1" v-for="(e, i) in group03.slice(14, 20)" :key="i">
<div class="a-box" @click="showInfo(e)">
<div class="atext">{{e.storageLocation}}</div>
<div class="acon acon2">
<div class="maskbox"></div>
</div>
</div>
<div class="b-box" v-show="flg === e.storageLocation">
<div class="border left-bottom-border">
<img src="../../assets/images/screen3/dot_line.png" alt="">
</div>
<div class="content contentrt">
<div class="iconfont icon-guanbi close_btn" @click="closeInfo"></div>
<p class="tan_p">货位{{e.storageLocation}}</p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">库存(){{e.qty}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
</div>
</div>
</div>
</div>
</div>
<div class="tcon1">
<div class="lbox colbox">
<div class="conn1" v-for="(e, i) in group03.slice(20, 26)" :key="i">
<div class="a-box" @click="showInfo(e)">
<div class="atext">{{e.storageLocation}}</div>
<div class="acon acon2">
<div class="maskbox"></div>
</div>
</div>
<div class="b-box" v-show="flg === e.storageLocation">
<div class="border left-bottom-border">
<img src="../../assets/images/screen3/dot_line.png" alt="">
</div>
<div class="content contentrt">
<div class="iconfont icon-guanbi close_btn" @click="closeInfo"></div>
<p class="tan_p">货位{{e.storageLocation}}</p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">库存(){{e.qty}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
</div>
<div class="iconfont icon-guanbi close_btn" @click="closebtn"></div>
</div>
</div>
</div>
@@ -191,7 +416,7 @@
</div>
<div class="bottom_wrapper_l">
<div class="block_h2">
<h2>半成品库存</h2>
<h2>出窑库存</h2>
</div>
<div class="list_scroll_title">
<span>货位</span><span>物料编码</span><span>物料名称</span><span>库存数()</span><span>托盘号</span><span>入库时间</span>
@@ -222,6 +447,88 @@ export default {
return {
interTime: this.$store.getters.setTime,
timer: null,
testArr: [
{
storageLocation: 111
},
{
storageLocation: 222
},
{
storageLocation: 333
},
{
storageLocation: 444
},
{
storageLocation: 555
},
{
storageLocation: 666
},
{
storageLocation: 777
},
{
storageLocation: 888
},
{
storageLocation: 999
},
{
storageLocation: 1001
},
{
storageLocation: 1002
},
{
storageLocation: 1003
}
],
testArr2: [
{
storageLocation: 1
},
{
storageLocation: 2
},
{
storageLocation: 3
},
{
storageLocation: 4
},
{
storageLocation: 5
},
{
storageLocation: 6
},
{
storageLocation: 7
},
{
storageLocation: 8
},
{
storageLocation: 9
},
{
storageLocation: 10
},
{
storageLocation: 11
},
{
storageLocation: 12
},
{
storageLocation: 13
},
{
storageLocation: 14
}
],
materArr1: [],
materArr2: [],
structArr: [],
@@ -231,7 +538,8 @@ export default {
group01: [],
group02: [],
group03: [],
code1: ''
code1: '',
flg: ''
}
},
computed: {
@@ -257,53 +565,6 @@ export default {
mounted () {
// lock_type 00空闲01锁定
// stand_status 0为空2为静置中3为静置完成4为强制静置完成5为静置超时
// 编号排布
// 12排
// let pai1 = []
// let pai2 = []
// let pai12 = []
// for (let i = 1; i <= 20; i++) {
// if (i <= 10) {
// pai1.push({sequence_number: i * 2 - 1, coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
// pai2.push({sequence_number: i * 2, coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
// } else {
// pai1.push({sequence_number: i * 2 - 1, coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
// pai2.push({sequence_number: i * 2, coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
// }
// }
// pai12 = pai1.concat(pai2)
// this.group01 = pai12
// // 34排
// let pai3 = []
// let pai4 = []
// let pai34 = []
// for (let i = 21; i <= 38; i++) {
// if (i <= 30) {
// pai3.push({sequence_number: i * 2 - 1, coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
// pai4.push({sequence_number: i * 2, coordinate: 'coordinate3', aline: 'aline3', bline: 'bline3', show: 0})
// } else {
// pai3.push({sequence_number: i * 2 - 1, coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
// pai4.push({sequence_number: i * 2, coordinate: 'coordinate3', aline: 'aline3', bline: 'bline3', show: 0})
// }
// }
// pai34 = pai3.concat(pai4)
// this.group02 = pai34
// // 56排
// let pai5 = []
// let pai6 = []
// let pai56 = []
// for (let i = 39; i <= 46; i++) {
// if (i <= 4) {
// pai5.push({sequence_number: i * 2 - 1, coordinate: 'coordinate3', aline: 'aline3', bline: 'bline3', show: 0})
// pai6.push({sequence_number: i * 2, coordinate: 'coordinate3', aline: 'aline3', bline: 'bline3', show: 0})
// } else {
// pai5.push({sequence_number: i * 2 - 1, coordinate: 'coordinate3', aline: 'aline3', bline: 'bline3', show: 0})
// pai6.push({sequence_number: i * 2, coordinate: 'coordinate3', aline: 'aline3', bline: 'bline3', show: 0})
// }
// }
// pai56 = pai5.concat(pai6)
// this.group03 = pai56
// end
this.initData()
this.refresh()
},
@@ -322,50 +583,20 @@ export default {
this.array1 = res.standStock
this.array2 = res.frontWarehouseStock
this.array3 = res.backWarehouseStock
this.group01 = [...res.result.materialTask]
this.group02 = [...res.result.productionTask]
this.group03 = [...res.result.materialYJTask]
for (let i = 0; i < this.group01.length; i++) {
this.group01[i] = Object.assign(this.group01[i], {mgl: 'mgl1', coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
}
for (let i = 0; i < this.group03.length; i++) {
this.group03[i] = Object.assign(this.group03[i], {mgl: 'mgl2', coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
}
for (let i = 0; i < this.group02.length; i++) {
if (i === 21 || i === 22 || i === 23 || i === 24 || i === 25 || i === 47 || i === 48 || i === 49 || i === 50 || i === 51) {
this.group02[i] = Object.assign(this.group02[i], {mgl: 'mgl2', coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
} else {
this.group02[i] = Object.assign(this.group02[i], {mgl: 'mgl1', coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
}
}
// for (let i = 1; i <= 20; i++) {
// if (i <= 10) {
// group01.push({sequence_number: i * 2 - 1, coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
// group01.push({sequence_number: i * 2, coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
this.group01 = res.standMonitor
this.group02 = res.frontWarehouseMonitor
this.group03 = res.backWarehouseMonitor
// for (let i = 0; i < this.group01.length; i++) {
// this.group01[i] = Object.assign(this.group01[i], {mgl: 'mgl1', coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
// }
// for (let i = 0; i < this.group03.length; i++) {
// this.group03[i] = Object.assign(this.group03[i], {mgl: 'mgl2', coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
// }
// for (let i = 0; i < this.group02.length; i++) {
// if (i === 21 || i === 22 || i === 23 || i === 24 || i === 25 || i === 47 || i === 48 || i === 49 || i === 50 || i === 51) {
// this.group02[i] = Object.assign(this.group02[i], {mgl: 'mgl2', coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
// } else {
// group01.push({sequence_number: i * 2 - 1, coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
// group01.push({sequence_number: i * 2, coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
// }
// }
// for (let i = 0; i < this.structArr.length; i++) {
// for (let j = 0; j < this.group01.length; j++) {
// if (this.structArr[i].sequence_number === this.group01[j].sequence_number + '') {
// this.group01[j] = Object.assign(this.group01[j], this.structArr[i])
// }
// }
// }
// for (let i = 0; i < this.structArr.length; i++) {
// for (let j = 0; j < this.group02.length; j++) {
// if (this.structArr[i].sequence_number === this.group02[j].sequence_number + '') {
// this.group02[j] = Object.assign(this.group02[j], this.structArr[i])
// }
// }
// }
// for (let i = 0; i < this.structArr.length; i++) {
// for (let j = 0; j < this.group03.length; j++) {
// if (this.structArr[i].sequence_number === this.group03[j].sequence_number + '') {
// this.group03[j] = Object.assign(this.group03[j], this.structArr[i])
// }
// this.group02[i] = Object.assign(this.group02[i], {mgl: 'mgl1', coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
// }
// }
},
@@ -386,6 +617,12 @@ export default {
},
closebtn () {
this.code1 = ''
},
showInfo (e) {
this.flg = this.flg === e.storageLocation ? '' : e.storageLocation
},
closeInfo () {
this.flg = ''
}
}
}
@@ -500,9 +737,9 @@ export default {
grid-template-rows repeat(2, 110px)
.yard_group_ul_4
width 100%
grid-template-columns repeat(5, 100% / 5)
grid-template-columns repeat(4, 80% / 4)
// grid-template-rows repeat(2, 1.8rem / 2)
grid-template-rows repeat(6, 85px)
grid-template-rows repeat(7, 73px)
.yard_group_cell
position relative
display inline-block
@@ -596,8 +833,6 @@ height 90px
right 10%
margin-right -.25rem
font-size .14rem
line-height .34rem
padding 0 .16rem
border-radius 5px
cursor pointer
.bottom_wrapper
@@ -612,19 +847,6 @@ height 90px
width 100%
height 100%
position relative
#echarts1
// margin-left 2rem
position absolute
top 0
left 0
z-index 9
#echarts3
// margin-left 2rem
position absolute
top -30px
// left 60px
left .60rem
z-index 10
.title
position absolute
top .15rem
@@ -834,7 +1056,7 @@ height 90px
height 100%
margin-left 2%
box-sizing border-box
border 1px solid #32c5ff
// border 1px solid #32c5ff
.cont-1
display flex
.tags
@@ -842,4 +1064,123 @@ height 90px
width 20%
align-items center
justify-content space-around
.mgt5
margin-left 100px
.mgt6
margin-left 150%
.pages
position absolute
left .2509rem
top 11%
_wh(20%, .4rem)
_fj()
a
cursor pointer
font-family "SourceHanSansCN"
_font(.18rem, .30rem, #fff, 700,)
letter-spacing .01rem
padding .05rem .2rem
border-radius .05rem
background: radial-gradient(circle at 7.2% 13.6%, rgb(37, 249, 245) 0%, #004c92 90%)
.tcon2
width 300px
margin-left 40px
.lbox
width 80%
display flex
.lbox2
margin-top 40px
.conn1
position relative
width 60px
.a-box
width 60px
height 80px
border 1px solid #32c5ff
border-radius 8px
.atext
_font(12px, 30px, #fff,,)
// transform scale(0.8)
white-space:nowrap
.acon
width 100%
height 61%
background center center / 100% 100% url(../../assets/images/screen1/zhong.png) no-repeat
border-bottom-right-radius 8px
border-bottom-left-radius 8px
.maskbox
width 100%
height 100%
// background #ff0
position relative
opacity 0.5
border-bottom-right-radius 8px
border-bottom-left-radius 8px
.acon2
background center center / 100% 100% url(../../assets/images/screen1/cp1.jpg) no-repeat
opacity 0.3
.b-box
position absolute
z-index 11
top 0px
left 50px
// display flex
.border
width 127px
height 105px
position absolute
left 0px
top 40px
z-index 10
.left-top-border
transform rotateY(180deg)
.left-bottom-border
transform rotate(0deg)
left -166px
.right-top-border
transform rotateY(180deg)
.right-bottom-border
transform rotateY(180deg)
.content
width 280px
height 300px
border-sizing border-box
padding 20px
position absolute
left 115px
background center center / 100% 100% url(../../assets/images/screen1/popover_1.png) no-repeat
// background-image url(../../assets/images/screen3/popup_bg.png)
background-repaeat no-repeat
.contentrt
left: -432px;
p
width 100%
line-height 30px
.icon-guanbi2
position: absolute;
top: 8px;
right: 9px;
width: 30px;
height: 22px;
font-size: 15px;
line-height: 22px;
color: #fff;
font-weight: normal;
text-align: center;
background-color: #0a3679;
.close_btn2
position: absolute;
top: 3%;
right: 10%;
margin-right: -0.25rem;
font-size: 0.14rem;
line-height: 0.34rem;
padding: 0 0.16rem;
border-radius: 5px;
cursor: pointer;
.mgl10
margin-left 23px
.colbox
display flex
flex-direction column
</style>

View File

@@ -0,0 +1,687 @@
<template>
<div @click.stop="closeModal" 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="box1">
<div class="status_wrap">
<div class="status_item">
<div class="status_tip yellow"></div>
<div class="status_name">困料</div>
</div>
<div class="status_item">
<div class="status_tip green"></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="box_l1">
<!-- <div v-for="(e,i) in TrappedShelf40List.slice(0, 20)" :key="i" class="picbox" :class="{'mgt5': i === 10 || i === 14 || i === 18, 'mgt6': i === 6, 'mgt2': i === 2}" @click.stop="getInfo1(e, i)"> -->
<div v-for="(e,i) in TrappedShelf40List.slice(0, 12)" :key="i" class="picbox" :class="{'mgt2': i === 2 || i === 4 || i === 6 || i === 8 || i === 10}" @click.stop="getInfo1(e, i)">
<!-- <div class="piccon"><img v-show="String(e.point_status) === '0'" src="../../assets/images/screen3/hj.png" alt=""></div> -->
<div class="piccon" v-show="String(e.point_status) === '0'" style="display: none; height auto;"><img style="visibility: hidden;"></div>
<div class="piccon" v-show="String(e.point_status) === '1'"><img src="../../assets/images/screen3/lz_hj_gray.png" alt=""></div>
<div class="piccon" v-show="String(e.point_status) === '2' && String(e.stand_status) === '2'"><img src="../../assets/images/screen3/lz_hj_yellow.png" alt=""></div>
<div class="piccon" v-show="String(e.point_status) === '2' && (String(e.stand_status) === '3' || String(e.stand_status) === '4')"><img src="../../assets/images/screen3/lz_hj_green.png" alt=""></div>
<div class="piccon" v-show="String(e.point_status) === '2' && String(e.stand_status) === '5'"><img src="../../assets/images/screen3/lz_hj_red.png" alt=""></div>
<!-- <img v-show="String(e.point_status) === '0'" src="../../assets/images/screen3/hj.png" alt="">
<img v-show="String(e.point_status) === '1'" src="../../assets/images/screen3/lz_hj_gray.png" alt="">
<img v-show="String(e.point_status) === '2' && String(e.stand_status) === '2'" src="../../assets/images/screen3/lz_hj_yellow.png" alt="">
<img v-show="String(e.point_status) === '2' && (String(e.stand_status) === '3' || String(e.stand_status) === '4')" src="../../assets/images/screen3/lz_hj_green.png" alt="">
<img v-show="String(e.point_status) === '2' && String(e.stand_status) === '5'" src="../../assets/images/screen3/lz_hj_red.png" alt=""> -->
<div v-if="pkId === e.point_code" class="popup_block_wraper" :class="youModel" :style="{'top': top, 'left': left}">
<div class="foldline foldline_left" :class="foldlineStyle"></div>
<div class="popup_bg">
<div class="popup_block">
<div class="pop_header">
<div class="pop_name">{{pkObj.point_code}}</div>
<div class="pop_status">
<!-- <div class="pop_status_dot" :class="['green', 'yellow', 'red'][Number(pkObj.stand_status) - 2]"></div> -->
<div class="pop_status_dot" :class="{yellow:pkObj.status ==='2',red:pkObj.status ==='5',green:(pkObj.status ==='3' || pkObj.status ==='4')}"></div>
<div class="pop_status_text fgray">{{pkObj.stand_status_name}}</div>
</div>
</div>
<div class="pop_content">
<div class="pop_item">
<div class="pop_label">状态</div>
<div class="pop_val">{{pkObj.point_status_name}}</div>
</div>
<div class="pop_item">
<div class="pop_label">载具</div>
<div class="pop_val pop_val_s">{{ pkObj.vehicle_code }}</div>
</div>
<div class="pop_item">
<div class="pop_label">BOM号</div>
<div class="pop_val pop_val_s">{{ pkObj.bom }}</div>
</div>
<div class="pop_item">
<div class="pop_label">碾次</div>
<div class="pop_val pop_val_s">{{ pkObj.mix_num }}</div>
</div>
<div class="pop_item">
<div class="pop_label">重量(kg)</div>
<div class="pop_val pop_val_s">{{ pkObj.weight }}</div>
<div class="pop_unit">kg</div>
</div>
<div class="pop_item">
<div class="pop_label">入库时间</div>
<div class="pop_val pop_val_s">{{ pkObj.instorage_time }}</div>
</div>
<div class="pop_item">
<div class="pop_label">静置(h)</div>
<div class="pop_val pop_val_s">{{ pkObj.standing_time }}</div>
<div class="pop_unit">h</div>
</div>
</div>
</div>
</div>
<div class="iconfont icon-guanbi close_btn" @click.stop="closeModal"></div>
</div>
</div>
</div>
<div class="box_l2">
<div v-for="(e,i) in TrappedShelf40List.slice(0, 14)" :key="i" class="picbox" @click.stop="getInfo1(e, i)">
<div class="piccon"><img v-show="String(e.point_status) === '0'" src="../../assets/images/screen3/hj.png" alt=""></div>
<div class="piccon"><img v-show="String(e.point_status) === '1'" src="../../assets/images/screen3/lz_hj_gray.png" alt=""></div>
<div class="piccon"><img v-show="String(e.point_status) === '2' && String(e.stand_status) === '2'" src="../../assets/images/screen3/lz_hj_yellow.png" alt=""></div>
<div class="piccon"><img v-show="String(e.point_status) === '2' && (String(e.stand_status) === '3' || String(e.stand_status) === '4')" src="../../assets/images/screen3/lz_hj_green.png" alt=""></div>
<div class="piccon"><img v-show="String(e.point_status) === '2' && String(e.stand_status) === '5'" src="../../assets/images/screen3/lz_hj_red.png" alt=""></div>
<!-- <div v-for="(e,i) in TrappedShelf40List.slice(20, 40)" :key="i" class="picbox" :class="{'mgt5': i === 6 || i === 10 || i === 14 || i === 18, 'mgt6': i === 6, 'mgt2': i === 2}" @click.stop="getInfo1(e, i)">
<img v-show="String(e.point_status) === '0'" src="../../assets/images/screen3/hj.png" alt="">
<img v-show="String(e.point_status) === '1'" src="../../assets/images/screen3/lz_hj_gray.png" alt="">
<img v-show="String(e.point_status) === '2' && String(e.stand_status) === '2'" src="../../assets/images/screen3/lz_hj_yellow.png" alt="">
<img v-show="String(e.point_status) === '2' && (String(e.stand_status) === '3' || String(e.stand_status) === '4')" src="../../assets/images/screen3/lz_hj_green.png" alt="">
<img v-show="String(e.point_status) === '2' && String(e.stand_status) === '5'" src="../../assets/images/screen3/lz_hj_red.png" alt=""> -->
<div v-if="pkId === e.point_code" class="popup_block_wraper" :class="youModel" :style="{'top': top, 'left': left}">
<div class="foldline foldline_left" :class="foldlineStyle"></div>
<div class="popup_bg">
<div class="popup_block">
<div class="pop_header">
<div class="pop_name">{{pkObj.point_code}}</div>
<div class="pop_status">
<!-- <div class="pop_status_dot" :class="['green', 'yellow', 'red'][Number(pkObj.stand_status) - 2]"></div> -->
<div class="pop_status_dot" :class="{yellow:pkObj.status ==='2',red:pkObj.status ==='5',green:(pkObj.status ==='3' || pkObj.status ==='4')}"></div>
<div class="pop_status_text fgray">{{pkObj.stand_status_name}}</div>
</div>
</div>
<div class="pop_content">
<div class="pop_item">
<div class="pop_label">状态</div>
<div class="pop_val">{{pkObj.point_status_name}}</div>
</div>
<div class="pop_item">
<div class="pop_label">载具</div>
<div class="pop_val pop_val_s">{{ pkObj.vehicle_code }}</div>
</div>
<div class="pop_item">
<div class="pop_label">BOM号</div>
<div class="pop_val pop_val_s">{{ pkObj.bom }}</div>
</div>
<div class="pop_item">
<div class="pop_label">碾次</div>
<div class="pop_val pop_val_s">{{ pkObj.mix_num }}</div>
</div>
<div class="pop_item">
<div class="pop_label">重量(kg)</div>
<div class="pop_val pop_val_s">{{ pkObj.weight }}</div>
<div class="pop_unit">kg</div>
</div>
<div class="pop_item">
<div class="pop_label">入库时间</div>
<div class="pop_val pop_val_s">{{ pkObj.instorage_time }}</div>
</div>
<div class="pop_item">
<div class="pop_label">静置(h)</div>
<div class="pop_val pop_val_s">{{ pkObj.standing_time }}</div>
<div class="pop_unit">h</div>
</div>
</div>
</div>
</div>
<div class="iconfont icon-guanbi close_btn" @click.stop="closeModal"></div>
</div>
</div>
</div>
<div class="box_r1">
<div v-for="(e,i) in TrappedShelf6List.slice(0, 3)" :key="i" class="picbox" @click.stop="getInfo2(e, i)">
<img v-show="String(e.point_status) === '0'" src="../../assets/images/screen3/hj.png" alt="">
<img v-show="String(e.point_status) === '1'" src="../../assets/images/screen3/lz_hj_gray.png" alt="">
<img v-show="String(e.point_status) === '2' && String(e.stand_status) === '2'" src="../../assets/images/screen3/lz_hj_yellow.png" alt="">
<img v-show="String(e.point_status) === '2' && (String(e.stand_status) === '3' || String(e.stand_status) === '4')" src="../../assets/images/screen3/lz_hj_green.png" alt="">
<img v-show="String(e.point_status) === '2' && String(e.stand_status) === '5'" src="../../assets/images/screen3/lz_hj_red.png" alt="">
<div v-if="pkId === e.point_code" class="popup_block_wraper popup_block_wraper2" :style="{'top': top, 'left': left}">
<div class="foldline foldline_left2"></div>
<div class="popup_bg">
<div class="popup_block">
<div class="pop_header">
<div class="pop_name">{{pkObj.point_code}}</div>
<div class="pop_status">
<!-- <div class="pop_status_dot" :class="['green', 'yellow', 'red'][Number(pkObj.stand_status) - 2]"></div> -->
<div class="pop_status_dot" :class="{yellow:pkObj.status ==='2',red:pkObj.status ==='5',green:(pkObj.status ==='3' || pkObj.status ==='4')}"></div>
<div class="pop_status_text fgray">{{pkObj.stand_status_name}}</div>
</div>
</div>
<div class="pop_content">
<div class="pop_item">
<div class="pop_label">状态</div>
<div class="pop_val">{{pkObj.point_status_name}}</div>
</div>
<div class="pop_item">
<div class="pop_label">载具</div>
<div class="pop_val pop_val_s">{{ pkObj.vehicle_code }}</div>
</div>
<div class="pop_item">
<div class="pop_label">BOM号</div>
<div class="pop_val pop_val_s">{{ pkObj.bom }}</div>
</div>
<div class="pop_item">
<div class="pop_label">碾次</div>
<div class="pop_val pop_val_s">{{ pkObj.mix_num }}</div>
</div>
<div class="pop_item">
<div class="pop_label">重量(kg)</div>
<div class="pop_val pop_val_s">{{ pkObj.weight }}</div>
<div class="pop_unit">kg</div>
</div>
<div class="pop_item">
<div class="pop_label">入库时间</div>
<div class="pop_val pop_val_s">{{ pkObj.instorage_time }}</div>
</div>
<div class="pop_item">
<div class="pop_label">静置(h)</div>
<div class="pop_val pop_val_s">{{ pkObj.standing_time }}</div>
<div class="pop_unit">h</div>
</div>
</div>
</div>
</div>
<div class="iconfont icon-guanbi close_btn" @click.stop="closeModal"></div>
</div>
</div>
</div>
<div class="box_r2">
<div v-for="(e,i) in TrappedShelf6List.slice(3, 6)" :key="i" class="picbox" @click.stop="getInfo2(e, i)">
<img v-show="String(e.point_status) === '0'" src="../../assets/images/screen3/hj.png" alt="">
<img v-show="String(e.point_status) === '1'" src="../../assets/images/screen3/lz_hj_gray.png" alt="">
<img v-show="String(e.point_status) === '2' && String(e.stand_status) === '2'" src="../../assets/images/screen3/lz_hj_yellow.png" alt="">
<img v-show="String(e.point_status) === '2' && (String(e.stand_status) === '3' || String(e.stand_status) === '4')" src="../../assets/images/screen3/lz_hj_green.png" alt="">
<img v-show="String(e.point_status) === '2' && String(e.stand_status) === '5'" src="../../assets/images/screen3/lz_hj_red.png" alt="">
<div v-if="pkId === e.point_code" class="popup_block_wraper popup_block_wraper2" :style="{'top': top, 'left': left}">
<div class="foldline foldline_left2"></div>
<div class="popup_bg">
<div class="popup_block">
<div class="pop_header">
<div class="pop_name">{{pkObj.point_code}}</div>
<div class="pop_status">
<!-- <div class="pop_status_dot" :class="['green', 'yellow', 'red'][Number(pkObj.stand_status) - 2]"></div> -->
<div class="pop_status_dot" :class="{yellow:pkObj.status ==='2',red:pkObj.status ==='5',green:(pkObj.status ==='3' || pkObj.status ==='4')}"></div>
<div class="pop_status_text fgray">{{pkObj.stand_status_name}}</div>
</div>
</div>
<div class="pop_content">
<div class="pop_item">
<div class="pop_label">状态</div>
<div class="pop_val">{{pkObj.point_status_name}}</div>
</div>
<div class="pop_item">
<div class="pop_label">载具</div>
<div class="pop_val pop_val_s">{{ pkObj.vehicle_code }}</div>
</div>
<div class="pop_item">
<div class="pop_label">BOM号</div>
<div class="pop_val pop_val_s">{{ pkObj.bom }}</div>
</div>
<div class="pop_item">
<div class="pop_label">碾次</div>
<div class="pop_val pop_val_s">{{ pkObj.mix_num }}</div>
</div>
<div class="pop_item">
<div class="pop_label">重量(kg)</div>
<div class="pop_val pop_val_s">{{ pkObj.weight }}</div>
<div class="pop_unit">kg</div>
</div>
<div class="pop_item">
<div class="pop_label">入库时间</div>
<div class="pop_val pop_val_s">{{ pkObj.instorage_time }}</div>
</div>
<div class="pop_item">
<div class="pop_label">静置(h)</div>
<div class="pop_val pop_val_s">{{ pkObj.standing_time }}</div>
<div class="pop_unit">h</div>
</div>
</div>
</div>
</div>
<div class="iconfont icon-guanbi close_btn" @click.stop="closeModal"></div>
</div>
</div>
</div>
</div>
<div class="box2">
<div class="item_wrap">
<div class="item_tip item_tip_bg_s">
<div class="item_tip_left">困料库存</div>
</div>
<div class="item_content">
<div class="scroll_wrap">
<ul class="scroll_tab_1">
<li>货位</li>
<li style="width: 10%">BOM号</li>
<li style="width: 14%">设备名称</li>
<li>物料名称</li>
<li style="width: 7%">重量</li>
<li>载具号</li>
<li style="width: 6%">静置(h)</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" :class="['c_gray', 'c_yellow', 'c_green', 'c_red'][Number(e.stand_status_color)]">{{e.point_name}}</div> -->
<div class="scroll-ul_1_div">{{e.point_name}}</div>
<div class="scroll-ul_1_div" style="width: 10%">{{e.bom}}</div>
<div class="scroll-ul_1_div" style="width: 14%">{{e.device_name}}</div>
<div class="scroll-ul_1_div">{{e.material_code}}</div>
<div class="scroll-ul_1_div" style="width: 7%">{{e.weight}}</div>
<div class="scroll-ul_1_div">{{e.vehicle_code}}</div>
<div class="scroll-ul_1_div" style="width: 6%">{{e.standing_time}}</div>
<div class="scroll-ul_1_div">{{e.mix_num}}</div>
<div class="scroll-ul_1_div">{{e.stand_status_name}}</div>
</li>
</ul>
</vue-seamless-scroll>
</div>
</div>
</div>
</div>
<div class="item_wrap">
<div class="item_tip item_tip_bg_s">
<div class="item_tip_left">困料出入库</div>
</div>
<div class="item_content">
<div class="scroll_wrap">
<ul class="scroll_tab_1">
<li style="width: 6%;">类别</li>
<li style="width: 9%">BOM号</li>
<li style="width: 13%">设备名称</li>
<li style="width: 7%">重量</li>
<li style="width: 15%">物料名称</li>
<li style="width: 9%">载具号</li>
<li>碾次</li>
<li style="width: 9%">货位</li>
<li style="width: 18%;">出入时间</li>
</ul>
<div class="scroll_container_1">
<vue-seamless-scroll :data="array2" :class-option="defaultOption2">
<ul class="scroll-ul_1">
<li v-for="(e, i) in array2" :key="i">
<div class="scroll-ul_1_div" style="width: 6%;">{{e.io_type}}</div>
<div class="scroll-ul_1_div" style="width: 9%">{{e.bom}}</div>
<div class="scroll-ul_1_div" style="width: 13%">{{e.device_name}}</div>
<div class="scroll-ul_1_div" style="width: 7%">{{e.weight}}</div>
<div class="scroll-ul_1_div" style="width: 15%">{{e.material_code}}</div>
<div class="scroll-ul_1_div" style="width: 9%">{{e.vehicle_code}}</div>
<div class="scroll-ul_1_div">{{e.mix_num}}</div>
<div class="scroll-ul_1_div" style="width: 9%">{{e.point_code}}</div>
<div class="scroll-ul_1_div" style="width: 18%;">{{e.create_time}}</div>
</li>
</ul>
</vue-seamless-scroll>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="tooltip_wrap right_tooltip_wrap" :style="expand ? 'opacity: 1' : 'opacity: 0.1'">
<div class="tooltip_pages" :style="expand ? 'width: 300px' : 'width: 0'">
<router-link to="/setup" class="tooltip_page">配置</router-link>
<router-link to="/homepagetwo" class="tooltip_page">1</router-link>
<div class="tooltip_page current_page pointer">2</div>
<router-link to="/takeshapetwo" class="tooltip_page">3</router-link>
<router-link to="/firedrytwo" class="tooltip_page">4</router-link>
<router-link to="/sortpacktwo" class="tooltip_page">5</router-link>
<router-link to="/pdtwo" class="tooltip_page">6</router-link>
</div>
<div class="tooltip_arrow pointer" @click="expandTooltip" v-text="expand ? '&lt;&lt;' : '&gt;&gt;'"></div>
</div>
<div class="style_block" style="left: calc(100% / 3);top:0;"></div>
<div class="style_block" style="background: green;left: calc(100% / 3);top:calc(100% / 3);"></div>
<div class="style_block" style="left: calc(100% / 3);bottom: 0"></div>
<div class="style_block" style="background: green;left: calc(200% / 3);top:0;"></div>
<div class="style_block" style="left: calc(200% / 3);top:calc(100% / 3);"></div>
<div class="style_block" style="background: blue;left: calc(200% / 3);bottom: 0"></div>
</div>
</template>
<script>
import { trappedMaterialCondition } from '@js/getData0'
export default {
name: 'one',
data () {
return {
interTime: this.$store.getters.setTime,
timer: null,
expand: false,
top: '',
left: '',
youModel: '',
foldlineStyle: '',
pkId: '',
pkObj: {
aaa: 'aaa',
num: '3'
},
resData: {},
TrappedShelf40List: [],
TrappedShelf6List: [],
array1: [],
array2: []
// array1: [{workorder_code: 'hl00001', device_name: '混碾机1', bom: 'WL001', material_code: '1号混料', plan_qty: '5000', real_qty: '200', total_mix_frequency: '230505001001', order_status: '生产完成', realproducestart_date: '10-11 19:11:00', realproduceend_date: '10-11 19:11:00'}]
// array2: [{workorder_code: 'hl00001', device_name: '混碾机1', bom: 'WL001', material_code: '1号混料', plan_qty: '5000', real_qty: '200', total_mix_frequency: '230505001001', order_status: '生产完成', realproducestart_date: '10-11 19:11:00', realproduceend_date: '10-11 19:11:00'}]
}
},
computed: {
defaultOption1 () {
return {
step: 0.4, // 数值越大速度滚动越快
limitMoveNum: 6, // 开始无缝滚动的数据量 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: 6, // 开始无缝滚动的数据量 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.initData()
this.refresh()
},
beforeDestroy () {
clearInterval(this.timer)
},
methods: {
refresh () {
this.timer = setInterval(() => {
this.initData()
}, this.interTime)
},
expandTooltip () {
this.expand = !this.expand
},
getInfo1 (e, i) {
this.pkId = e.point_code
this.pkObj = e
if (i === 0 || i === 1 || i === 2 || i === 3 || i === 4 || i === 5 || i === 6 || i === 20 || i === 21 || i === 22 || i === 23 || i === 24 || i === 25 || i === 26) {
this.youModel = 'popup_block_wraper2'
this.foldlineStyle = 'foldline_left2'
} else {
this.youModel = ''
this.foldlineStyle = ''
}
},
getInfo2 (e, i) {
this.pkId = e.point_code
this.pkObj = e
},
closeModal () {
this.pkId = ''
this.pkObj = {}
},
async initData () {
let res = await trappedMaterialCondition()
this.resData = res.result
this.TrappedShelf40List = res.result.TrappedShelf40List
this.TrappedShelf6List = res.result.TrappedShelf6List
this.array1 = res.result.TrappedStockList
this.array2 = res.result.TrappedIOStockList
}
}
}
</script>
<style lang="stylus" scoped>
@import '~@css/mixin2'
.c_gray
color $gray1 !important
.c_yellow
color $yellow !important
.c_green
color $green !important
.c_red
color $orange !important
.n_container
position relative
_wh(100%, 100%)
.n_header
_wh(100%, 8%)
_bis('../../assets/images/screen3/bg_header.jpg')
.n_header_h1
_wh(100%, 100%)
_fj(row, flex-start)
_bis('../../assets/images/screen3/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 0px 0
_bis('../../assets/images/screen3/bg_content_r.jpg')
.n_body_container_wraper
_wh(100%, 100%)
_fj()
.status_wrap
position absolute
top 18px
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
.red
background-color $orange
.box1
position relative
_wh(100%, 58%)
// border 1px solid rgba(8,205,248,0.3)
// border-left none
.box_l1
_wh(3%, 10%)
position absolute
top 25%
right 20%
z-index 2
transform rotate(90deg)
.picbox
position relative
width 100%
margin-bottom 1%
.piccon
// _wh(100%, auto)
// width 100%
height auto
box-sizing border-box
border 1px solid #ff0
border-radius 8px
img
_wh(80%, 100%)
position: relative;
left: 20%;
// img
// _wh(100%, auto)
.box_l2
_wh(3%, 10%)
position absolute
top 65%
right 20%
z-index 2
transform rotate(90deg)
.picbox
position relative
width 100%
margin-bottom 1%
.piccon
// _wh(100%, auto)
// width 100%
height auto
box-sizing border-box
border 1px solid #ff0
border-radius 8px
img
_wh(80%, 100%)
position: relative;
left: 20%;
// img
// _wh(100%, auto)
.box_r1
_wh(3%, 10%)
position absolute
top 25%
right 2%
z-index 2
transform rotate(90deg)
.picbox
position relative
width 100%
margin-bottom 20%
img
_wh(100%, auto)
.box_r2
_wh(3%, 10%)
position absolute
top 65%
right 2%
z-index 2
transform rotate(90deg)
.picbox
position relative
width 100%
margin-bottom 20%
img
_wh(100%, auto)
.mgt5
margin-top 55%
.mgt2
margin-top 80%
.mgt6
margin-top 42%
.box2
_wh(100%, 37.5%)
_fj(row)
.item_wrap
_wh(calc(50% - 8px), 100%)
position relative
z-index 10
.item_tip
_wh(100%, 32px)
line-height 32px
padding 0 10px
.item_tip_bg_s
_bis('../../assets/images/screen3/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('../../assets/images/screen3/bg_title_tip.png', 22px, 22px, left)
.item_content
_wh(100%, calc(100% - 32px))
padding 10px 5px
.scroll_wrap
_wh(100%, 100%)
border 1px solid rgba(8,205,248,0.3)
// background-color #070b1c
.scroll_tab_1
_wh(100%, 40px)
border-bottom 1px solid rgba(8,205,248,0.3)
li
float left
width 12.5%
_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 1px 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(12.5%, 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
.popup_block_wraper
position absolute
top: -706%;
left: -287%;
z-index 10
transform rotate(-90deg)
.popup_block_wraper2
position absolute
top: 515%;
left: -277%;
z-index 10
transform rotate(-90deg)
.foldline_left2
left 530px
transform rotateY(0)
.foldline_left
left -29px
</style>

View File

@@ -0,0 +1,852 @@
<template>
<section class="bg">
<t-header title="顺和大屏监控——仓储监控">
<!-- <p class="p1">1</p> -->
</t-header>
<div class="container">
<div class="top_wrapper">
<div class="yard-wrap">
<div class="cont-1">
<div class="corridor_2">困料监控</div>
<div class="tags">
<div class="tag_type">
<div class="type_color green"></div>
<div class="tag_text">静置中</div>
</div>
<div class="tag_type">
<div class="type_color blue"></div>
<div class="tag_text">空盅</div>
</div>
<div class="tag_type">
<div class="type_color yellow"></div>
<div class="tag_text">静置完成</div>
</div>
<div class="tag_type">
<div class="type_color red"></div>
<div class="tag_text">强制完成</div>
</div>
</div>
</div>
<div class="yard_group clearfix">
<div class="yard_group_ul yard_group_ul_1 fl">
<div class="yard_group_cell" v-for="(e, i) in group01" :key="i" :class="{lock:e.lock_type ==='01'}">
<div class="yard_group_p" @click="getInfo1(e)">
<p class="fontselect">{{e.point_name}}</p>
<div v-if="e.struct_url == '1'" class="machine_1"></div>
<!-- <div class="ingbox" :style="{height:(Number(e.show_struct_qty)/1000*60+'px')}" :class="{green:e.stand_status ==='2',yellow:e.stand_status ==='3',red:e.stand_status ==='4',blue:e.stand_status ==='5'}"></div> -->
<div class="ingbox" style="height:78px;" :class="{green:e.stand_status ==='2',yellow:e.stand_status ==='3',red:e.stand_status ==='4',blue:e.stand_status ==='5'}"></div>
</div>
<div v-show="code1 === e.point_code" class="locate-wrap clearfix" :class="e.mgl">
<div :class="e.aline">
<div class="foldcricle0 foldcricle1"></div>
<div class="foldline0 foldline1"></div>
</div>
<div :class="e.bline">
<div class="foldline0 foldline2"></div>
<div class="foldcricle0 foldcricle2"></div>
</div>
<div class="clearfix locate-content" :class="e.coordinate">
<div class="tan_pline">
<p class="tan_p">货位{{e.storageLocation}}<span :class="{cgreen:e.stand_status ==='2',cyellow:e.stand_status ==='3',cred:e.stand_status ==='4',cblue:e.stand_status ==='5'}">{{e.standStatus}}</span></p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">重量(kg){{e.weight}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
<p class="tan_p">静置(h){{e.standTime}}</p>
</div>
<div class="iconfont icon-guanbi close_btn" @click="closebtn"></div>
</div>
</div>
</div>
</div>
<div class="yard_group_ul yard_group_ul_3 fr">
<div class="yard_group_cell" v-for="(e, i) in group03" :key="i" :class="{lock:e.lock_type ==='01'}">
<div class="yard_group_p" @click="getInfo1(e)">
<p class="fontselect">{{e.point_name}}</p>
<div v-if="e.struct_url == '1'" class="machine_1"></div>
<div class="ingbox" style="height:78px;" :class="{green:e.stand_status ==='2',yellow:e.stand_status ==='3',red:e.stand_status ==='4',blue:e.stand_status ==='5'}"></div>
</div>
<div v-show="code1 === e.point_code" class="locate-wrap clearfix" :class="e.mgl">
<div :class="e.aline">
<div class="foldcricle0 foldcricle1"></div>
<div class="foldline0 foldline1"></div>
</div>
<div :class="e.bline">
<div class="foldline0 foldline2"></div>
<div class="foldcricle0 foldcricle2"></div>
</div>
<div class="clearfix locate-content" :class="e.coordinate">
<div class="tan_pline">
<p class="tan_p">货位{{e.point_name}}<span :class="{cgreen:e.stand_status ==='2',cyellow:e.stand_status ==='3',cred:e.stand_status ==='4',cblue:e.stand_status ==='5'}">{{e.stand_status_name}}</span></p>
<p class="tan_p">载具{{e.vehicle_code}}</p>
<p class="tan_p">BOM{{e.material_code}}</p>
<p class="tan_p">重量(千克){{e.ivt_qty}}</p>
<p class="tan_p">入库时间{{e.instorage_time}}</p>
<p class="tan_p">静置(小时){{e.standing_time}}</p>
</div>
<div class="iconfont icon-guanbi close_btn" @click="closebtn"></div>
</div>
</div>
</div>
</div>
</div>
<div class="corridor_2">成型暂存监控</div>
<div class="yard_group clearfix">
<div class="yard_group_ul yard_group_ul_2">
<div class="yard_group_cell" v-for="(e, i) in group02" :key="i" :class="{lock:e.lock_type ==='01'}">
<div class="yard_group_p" @click="getInfo1(e)">
<p class="fontselect">{{e.point_name}}</p>
<div v-if="e.struct_url == '2'" class="machine_2"></div>
<div class="ingbox" :style="{height:(Number(e.show_struct_qty)/1000*60+'px')}"></div>
</div>
<div v-show="code1 === e.point_code" class="locate-wrap clearfix" :class="e.mgl">
<div :class="e.aline">
<div class="foldcricle0 foldcricle1"></div>
<div class="foldline0 foldline1"></div>
</div>
<div :class="e.bline">
<div class="foldline0 foldline2"></div>
<div class="foldcricle0 foldcricle2"></div>
</div>
<div class="clearfix locate-content" :class="e.coordinate">
<div class="tan_pline">
<p class="tan_p">货位{{e.storageLocation}}</p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">库存(){{e.qty}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
</div>
<div class="iconfont icon-guanbi close_btn" @click="closebtn"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="yard-right">
<div class="corridor_2">出窑暂存监控</div>
<div class="yard_group clearfix">
<div class="yard_group_ul yard_group_ul_4">
<div class="yard_group_cell" v-for="(e, i) in group02.slice(0, 26)" :key="i" :class="{lock:e.lock_type ==='01', 'mgt5': i === 2 || i === 6 || i === 10 || i === 14 || i === 18 || i === 22, 'mgt6': i === 3 || i === 7 || i === 11 || i === 15 || i === 19 || i === 23}">
<div class="yard_group_p" @click="getInfo1(e)">
<p class="fontselect">{{e.point_name}}</p>
<div v-if="e.struct_url == '2'" class="machine_2" style="height: 42px;"></div>
<div class="ingbox" :style="{height:(Number(e.show_struct_qty)/1000*60+'px')}"></div>
</div>
<div v-show="code1 === e.point_code" class="locate-wrap clearfix" :class="e.mgl">
<div :class="e.aline">
<div class="foldcricle0 foldcricle1"></div>
<div class="foldline0 foldline1"></div>
</div>
<div :class="e.bline">
<div class="foldline0 foldline2"></div>
<div class="foldcricle0 foldcricle2"></div>
</div>
<div class="clearfix locate-content" :class="e.coordinate">
<div class="tan_pline">
<p class="tan_p">货位{{e.storageLocation}}</p>
<p class="tan_p">载具{{e.vehicleCode}}</p>
<p class="tan_p">物料{{e.materialCode}}</p>
<p class="tan_p">名称{{e.materialName}}</p>
<p class="tan_p">库存(){{e.qty}}</p>
<p class="tan_p">入库时间{{e.warehousingTime}}</p>
</div>
<div class="iconfont icon-guanbi close_btn" @click="closebtn"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="bottom_wrapper">
<div class="bottom_wrapper_l">
<div class="block_h2">
<h2>困料库存</h2>
</div>
<div class="list_scroll_title">
<span>货位</span><span>物料编码</span><span>物料名称</span><span>重量(kg)</span><span>已静置(h) </span><span>状态</span>
</div>
<vue-seamless-scroll :data="array1" :class-option="classOption" class="content-block-scroll">
<ul class="content-block-scroll-ul">
<li v-for="(e, i) in array1" :key="i">
<span>{{e.storageLocation}}</span><span>{{e.materialCode}}</span><span>{{e.materialName}}</span><span>{{e.weight}}</span><span>{{e.standTime}}</span><span>{{e.standStatus}}</span>
</li>
</ul>
</vue-seamless-scroll>
</div>
<div class="bottom_wrapper_l">
<div class="block_h2">
<h2>成型库存</h2>
</div>
<div class="list_scroll_title">
<span>货位</span><span>物料编码</span><span>物料名称</span><span>库存数()</span><span>托盘号</span><span>入库时间</span>
</div>
<vue-seamless-scroll :data="array2" :class-option="classOption" class="content-block-scroll">
<ul class="content-block-scroll-ul">
<li v-for="(e, i) in array2" :key="i">
<span>{{e.storageLocation}}</span><span>{{e.materialCode}}</span><span>{{e.materialName}}</span><span>{{e.qty}}</span><span>{{e.vehicleCode}}</span><span>{{e.warehousingTime}}</span>
</li>
</ul>
</vue-seamless-scroll>
</div>
<div class="bottom_wrapper_l">
<div class="block_h2">
<h2>半成品库存</h2>
</div>
<div class="list_scroll_title">
<span>货位</span><span>物料编码</span><span>物料名称</span><span>库存数()</span><span>托盘号</span><span>入库时间</span>
</div>
<vue-seamless-scroll :data="array3" :class-option="classOption" class="content-block-scroll">
<ul class="content-block-scroll-ul">
<li v-for="(e, i) in array3" :key="i">
<span>{{e.storageLocation}}</span><span>{{e.materialCode}}</span><span>{{e.materialName}}</span><span>{{e.qty}}</span><span>{{e.vehicleCode}}</span><span>{{e.warehousingTime}}</span>
</li>
</ul>
</vue-seamless-scroll>
</div>
</div>
</div>
<section class="bottom"></section>
</section>
</template>
<script>
import THeader from '@components/header.vue'
import { storageMonitor } from '@js/getData11'
export default {
name: 'StorageMonitor',
components: {
THeader
},
data () {
return {
interTime: this.$store.getters.setTime,
timer: null,
materArr1: [],
materArr2: [],
structArr: [],
array1: [],
array2: [],
array3: [],
group01: [],
group02: [],
group03: [],
code1: ''
}
},
computed: {
// classOption () {
// return {
// step: 0.4,
// limitMoveNum: 6
// }
// }
classOption () {
return {
step: 0.6, // 数值越大速度滚动越快
limitMoveNum: 10, // 开始无缝滚动的数据量 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 () {
// lock_type 00空闲01锁定
// stand_status 0为空2为静置中3为静置完成4为强制静置完成5为静置超时
// 编号排布
// 12排
// let pai1 = []
// let pai2 = []
// let pai12 = []
// for (let i = 1; i <= 20; i++) {
// if (i <= 10) {
// pai1.push({sequence_number: i * 2 - 1, coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
// pai2.push({sequence_number: i * 2, coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
// } else {
// pai1.push({sequence_number: i * 2 - 1, coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
// pai2.push({sequence_number: i * 2, coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
// }
// }
// pai12 = pai1.concat(pai2)
// this.group01 = pai12
// // 34排
// let pai3 = []
// let pai4 = []
// let pai34 = []
// for (let i = 21; i <= 38; i++) {
// if (i <= 30) {
// pai3.push({sequence_number: i * 2 - 1, coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
// pai4.push({sequence_number: i * 2, coordinate: 'coordinate3', aline: 'aline3', bline: 'bline3', show: 0})
// } else {
// pai3.push({sequence_number: i * 2 - 1, coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
// pai4.push({sequence_number: i * 2, coordinate: 'coordinate3', aline: 'aline3', bline: 'bline3', show: 0})
// }
// }
// pai34 = pai3.concat(pai4)
// this.group02 = pai34
// // 56排
// let pai5 = []
// let pai6 = []
// let pai56 = []
// for (let i = 39; i <= 46; i++) {
// if (i <= 4) {
// pai5.push({sequence_number: i * 2 - 1, coordinate: 'coordinate3', aline: 'aline3', bline: 'bline3', show: 0})
// pai6.push({sequence_number: i * 2, coordinate: 'coordinate3', aline: 'aline3', bline: 'bline3', show: 0})
// } else {
// pai5.push({sequence_number: i * 2 - 1, coordinate: 'coordinate3', aline: 'aline3', bline: 'bline3', show: 0})
// pai6.push({sequence_number: i * 2, coordinate: 'coordinate3', aline: 'aline3', bline: 'bline3', show: 0})
// }
// }
// pai56 = pai5.concat(pai6)
// this.group03 = pai56
// end
this.initData()
this.refresh()
},
beforeDestroy () {
clearInterval(this.timer)
},
methods: {
refresh () {
this.timer = setInterval(() => {
// this.code1 = ''
this.initData()
}, this.interTime)
},
async initData () {
let res = await storageMonitor()
this.array1 = res.standStock
this.array2 = res.frontWarehouseStock
this.array3 = res.backWarehouseStock
this.group01 = [...res.result.materialTask]
this.group02 = [...res.result.productionTask]
this.group03 = [...res.result.materialYJTask]
for (let i = 0; i < this.group01.length; i++) {
this.group01[i] = Object.assign(this.group01[i], {mgl: 'mgl1', coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
}
for (let i = 0; i < this.group03.length; i++) {
this.group03[i] = Object.assign(this.group03[i], {mgl: 'mgl2', coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
}
for (let i = 0; i < this.group02.length; i++) {
if (i === 21 || i === 22 || i === 23 || i === 24 || i === 25 || i === 47 || i === 48 || i === 49 || i === 50 || i === 51) {
this.group02[i] = Object.assign(this.group02[i], {mgl: 'mgl2', coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
} else {
this.group02[i] = Object.assign(this.group02[i], {mgl: 'mgl1', coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
}
}
// for (let i = 1; i <= 20; i++) {
// if (i <= 10) {
// group01.push({sequence_number: i * 2 - 1, coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
// group01.push({sequence_number: i * 2, coordinate: 'coordinate1', aline: 'aline1', bline: 'bline1', show: 0})
// } else {
// group01.push({sequence_number: i * 2 - 1, coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
// group01.push({sequence_number: i * 2, coordinate: 'coordinate2', aline: 'aline2', bline: 'bline2', show: 0})
// }
// }
// for (let i = 0; i < this.structArr.length; i++) {
// for (let j = 0; j < this.group01.length; j++) {
// if (this.structArr[i].sequence_number === this.group01[j].sequence_number + '') {
// this.group01[j] = Object.assign(this.group01[j], this.structArr[i])
// }
// }
// }
// for (let i = 0; i < this.structArr.length; i++) {
// for (let j = 0; j < this.group02.length; j++) {
// if (this.structArr[i].sequence_number === this.group02[j].sequence_number + '') {
// this.group02[j] = Object.assign(this.group02[j], this.structArr[i])
// }
// }
// }
// for (let i = 0; i < this.structArr.length; i++) {
// for (let j = 0; j < this.group03.length; j++) {
// if (this.structArr[i].sequence_number === this.group03[j].sequence_number + '') {
// this.group03[j] = Object.assign(this.group03[j], this.structArr[i])
// }
// }
// }
},
// getdata(e) {
// // getdata(21),22,23
// // this.code1 = this.code1 === id ? '' : id
// // list
// id:xxx,
// show: false
// 】
// e.show = true
// {show: true}
// show:false
// },
getInfo1 (e) {
this.code1 = this.code1 === e.point_code ? '' : e.point_code
},
closebtn () {
this.code1 = ''
}
}
}
</script>
<style lang="stylus" scoped>
@import '~@css/mixin'
.cgreen
color #30EBC9 !important
.cyellow
color #E2BB0E !important
.cred
color #FF0000 !important
.status1
color #32C5FF
.status2
color #F7B502
.bg
_wh(100%, 100%)
overflow hidden
.container
_wh(100%, calc(100% - 1.38rem))
padding 0rem .2509rem 0
overflow hidden
clear both
.bottom
_wh(100%, .38rem)
background center bottom / 19.06rem 100% url(../../assets/images/screen1/bottom.png) no-repeat
position fixed
bottom 0
.top_wrapper
position relative
height 66%
display flex
.tag_block
position absolute
// bottom .1rem
top -5px
right .3rem
_fj(row)
.tag_type
_fj(row)
.type_color
width .1rem
height .1rem
border-radius 50%
margin-right 10px
.tag_text
font-size .12rem
line-height .2rem
.blue
background #32C5FF !important
.green
background #30EBC9 !important
.gray
background #516282 !important
.yellow
background #E2BB0E !important
.orange
background #F96700 !important
.red
background #FF0000 !important
.cblue
color #32C5FF !important
.cgreen
color #30EBC9 !important
.cgray
color #516282 !important
.cyellow
color #E2BB0E !important
.corange
color #F96700 !important
.cred
color #FF0000 !important
.lock
border .02rem solid #f00 !important
.yard-wrap
// height 6.95rem
height 100%
width 80%
// padding .1rem 0
.yard_group
width 100%
// height calc(50% - 46px)
clear both
&:nth-child(1)
margin-bottom 20px
.yard_group_ul
float left
display grid
grid-gap 0
justify-items center
align-items center
margin-top -.01rem
.yard_group_ul_1
width 80%
position absolute
grid-template-columns repeat(18, 80% / 18)
// grid-template-rows repeat(2, 1.8rem / 2)
grid-template-rows repeat(2, 110px)
.yard_group_ul_2
width 100%
position absolute
grid-template-columns repeat(14, 80% / 14)
// grid-template-columns repeat(26, 100% / 26)
// grid-template-rows repeat(2, 1.8rem / 2)
grid-template-rows repeat(2, 110px)
.yard_group_ul_3
width 20%
grid-template-columns repeat(5, 100% / 5)
// grid-template-rows repeat(2, 1.8rem / 2)
grid-template-rows repeat(2, 110px)
.yard_group_ul_4
width 100%
grid-template-columns repeat(4, 80% / 4)
// grid-template-rows repeat(2, 1.8rem / 2)
grid-template-rows repeat(7, 73px)
.yard_group_cell
position relative
display inline-block
width 100%
// height calc(1.8rem / 2)
height 100%
box-sizing border-box
border 1px solid #32C5FF
background #000F2B
border-radius 8px
.yard_group_p
// height calc(1.8rem / 2)
height 90px
p
font-size 12px
// line-height 0.28rem
line-height 28px
height 28px
-webkit-text-size-adjust none
text-align center
white-space nowrap
img
display block
width 60%
// height 0.6rem
height 60px
margin 0 auto
.machine_1
position absolute
width 60%
width 100%
height 78px
overflow hidden
background center center / 100% 100% url(../../assets/images/screen1/zhong.png) no-repeat
margin 0 auto
z-index 98
// left 50%
// margin-left -30%
opacity 0.5
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
.machine_2
position absolute
width 60%
width 100%
height 78px
overflow hidden
background center center / 100% 100% url(../../assets/images/screen1/cp1.jpg) no-repeat
margin 0 auto
z-index 98
// left 50%
// margin-left -30%
opacity 0.5
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
.ingbox
position absolute
bottom 0
width 100%
z-index 97 //
.corridor_2
_wh(80%,22px)
_font(16px, 22px, #fff,,left)
margin 22px 12px 30px 0
.locate-wrap
position absolute
width 100%
bottom -40%
.locate-content
position absolute
width 2.9rem
height 2.74rem
z-index 99
background center center / 100% 100% url(../../assets/images/screen1/popover_1.png) no-repeat
padding .36rem .15rem
.tan_pline
width 100%
margin 0 auto
.tan_p
font-size .12rem
line-height .36rem
height .36rem
overflow hidden
color #fff
span
padding-right .4rem
float right
.close_btn
position absolute
top 3%
right 10%
margin-right -.25rem
font-size .14rem
line-height .34rem
padding 0 .16rem
border-radius 5px
cursor pointer
.bottom_wrapper
display flex
width 100%
height 40%
// padding-top 120px
padding-bottom 10px
_fj(row)
.bottom_wrapper_l
// _wh(calc(33%), 100%)
width 100%
height 100%
position relative
#echarts1
// margin-left 2rem
position absolute
top 0
left 0
z-index 9
#echarts3
// margin-left 2rem
position absolute
top -30px
// left 60px
left .60rem
z-index 10
.title
position absolute
top .15rem
left .25rem
// .block_h2
// _wh(100%, 22px)
// margin 12px
// h2
// font-size 16px
// line-height 22px
.block_h2
_wh(calc(100% - 12px), 32px)
margin 17px 0 10px 0
padding-left 0.55rem
background center center / 100% 100% url(../../assets/images/screen1/title_bg_d1.png) no-repeat
h2
_font(16px, 32px, #fff,,left)
.list_scroll_title
width calc(100% - 12px)
// width calc(100% - 30px)
// margin 0 15px
background #262F52
span
display inline-block
width 16%
text-align center
line-height 32px
font-size 12px
color rgba(255,255,255,0.60)
// float left
&:nth-child(2)
width 20%
.content-block-scroll
// width calc(100% - 30px)
// margin 0 15px 4px 15px
width calc(100% - 12px)
margin 0 0px 4px 0px
height calc(100% - 82px)
overflow hidden
.content-block-scroll-ul
width 100%
li
width 100%
height 38px
_fj(row, center)
&:nth-child(2n)
background rgba(38,47,82,0.50)
span
display inline-block
width 18%
padding 0 2px
font-size 12px
text-align center
line-height 38px
box-sizing border-box
// float left
&:nth-child(2)
width 28%
.foldcricle0
position absolute
z-index 102
width .24rem
height .24rem
background center center / 100% 100% url(../../assets/images/screen1/dot.png) no-repeat
.foldcricle2
top .50rem
left .6rem
.foldcricle1
top 0
left -0.1rem
.foldline0
position absolute
z-index 102
border 1px dashed #32C5FF
height 1px
.foldline1
width .33rem
top .12rem
left .09rem
.foldline2
width .60rem
top .39rem
left .27rem
transform rotate(60deg)
.coordinate1
left .9rem
top -.14rem
.coordinate2
right .86rem
top -.14rem
.coordinate3
left .9rem
bottom .86rem
.aline1
position absolute
z-index 102
top -.70rem
left .88rem
.bline1
position absolute
top -.70rem
left .93rem
.aline2
position absolute
z-index 102
transform rotate(180deg)
top -.50rem
left 0px
.bline2
position absolute
z-index 102
transform rotate(60deg)
top -1.05rem
right 1.28rem
.aline3
position absolute
z-index 102
transform rotate(0deg)
bottom .7rem
left .88rem
.bline3
position absolute
z-index 102
transform rotate(-120deg)
bottom .2rem
left 1.38rem
// .foldcricle0
// position absolute
// z-index 102
// width 24px
// height 24px
// background center center / 100% 100% url(../../assets/images/screen1/dot.png) no-repeat
// .foldcricle2
// top 50px
// left 55px
// .foldcricle1
// top 0
// left -0.1rem
// .foldline0
// position absolute
// z-index 102
// border 1px dashed #32C5FF
// height 1px
// .foldline1
// width 30px
// top 12px
// left 9px
// .foldline2
// width 60px
// top 38px
// left 24px
// transform rotate(60deg)
// .coordinate1
// left 38px
// top -14px
// .coordinate2
// right 53px
// top -14px
// .coordinate3
// left 38px
// bottom 66px
// .aline1
// position absolute
// z-index 102
// top -70px
// left 88px
// .bline1
// position absolute
// top -70px
// left 88px
// .aline2
// position absolute
// z-index 102
// transform rotate(180deg)
// top -50px
// left 0px
// .bline2
// position absolute
// z-index 102
// transform rotate(60deg)
// top -100px
// right 138px
// .aline3
// position absolute
// z-index 102
// transform rotate(0deg)
// bottom 50px
// left 88px
// .bline3
// position absolute
// z-index 102
// transform rotate(-120deg)
// bottom -2px
// left 138px
.yard_group_p
_wh(100%, 100%)
.fontselect
_font(12px, 30px, #fff,,)
// transform scale(0.8)
white-space:nowrap
.mgl1
margin-left -22px
.mgl2
margin-left 0px
.yard-right
width 18%
height 100%
margin-left 2%
box-sizing border-box
border 1px solid #32c5ff
.cont-1
display flex
.tags
display flex
width 20%
align-items center
justify-content space-around
.mgt5
margin-left 100px
.mgt6
margin-left 150%
</style>