This commit is contained in:
2023-02-28 14:02:39 +08:00
commit 9b86baa44f
170 changed files with 29943 additions and 0 deletions

View File

@@ -0,0 +1,850 @@
<template>
<section>
<t-header index='1'></t-header>
<div class="content clearfix">
<div class="con1">
<div class="yard-wrap">
<div class="yard_group clearfix">
<div class="yard_group_ul yard_group_ul_1">
<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.struct_code}}</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="{blue:e.struct_status ==='01',green:e.struct_status ==='02',yellow:e.struct_status ==='03',red:e.struct_status ==='04',gray:e.struct_status ==='05'}"></div>
</div>
<div v-show="code1 === e.sequence_number" class="locate-wrap clearfix">
<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.struct_code}}</p>
<p class="tan_p">载具{{e.storagevehicle_code}}</p>
<p class="tan_p">物料{{e.material_code}}</p>
<p class="tan_p">名称{{e.material_name}}</p>
<p class="tan_p">重量{{e.ivt_qty}}</p>
<p class="tan_p">入库时间{{e.instorage_time}}</p>
<p class="tan_p">静置(h){{e.finish_times}}</p>
</div>
<div class="iconfont icon-guanbi close_btn" @click="closebtn"></div>
</div>
</div>
</div>
</div>
</div>
<div class="corridor_2">&nbsp;</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.struct_code}}</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="{blue:e.struct_status ==='01',green:e.struct_status ==='02',yellow:e.struct_status ==='03',red:e.struct_status ==='04',gray:e.struct_status ==='05'}"></div>
</div>
<div v-show="code1 === e.sequence_number" class="locate-wrap clearfix">
<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.struct_code}}</p>
<p class="tan_p">载具{{e.storagevehicle_code}}</p>
<p class="tan_p">物料{{e.material_code}}</p>
<p class="tan_p">名称{{e.material_name}}</p>
<p class="tan_p">重量{{e.ivt_qty}}</p>
<p class="tan_p">入库时间{{e.instorage_time}}</p>
<p class="tan_p">静置(h){{e.finish_times}}</p>
</div>
<div class="iconfont icon-guanbi close_btn" @click="closebtn"></div>
</div>
</div>
</div>
</div>
</div>
<div class="corridor_2">&nbsp;</div>
<div class="yard_group clearfix">
<div class="yard_group_ul yard_group_ul_3">
<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.struct_code}}</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="{blue:e.struct_status ==='01',green:e.struct_status ==='02',yellow:e.struct_status ==='03',red:e.struct_status ==='04',gray:e.struct_status ==='05'}"></div>
</div>
<div v-show="code1 === e.sequence_number" class="locate-wrap clearfix">
<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.struct_code}}</p>
<p class="tan_p">载具{{e.storagevehicle_code}}</p>
<p class="tan_p">物料{{e.material_code}}</p>
<p class="tan_p">名称{{e.material_name}}</p>
<p class="tan_p">重量{{e.ivt_qty}}</p>
<p class="tan_p">入库时间{{e.instorage_time}}</p>
<p class="tan_p">静置(h){{e.finish_times}}</p>
</div>
<div class="iconfont icon-guanbi close_btn" @click="closebtn"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="tag_block">
<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 gray"></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="con-b con2">
<div id="echarts1" style="width: 100%;height:108%;"></div>
<div id="echarts3" style="width: 100%;height:108%;"></div>
<div class="title">物料库存</div>
</div>
<div class="con-b con3">
<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="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.struct_name}}</span><span>{{e.material_code}}</span><span>{{e.material_name}}</span><span>{{e.ivt_qty}}</span><span>{{e.finish_times}}</span><span :class="{cgreen: e.status=='02', cyellow:e.status ==='03',cred:e.status ==='04'}">{{e.status_name}}</span>
</li>
</ul>
</vue-seamless-scroll>
</div>
</div>
</section>
</template>
<script>
import THeader from '@components/header.vue'
import * as echarts from 'echarts'
export default {
name: 'StorageMonitor',
components: {
THeader
},
data () {
return {
interTime: this.$store.getters.setTime,
timer: null,
materArr1: [],
materArr2: [],
structArr: [],
array1: [],
group01: [],
group02: [],
group03: [],
code1: ''
}
},
computed: {
// classOption () {
// return {
// step: 0.4,
// limitMoveNum: 6
// }
// }
classOption () {
return {
step: 0.2, // 数值越大速度滚动越快
limitMoveNum: 3, // 开始无缝滚动的数据量 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锁定
// struct_status 00为空01为空盅02为静置中03为静置完成04为强制完成05为禁用
// 编号排布
// 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
// 加载echarts图表
this.initData()
this.refresh()
},
beforeDestroy () {
clearInterval(this.timer)
},
methods: {
refresh () {
this.timer = setInterval(() => {
this.code1 = ''
this.initData()
}, this.interTime)
},
// 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.sequence_number ? '' : e.sequence_number
},
closebtn () {
this.code1 = ''
},
getEchart1 () {
var finishArr = []
var materArr = []
this.materArr1.map(el => {
finishArr.push(el.finished_qty)
materArr.push(el.material_code)
})
var option = {
legend: {
top: 10,
right: 10,
textStyle: {
color: '#ffffff',
fontSize: 12,
lineHeight: 20
},
itemGap: 20,
itemHeight: 8,
data: ['完成物料']
},
xAxis: {
type: 'category',
// data: ['1号砖', '2号砖', '3号砖', '4号砖', '5号砖', '6号砖', '7号砖'],
data: materArr,
axisLine: {
show: false,
lineStyle: {
color: '#fff'
}
}
},
// yAxis: {
// type: 'value'
// },
yAxis: {
// splitNumber: 5,
// 设置坐标轴字体颜色和宽度
axisLine: {
show: false,
lineStyle: {
color: '#fff'
}
},
axisTick: {
show: false
}
},
series: [{
name: '完成物料',
// data: [10, 50, 30, 20, 60, 70, 80],
data: finishArr,
type: 'bar',
barWidth: 10,
itemStyle: {
normal: {
// label: {
// show: true,
// position: 'top',
// color: '#fff',
// distance: 15
// },
color: '#dc33e6'
}
}
}]
}
var echart = document.getElementById('echarts1')
var myChart = echarts.init(echart)
myChart.setOption(option)
window.addEventListener('resize', function () {
myChart.resize()
})
},
getEchart3 () {
var statusqtyArr = []
this.materArr2.map(el => {
statusqtyArr.push(el.status__qty)
})
// 基于准备好的dom初始化echarts实例
var myChart = echarts.init(document.getElementById('echarts3'))
var option = {
color: ['#30EBC9 ', '#E2BB0E', '#FF0000'],
legend: {
top: 40,
right: 160,
textStyle: {
color: '#ffffff',
fontSize: 12,
lineHeight: 20
},
itemGap: 20,
itemHeight: 8,
data: ['状态汇总']
// data: ['静置中', '静置完成', '强制完成']
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'value',
position: 'top',
offset: -10,
splitLine: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: '#fff'
}
},
axisTick: {
show: false
},
boundaryGap: [0, 0.4]
},
yAxis: {
type: 'category',
axisLine: {
show: false
}
},
series: [
{
name: '状态汇总',
type: 'bar',
barWidth: 10,
// data: [120, 200, 150],
data: statusqtyArr,
itemStyle: {
normal: {
// label: {
// show: true,
// position: 'right',
// color: '#fff'
// },
color: function (params) {
// 注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
var colorList = ['#30EBC9 ', '#E2BB0E', '#FF0000']
return colorList[params.dataIndex]
}
}
}
}
]
}
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option)
window.addEventListener('resize', function () {
myChart.resize()
})
},
initData () {
let data = {
'_SRVNAME': 'server.jxht.screen',
'_SRVMETHOD': 'queryStructsInfo',
'_DATA': JSON.stringify({
accountId: '-1'
})
}
this
.$post(data)
.then(res => {
if (res.code === '1') {
this.materArr1 = [...res.result.material_rows1]
this.materArr2 = [...res.result.material_rows2]
this.array1 = [...res.result.task_rows]
this.structArr = [...res.result.struct_rows]
this.getEchart1()
this.getEchart3()
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])
}
}
}
} else {
this.toast(res.desc)
}
})
}
}
}
</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
.content
width 100%
padding .15rem .54rem 0
.con1
position relative
// height 5.7rem
height 570px
.tag_block
position absolute
// bottom .1rem
bottom 10px
right .3rem
.tag_type
display inline-block
padding-left .3rem
.type_color
display inline-block
width .1rem
height .1rem
border-radius 50%
.tag_text
display inline-block
font-size .14rem
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
.lock
border .02rem solid #f00 !important
.yard-wrap
// height 6.95rem
height 100%
width 100%
// padding .1rem 0
.yard_group
width 100%
// height 1.8rem
height 180px
clear both
.yard_group_ul
float left
display grid
grid-gap 0
justify-items center
align-items center
margin-top -.01rem
.yard_group_ul_1
width 100%
position absolute
grid-template-columns repeat(20, 100% / 20)
// grid-template-rows repeat(2, 1.8rem / 2)
grid-template-rows repeat(2, 90px)
.yard_group_ul_2
width 90%
grid-template-columns repeat(18, 100% / 18)
// grid-template-rows repeat(2, 1.8rem / 2)
grid-template-rows repeat(2, 90px)
.yard_group_ul_3
width 40%
grid-template-columns repeat(8, 100% / 8)
// grid-template-rows repeat(2, 1.8rem / 2)
grid-template-rows repeat(2, 90px)
.yard_group_cell
position relative
display inline-block
width 100%
// height calc(1.8rem / 2)
height 90px
box-sizing border-box
border .01rem 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 60px
overflow hidden
background center center / 100% 100% url(../assets/images/zhong.png) no-repeat
margin 0 auto
z-index 98
// left 50%
// margin-left -30%
opacity 0.5
.ingbox
position absolute
bottom 0
width 100%
z-index 97 //
.corridor_2
width 100%
// line-height .1rem
line-height 10px
text-align center
.locate-wrap
position absolute
width 100%
.locate-content
position absolute
width 2.4rem
height 2.8rem
z-index 99
background center center / 100% 100% url(../assets/images/popover_1.png) no-repeat
padding .36rem .3rem
.tan_pline
width 100%
margin 0 auto
.tan_p
font-size .14rem
line-height .26rem
height .26rem
overflow hidden
color #fff
.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
.con-b
width 49%
// height 3.45rem
height 345px
overflow hidden
position relative
background center center / 100% 100% url(../assets/images/sctj_bg3.png) no-repeat
margin-top .1rem
float left
.con2
margin-right .2rem
#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
.con3
padding 0 .27rem 0 .27rem
.block_h2
h2
font-size .16rem
line-height .22rem
margin .15rem 0 .15rem 0
.list_scroll_title
width 100%
background #262F52
span
display inline-block
width 16.6%
text-align center
line-height .32rem
font-size 14px
// float left
.content-block-scroll
width 100%
height calc(100% - 0.6rem)
overflow hidden
.content-block-scroll-ul
li
width 100%
&:nth-child(2n)
background rgba(38,47,82,0.50)
span
display inline-block
width 16.6%
padding 0 .1rem
font-size 12px
text-align center
line-height .38rem
box-sizing border-box
// float left
.foldcricle0
position absolute
z-index 102
width .24rem
height .24rem
background center center / 100% 100% url(../assets/images/dot.png) no-repeat
.foldcricle2
top .50rem
left .55rem
.foldcricle1
top 0
left -0.1rem
.foldline0
position absolute
z-index 102
border 1px dashed #32C5FF
height 1px
.foldline1
width .30rem
top .12rem
left .09rem
.foldline2
width .60rem
top .38rem
left .24rem
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.01rem
right 1.38rem
.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/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
</style>