Merge remote-tracking branch 'origin/master'

master
mengjiao 1 year ago
commit 853c139396

@ -5,7 +5,10 @@ export function getHourProductionList(query) {
return request({ return request({
url: '/mes/reportWork/getHourProductionList', url: '/mes/reportWork/getHourProductionList',
method: 'get', method: 'get',
params: query params: query,
header:{
PoolName:'ds_999'
}
}); });
} }
@ -14,6 +17,9 @@ export function getAgvData(query) {
return request({ return request({
url: 'http://192.168.202.25:9001/api/scada/agvdata', url: 'http://192.168.202.25:9001/api/scada/agvdata',
method: 'get', method: 'get',
params: query params: query,
header:{
PoolName:'ds_999'
}
}); });
} }

@ -0,0 +1,79 @@
import request from '@/utils/request'
// 查询产量
export function dryRoomDataCarousel(query) {
return request({
url: '/mes/wcsInterface/dryRoomDataCarousel',
method: 'post',
data: {
"factory": "999"
}
});
}
// 查询产量
export function getHourProductionList(query) {
return request({
url: '/mes/reportWork/getHourProductionList',
method: 'get',
params: query,
header:{
PoolName:'ds_999'
}
});
}
export function EnergyExpend(query) {
return request({
url: '/mes/h5/EnergyExpend',
method: 'get',
params: query,
header:{
PoolName:'ds_1000'
}
});
}
export function agvdata(query) {
return request({
url: 'http://192.168.202.25:9001/api/scada/agvdata',
method: 'get',
params: query,
header:{
PoolName:'ds_999'
}
});
}
export function PlanAchievementRate(query) {
return request({
url: '/mes/reportWork/PlanAchievementRate',
method: 'get',
params: query,
header:{
PoolName:'ds_999'
}
});
}
export function getHfChartDatas(query) {
return request({
url: '/quality/qcProCheck/getHfChartDatas',
method: 'get',
params: query,
header:{
PoolName:'ds_999'
}
});
}
export function getHourProductionLists(query) {
return request({
url: '/mes/reportWork/getHourProductionLists',
method: 'get',
params: query,
header:{
PoolName:'ds_999'
}
});
}

@ -306,7 +306,7 @@ export function getPrepareList(query) {
// 获取线体每月生产过程不良率 // 获取线体每月生产过程不良率
export function getLineQcData() { export function getLineQcData() {
return requestnpm({ return request({
url: '/quality/qcInterface/getLineQcData', url: '/quality/qcInterface/getLineQcData',
method: 'get' method: 'get'
}); });

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

@ -0,0 +1,35 @@
<template>
<div />
</template>
<script>
import * as echarts from 'echarts';
export default {
expose: ['setData'],
data() {
return {
chart: null,
}
},
mounted() {
},
beforeDestroy() {
if (!this.chart) {
return
}
this.chart.dispose()
this.chart = null
},
methods: {
setData(option) {
this.initChart(option)
},
initChart(option) {
this.chart = echarts.init(this.$el, 'macarons')
this.chart.setOption(option)
}
}
}
</script>

@ -313,14 +313,14 @@ export default {
setInterval(() => this.getAlarmData(), 1000 * 60); setInterval(() => this.getAlarmData(), 1000 * 60);
this.poolNameList = JSON.parse(localStorage.getItem("POOL_NAME_LIST")); this.poolNameList = JSON.parse(localStorage.getItem("POOL_NAME_LIST"));
this.poolName = localStorage.getItem("USER_POOL_NAME_CURRENT"); this.poolName = localStorage.getItem("USER_POOL_NAME_CURRENT");
/**
// //
this.getUnReadList(); this.getUnReadList();
// //
this.timer = setInterval(() => { this.timer = setInterval(() => {
setTimeout(this.getUnReadList(), 30000); setTimeout(this.getUnReadList(), 30000);
}, 30000); }, 30000);
**/
}, },
components: { components: {

@ -33,6 +33,7 @@ export const constantRoutes = [
{path: '/cs', component: () => import('@/views/cs/index.vue')}, {path: '/cs', component: () => import('@/views/cs/index.vue')},
{path: '/cs2', component: () => import('@/views/cs/index2.vue')}, {path: '/cs2', component: () => import('@/views/cs/index2.vue')},
{path: '/cs3', component: () => import('@/views/cs/index3.vue')}, {path: '/cs3', component: () => import('@/views/cs/index3.vue')},
{path: '/cs3_1', component: () => import('@/views/cs/index3_1.vue')},
{ {
path: '/redirect', path: '/redirect',
component: Layout, component: Layout,

@ -24,8 +24,8 @@ const service = axios.create({
// request拦截器 // request拦截器
service.interceptors.request.use(config => { service.interceptors.request.use(config => {
if(localStorage.getItem('USER_POOL_NAME_CURRENT')){ if(localStorage.getItem('USER_POOL_NAME_CURRENT')){
config.headers['poolName'] = localStorage.getItem('USER_POOL_NAME_CURRENT'); config.headers['poolName'] = config.header?.PoolName || localStorage.getItem('USER_POOL_NAME_CURRENT');
console.log(localStorage.getItem('USER_POOL_NAME_CURRENT')) console.log(config.headers['poolName'])
} }
// 是否需要设置 token // 是否需要设置 token
const isToken = (config.headers || {}).isToken === false const isToken = (config.headers || {}).isToken === false

@ -7,7 +7,8 @@
<div class="subTitle" style="left: 48.9%;">烘房区</div> <div class="subTitle" style="left: 48.9%;">烘房区</div>
<div class="subTitle" style="left: 70.8%;">收坯区</div> <div class="subTitle" style="left: 70.8%;">收坯区</div>
<div class="floorNum floorNum1">1F</div> <div class="floorNum floorNum1">1F</div>
<div class="floorNum floorNum2" @click="$router.push('/cs')">2F</div> <!-- <div class="floorNum floorNum2" @click="$router.push('/cs')">2F</div>-->
<div class="floorNum floorNum2">2F</div>
<div class="floorNum floorNum3">3F</div> <div class="floorNum floorNum3">3F</div>
<div class="floorNum floorNum4">4F</div> <div class="floorNum floorNum4">4F</div>
<div class="floorNum floorNum5">5F</div> <div class="floorNum floorNum5">5F</div>
@ -84,7 +85,10 @@
<div class="infoModel" :style="`display:${loopIndex === k?'inline-block':''}`"> <div class="infoModel" :style="`display:${loopIndex === k?'inline-block':''}`">
<div class="title">{{ i.equName }}</div> <div class="title">{{ i.equName }}</div>
<div class="equipmentOutput"><span style="color: #fff9">设备产量:</span> {{ i.quantity }}</div> <div class="equipmentOutput"><span style="color: #fff9">设备产量:</span> {{ i.quantity }}</div>
<div class="equipmentInfo"><span style="color: #fff9">设备状态:</span> {{ parseFloat(i.quantity) > 0 ? '运行' : '停机' }}</div> <div class="equipmentInfo"><span style="color: #fff9">设备状态:</span> {{
parseFloat(i.quantity) > 0 ? '运行' : '停机'
}}
</div>
</div> </div>
</div> </div>
@ -94,14 +98,17 @@
:style="`display:${loopIndex === 18+k?'inline-block':''}`"> :style="`display:${loopIndex === 18+k?'inline-block':''}`">
<div class="title">{{ i.equName }}</div> <div class="title">{{ i.equName }}</div>
<div class="equipmentOutput"><span style="color: #fff9">设备产量:</span> {{ i.quantity }}</div> <div class="equipmentOutput"><span style="color: #fff9">设备产量:</span> {{ i.quantity }}</div>
<div class="equipmentInfo"><span style="color: #fff9">设备状态:</span> {{ parseFloat(i.quantity) > 0 ? '运行' : '停机' }} <div class="equipmentInfo"><span style="color: #fff9">设备状态:</span> {{
parseFloat(i.quantity) > 0 ? '运行' : '停机'
}}
</div> </div>
</div> </div>
</div> </div>
<div :class="((equipmentData||[])[k]||{}).quantity>0 ? 'ring':'ring1'" :style="`top:${i.top}%;left:${i.left}%`" v-for="(i,k) in ringLocation"></div> <div :class="((equipmentData||[])[k]||{}).quantity>0 ? 'ring':'ring1'" :style="`top:${i.top}%;left:${i.left}%`"
v-for="(i,k) in ringLocation"></div>
<div :class="`${i.isGoods? 'agv2':'agv1'}`" v-for="i in agvData" v-show="i.show" <div :class="`${i.IsLoad? 'agv2':'agv1'}`" v-for="i in agvData" v-show="i.show"
:style="`${getLocation(i.x,i.y)}transform: rotate(${parseFloat(i.rotate )- 180}deg);`"></div> :style="`${getLocation(i.x,i.y)}transform: rotate(${parseFloat(i.rotate )- 180}deg);`"></div>
</div> </div>
</div> </div>
@ -110,6 +117,7 @@
import * as TWEEN from '@tweenjs/tween.js' import * as TWEEN from '@tweenjs/tween.js'
import {getAgvData, getHourProductionList} from "../../api/board/cs2"; import {getAgvData, getHourProductionList} from "../../api/board/cs2";
import {parseTime} from "../../utils/openPlatform";
export default { export default {
data() { data() {
@ -278,30 +286,29 @@ export default {
equipmentData: [], equipmentData: [],
agvData: [], agvData: [],
siteData: { siteData: {
x: 121000, x: 120565,
y: 82000 y: 71313
} }
} }
}, },
methods: { methods: {
getLocation(x, y) { getLocation(x, y) {
let a = (66 + (90 - 66) * y) * x let a = (70 + (91 - 70) * y) * x
let b = 12 * y let b = 10.5 * y
let xLocation = 16 - b + a let xLocation = 14.5 - b + a
let yLocation = 22 + (84 - 22) * y let yLocation = 29 + (85 - 29) * y
return ` left: ${xLocation}%;top: ${yLocation}%;` return ` left: ${xLocation}%;top: ${yLocation}%;`
}, },
getAgvLocation() { getAgvLocation() {
let agvArr = [] let agvArr = []
getAgvData().then(e => { getAgvData().then(e => {
console.log(Math.max(...e.Data.map(v => v.X)), Math.max(...e.Data.map(v => v.Y)))
e.Data.forEach(v => { e.Data.forEach(v => {
agvArr.push({ agvArr.push({
id: v.AgvId, id: v.AgvId,
x: (v.X - 126000) / this.siteData.x, x: (v.X - 126061) / this.siteData.x,
y: (72000 - (v.Y - 116000)) / this.siteData.y, y: (71313 - (v.Y - 116722)) / this.siteData.y,
rotate: v.Angle, rotate: v.Angle,
isGoods: false, IsLoad: v.IsLoad,
show: v.X < 245000 && v.X > 126000 && v.Y < 187000 && v.Y > 116000 show: v.X < 245000 && v.X > 126000 && v.Y < 187000 && v.Y > 116000
// show: true // show: true
}) })
@ -319,9 +326,10 @@ export default {
f1 = null f1 = null
}) })
let f2 = new TWEEN.Tween(this.agvData.find(r => r.id === v.AgvId)).to({ let f2 = new TWEEN.Tween(this.agvData.find(r => r.id === v.AgvId)).to({
x: (v.X - 126000) / this.siteData.x, x: (v.X - 126061) / this.siteData.x,
y: (72000 - (v.Y - 116000)) / this.siteData.y, y: (71313 - (v.Y - 116722)) / this.siteData.y,
show: v.X < 245000 && v.X > 126000 && v.Y < 187000 && v.Y > 116000 show: v.X < 245000 && v.X > 126000 && v.Y < 187000 && v.Y > 116000,
IsLoad: v.IsLoad,
// show: true // show: true
}, time - 100).start().onComplete(() => { }, time - 100).start().onComplete(() => {
f2 = null f2 = null
@ -329,10 +337,10 @@ export default {
} else { } else {
this.agvData.push({ this.agvData.push({
id: v.AgvId, id: v.AgvId,
x: (v.X - 126000) / this.siteData.x, x: (v.X - 126061) / this.siteData.x,
y: (72000 - (v.Y - 116000)) / this.siteData.y, y: (71313 - (v.Y - 116722)) / this.siteData.y,
rotate: v.Angle, rotate: v.Angle,
isGoods: false, IsLoad: v.IsLoad,
show: v.X < 245000 && v.X > 126000 && v.Y < 187000 && v.Y > 116000 show: v.X < 245000 && v.X > 126000 && v.Y < 187000 && v.Y > 116000
// show: true // show: true
}) })
@ -341,7 +349,29 @@ export default {
}) })
}, },
getData() { getData() {
getHourProductionList().then(e => {
let time = parseTime(new Date(), '{h}-{i}').split('-')
let i = parseFloat(time[0]) || 0
let s = parseFloat(time [1]) || 0
let createTimeStart = `${parseTime(new Date(), '{y}-{m}-{d}')} 07:30:00`
let createTimeEnd = `${parseTime(new Date(), '{y}-{m}-{d}')} 19:30:00`
if (parseFloat(`${i}.${s}`) > 7.3 && parseFloat(`${i}.${s}`) < 19.3) {
createTimeStart = `${parseTime(new Date(), '{y}-{m}-{d}')} 07:30:00`
createTimeEnd = `${parseTime(new Date(), '{y}-{m}-{d}')} 19:30:00`
} else if (parseFloat(`${i}.${s}`) < 7.3) {
createTimeStart = `${parseTime(new Date(), '{y}-{m}-')}${parseFloat(parseTime(new Date(), '${d}')) - 1} 19:30:00`
createTimeEnd = `${parseTime(new Date(), '{y}-{m}-{d}')} 07:30:00`
} else if (parseFloat(`${i}.${s}`) > 19.3) {
createTimeStart = `${parseTime(new Date(), '{y}-{m}-{d}')} 19:30:00`
createTimeEnd = `${parseTime(new Date(), '{y}-{m}-')}${parseFloat(parseTime(new Date(), '${d}')) + 1} 07:30:00`
} else {
createTimeStart = `${parseTime(new Date(), '{y}-{m}-{d}')} 07:30:00`
createTimeEnd = `${parseTime(new Date(), '{y}-{m}-{d}')} 19:30:00`
}
getHourProductionList({
productDateStart: createTimeStart,
productDateEnd: createTimeEnd
}).then(e => {
let hfArr = [] let hfArr = []
let equipmentArr = [] let equipmentArr = []
for (let i = 0; i < 18; i++) { for (let i = 0; i < 18; i++) {
@ -360,6 +390,7 @@ export default {
this.getAgvLocation() this.getAgvLocation()
let time = 2 * 1000 let time = 2 * 1000
setInterval(() => { setInterval(() => {
this.getData()
this.updateAGVLocation(time) this.updateAGVLocation(time)
}, time) }, time)

@ -1,30 +1,503 @@
<template> <template>
<div class="body"> <div class="bg">
<iframe :src="iframeSrc" style="width: 100%;height: 100%"></iframe> <div class="title">白坯车间数字应用大屏</div>
<div class="modelTitle" style=" top: 15.2%;left: 3%;">烘房状态</div>
<div class="modelTitle" style="top:15.2%;left:32%">设备运行数据</div>
<div class="modelTitle" style="top:15.2%;left:71%">烘房白坯质量统计</div>
<div class="modelTitle" style="top:65%;left:32%">近7天产量</div>
<div class="modelTitle" style="top:65%;left:71%">计划达成率</div>
<div class="title1" style="top:24%;left:34%">成型机产量</div>
<div class="title1" style="top:24%;left:52.5%">烘房产量</div>
<div class="title1" style="top:45%;left:34%">烘房耗电量</div>
<div class="title1" style="top:45%;left:52.5%">AGV开动数量</div>
<div class="unit1" style="top: 31.3%;left: 45.5%;"></div>
<div class="unit1" style="top: 31.3%;left: 63.5%"></div>
<div class="unit1" style="top: 51.3%;left: 45.5%;">KWh</div>
<div class="unit1" style="top: 51.3%;left: 63.5%;"></div>
<div class="num1" style="top: 31.5%;left: 39.5%;">{{ CData.map(e=>parseFloat(e.quantity)||0).reduce((a,b)=>a+b,0) }}</div>
<div class="num1" style="top:31.5%;left:57.7%">{{ HData.map(e=>parseFloat(e.quantity)||0).reduce((a,b)=>a+b,0) }}</div>
<div class="num1" style="top:51.6%;left:39.5%">{{ expend }}</div>
<div class="num1" style="top:51.6%;left:57.7%">{{ agvData.length }}</div>
<div class="title2" style="top: 73.5%;left: 86.8%;">计划生产数量</div>
<div class="title2" style="top: 85.3%;left: 86.8%;">实际生产数量</div>
<div class="unit2" style="top: 76.5%;left: 95%;"></div>
<div class="unit2" style="top: 88.5%;left: 95%;"></div>
<div class="num2" style="top: 76.8%;left: 90.7%;color:#12fdae">{{ proData.sumChe }}</div>
<div class="num2" style="top: 88.6%;left: 90.7%;color:#48b5fd">{{ proData.totalRecordCount }}</div>
<div class="num3" style="top: 80.3%;left: 78.6%;">{{ percent }}</div>
<div class="title3" style="top: 91%;left: 78.8%;">计划达成率</div>
<div class="table1">
<div style="background-color: #0d61aa;height: 5%;line-height: calc(3.9vh - 8px);color:#fbfafd">
<div class="scrollTable" style="font-weight: bold;">
烘房
</div>
<div class="scrollTable" style="font-weight: bold;">
温度
</div>
<div class="scrollTable" style="font-weight: bold;">
湿度
</div>
<div class="scrollTable" style="font-weight: bold;">
在生产
</div>
<div class="scrollTable" style="font-weight: bold;">
单车耗能
</div>
</div>
<vue-seamless-scroll
:class-option="{...chart1TableOption,limitMoveNum:10}"
:data="table1Data"
style="height: 94%;overflow: hidden;margin-top: 1%"
>
<div
v-for="(item, index) in table1Data"
:key="index"
class="case-item"
>
<div :style='"background-color:" + ((index % 2 === 0)? "#053460":"#032d57") '>
<div
class="scrollTable" style="color:#49b2fc">
{{ item.equipment_code }}
</div>
<div
class="scrollTable" style="color:#49b2fc">
{{ item.temperature }}
</div>
<div
class="scrollTable" style="color:#49b2fc">
{{ item.humidity }}
</div>
<div
class="scrollTable" style="color:#49b2fc">
{{ item.Intheoven }}
</div>
<div
class="scrollTable" style="color:#49b2fc">
{{ (parseFloat(item.expend/item.yield)||0).toFixed(2) }}KWh
</div>
</div>
</div>
</vue-seamless-scroll>
</div>
<Chart ref="chart1" class="chart1"></Chart>
<Chart ref="chart2" class="chart2"></Chart>
</div> </div>
</template> </template>
<script> <script>
import * as TWEEN from '@tweenjs/tween.js' import Chart from "@/components/Charts/Chart";
import {getAgvData, getHourProductionList} from "../../api/board/cs2"; import vueSeamlessScroll from "vue-seamless-scroll";
import {
agvdata,
avgdata,
dryRoomDataCarousel,
EnergyExpend, getHfChartDatas,
getHourProductionList, getHourProductionLists,
PlanAchievementRate
} from "../../api/board/cs3";
import {parseTime} from "../../utils/openPlatform";
export default { export default {
components: {
Chart,
vueSeamlessScroll,
},
data() { data() {
return { return {
iframeSrc:'http://192.168.202.20:8100/#/de-link/gXZdFzxH' chart1TableOption: {
step: 0.5, //
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: 0,
},
table1Data: [],
CData: [],
HData: [],
expend: 0,
agvData: [],
proData: {},
percent: ''
} }
}, },
methods: {}, mounted() {
mounted() {} this.getData()
setInterval(() => {
this.getData()
}, 5 * 1000)
},
methods: {
getData() {
dryRoomDataCarousel().then(e => {
this.table1Data = e.data.dryingroomList || []
})
EnergyExpend().then(e => {
this.expend = e.map(v => v.expend).reduce((a, b) => a + b, 0).toFixed(2)
})
agvdata().then(e => {
console.log(e)
this.agvData = e.Data.filter(v=>v.State===2)
})
PlanAchievementRate().then(e => {
this.proData = e.data
this.percent = e.msg
})
let time = parseTime(new Date(), '{h}-{i}').split('-')
let i = parseFloat(time[0]) || 0
let s = parseFloat(time [1]) || 0
let createTimeStart = `${parseTime(new Date(), '{y}-{m}-{d}')} 07:30:00`
let createTimeEnd = `${parseTime(new Date(), '{y}-{m}-{d}')} 19:30:00`
if (parseFloat(`${i}.${s}`) > 7.3 && parseFloat(`${i}.${s}`) < 19.3) {
createTimeStart = `${parseTime(new Date(), '{y}-{m}-{d}')} 07:30:00`
createTimeEnd = `${parseTime(new Date(), '{y}-{m}-{d}')} 19:30:00`
} else if (parseFloat(`${i}.${s}`) < 7.3) {
createTimeStart = `${parseTime(new Date(), '{y}-{m}-')}${parseFloat(parseTime(new Date(), '${d}')) - 1} 19:30:00`
createTimeEnd = `${parseTime(new Date(), '{y}-{m}-{d}')} 07:30:00`
} else if (parseFloat(`${i}.${s}`) > 19.3) {
createTimeStart = `${parseTime(new Date(), '{y}-{m}-{d}')} 19:30:00`
createTimeEnd = `${parseTime(new Date(), '{y}-{m}-')}${parseFloat(parseTime(new Date(), '${d}')) + 1} 07:30:00`
} else {
createTimeStart = `${parseTime(new Date(), '{y}-{m}-{d}')} 07:30:00`
createTimeEnd = `${parseTime(new Date(), '{y}-{m}-{d}')} 19:30:00`
}
getHourProductionList({
productDateStart: createTimeStart,
productDateEnd: createTimeEnd
}).then(e => {
this.CData = e.filter(v => v.equName.includes('成型机'))
this.HData = e.filter(v => v.equName.includes('烘房'))
})
getHfChartDatas({
createTimeStart: createTimeStart,
createTimeEnd: createTimeEnd,
chartType: 'cp'
}).then(e => {
let option = {
tooltip: {
trigger: 'axis',
axisPointer: {
// Use axis to trigger tooltip
type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
}
},
legend: {
textStyle: {
color: '#eee'
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'value'
},
yAxis: {
type: 'category',
axisLabel: {
color: '#ccc'
},
data: e.checkList.map(v => v.machineName),
},
series: [
{
name: '合格数量',
type: 'bar',
stack: 'total',
label: {
show: true,
position: 'insideRight',
formatter: "{c}车",
color: "#000"
},
emphasis: {
focus: 'series'
},
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 1,
y2: 0,
colorStops: [{
offset: 0, color: '#1e60f2' // 0%
}, {
offset: 1, color: '#00b9ff' // 100%
}],
global: false // false
}
},
data: e.checkList.map(v => parseFloat(v.quality))
},
{
name: '不合格数量',
type: 'bar',
stack: 'total',
label: {
show: true,
position: 'right'
},
emphasis: {
focus: 'series'
},
data: e.checkList.map(v => 0)
},
]
};
this.$refs.chart1.setData(option)
})
getHourProductionLists().then(e => {
let option1 = {
grid: {
top: '15%',
bottom: '10%',
// left: '5%',
right: '3%'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow',
label: {
show: true
}
}
},
legend: {
right: 0,
textStyle: {
color: '#eee'
}
},
xAxis: {
data: e.map(v => v.pdate),
axisLine: {
show: true, //X线
lineStyle: {
color: '#fff'
}
},
axisTick: {
show: true //X
},
axisLabel: {
show: true,
textStyle: {
color: '#fff' //X
}
}
},
yAxis: [
{
type: 'value',
name: '单位:车',
nameTextStyle: {
color: '#fff'
},
splitLine: {
show: false
},
axisTick: {
show: true
},
axisLine: {
show: true,
lineStyle: {
color: '#fff'
}
},
axisLabel: {
show: true,
textStyle: {
color: '#fff'
}
}
}
],
series: [
{
label: {
show: true,
position: 'top',
formatter: "{c}",
color: "#fff"
},
name: '产量',
type: 'line',
smooth: true, //线
showAllSymbol: true, //
symbol: "emptyCircle", //
symbolSize: 5, //
// itemStyle: {
// //线
// color: "#058cff",
// },
// lineStyle: {
// color: "#058cff",
// },
// areaStyle: {
// color: "rgba(5,140,255, 0.2)",
// },
data: e.map(v => parseFloat(v.quantity)),
},
]
};
this.$refs.chart2.setData(option1)
})
},
},
} }
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
.body{ .bg {
background-image: url("~@/assets/board/cs3/bg.jpg");
background-size: 100% 100%;
background-repeat: no-repeat;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: hidden; }
.title {
position: absolute;
top: 3%;
left: 0;
width: 100%;
text-align: center;
font-size: 2vw;
color: #fff;
letter-spacing: 2px;
transform: translateY(-50%);
}
.title1 {
position: absolute;
font-size: 1.2vw;
color: #fff;
letter-spacing: 2px;
transform: translateY(-50%);
}
.title2 {
position: absolute;
font-size: 0.7vw;
color: #fff;
letter-spacing: 2px;
transform: translateY(-50%);
}
.title3 {
position: absolute;
font-size: 1.2vw;
color: #0394fc;
letter-spacing: 2px;
transform: translate(-50%, -50%);
}
.unit1 {
position: absolute;
font-size: 0.8vw;
color: #eee;
letter-spacing: 2px;
transform: translateY(-50%);
}
.unit2 {
position: absolute;
font-size: 0.8vw;
color: #eee;
letter-spacing: 2px;
transform: translateY(-50%);
}
.num1 {
position: absolute;
font-size: 1.3vw;
color: #4ab4fd;
letter-spacing: 2px;
transform: translate(-50%, -50%);
}
.num2 {
position: absolute;
font-size: 1.3vw;
color: #4ab4fd;
letter-spacing: 2px;
transform: translate(-50%, -50%);
}
.num3 {
position: absolute;
font-size: 2vw;
color: #fff;
letter-spacing: 2px;
transform: translate(-50%, -50%);
}
.modelTitle {
position: absolute;
font-size: 1vw;
color: #fff;
letter-spacing: 2px;
transform: translateY(-50%);
}
.scrollTable {
margin: auto 0px;
padding: 4px 0;
white-space: nowrap;
//overflow: hidden;
text-overflow: ellipsis;
text-align: center;
display: inline-block;
width: 20%;
}
.table1 {
position: absolute;
top: 18.5%;
left: 3.2%;
width: 25.4%;
height: 78%;
}
.chart1 {
position: absolute;
width: 27.4%;
height: 41.7%;
top: 18%;
left: 70.4%;
}
.chart2 {
position: absolute;
width: 37.4%;
height: 28.5%;
top: 67.6%;
left: 31.3%;
}
.case-item {
border: 2px solid #0c61ad;
border-radius: 2px;
margin: 8px 0 0 0;
color: #0c61ad;
font-size: 0.9vw;
line-height: 1.5vw;
background-color: #134781;
} }
</style> </style>

@ -0,0 +1,30 @@
<template>
<div class="body">
<iframe :src="iframeSrc" style="width: 100%;height: 100%"></iframe>
</div>
</template>
<script>
import * as TWEEN from '@tweenjs/tween.js'
import {getAgvData, getHourProductionList} from "../../api/board/cs2";
export default {
data() {
return {
iframeSrc:'http://192.168.202.20:8100/#/de-link/gXZdFzxH'
}
},
methods: {},
mounted() {}
}
</script>
<style scoped lang="less">
.body{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
</style>

@ -50,7 +50,7 @@
methods: { methods: {
getLineQcInfo(){ getLineQcInfo(){
getLineQcData().then(returnData => { getLineQcData().then((returnData) => {
const chart = this.$refs.chart const chart = this.$refs.chart
if (chart) { if (chart) {
const myChart = this.$echarts.init(chart) const myChart = this.$echarts.init(chart)

@ -123,6 +123,7 @@ export default {
inverse: true, inverse: true,
axisLabel: { axisLabel: {
show: true, show: true,
interval: 0,
margin: 10, margin: 10,
textStyle: { textStyle: {
fontSize: "14", fontSize: "14",

@ -41,7 +41,8 @@
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
>一键秒表</el-button> >一键秒表
</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row> </el-row>
@ -50,44 +51,50 @@
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center"/> <el-table-column type="selection" width="50" align="center"/>
<el-table-column label="计量设备编号" align="center" key="monitorId" prop="monitorId" v-if="columns[0].visible"/> <el-table-column label="计量设备编号" align="center" key="monitorId" prop="monitorId" v-if="columns[0].visible"/>
<el-table-column label="计量设备名称" align="center" key="monitorName" prop="monitorName" v-if="columns[1].visible" :show-overflow-tooltip="true" /> <el-table-column label="计量设备名称" align="center" key="monitorName" prop="monitorName" v-if="columns[1].visible"
<el-table-column label="采集时间" align="center" key="collectTime" prop="collectTime" v-if="columns[2].visible" :show-overflow-tooltip="true" /> :show-overflow-tooltip="true"/>
<el-table-column label="A项电压(V)" align="center" key="va" prop="va" v-if="columns[3].visible" :show-overflow-tooltip="true" /> <el-table-column label="采集时间" align="center" key="collectTime" prop="collectTime" v-if="columns[2].visible"
:show-overflow-tooltip="true"/>
<el-table-column label="A项电压(V)" align="center" key="va" prop="va" v-if="columns[3].visible"
:show-overflow-tooltip="true"/>
<el-table-column label="B项电压(V)" align="center" key="vb" prop="vb" v-if="columns[4].visible" width="120"/> <el-table-column label="B项电压(V)" align="center" key="vb" prop="vb" v-if="columns[4].visible" width="120"/>
<el-table-column label="C项电压(V)" align="center" key="vc" prop="vc" v-if="columns[5].visible" width="120"/> <el-table-column label="C项电压(V)" align="center" key="vc" prop="vc" v-if="columns[5].visible" width="120"/>
<el-table-column label="A项电流(A)" align="center" key="ia" prop="ia" v-if="columns[6].visible" width="120"/> <el-table-column label="A项电流(A)" align="center" key="ia" prop="ia" v-if="columns[6].visible" width="120"/>
<el-table-column label="B项电流(A)" align="center" key="ib" prop="ib" v-if="columns[7].visible" width="120"/> <el-table-column label="B项电流(A)" align="center" key="ib" prop="ib" v-if="columns[7].visible" width="120"/>
<el-table-column label="C项电流(A)" align="center" key="ic" prop="ic" v-if="columns[8].visible" width="120"/> <el-table-column label="C项电流(A)" align="center" key="ic" prop="ic" v-if="columns[8].visible" width="120"/>
<el-table-column label="功率因数" align="center" key="glys" prop="glys" v-if="columns[9].visible" width="120"/> <el-table-column label="功率因数" align="center" key="glys" prop="glys" v-if="columns[9].visible" width="120"/>
<el-table-column label="正向有功(kW·h)" align="center" key="zxyg" prop="zxyg" v-if="columns[10].visible" width="120" /> <el-table-column label="正向有功(kW·h)" align="center" key="zxyg" prop="zxyg" v-if="columns[10].visible"
width="120"/>
<!-- <el-table-column label="有功功率(KW)" align="center" key="activePower" prop="activePower" v-if="columns[11].visible" width="120" /> <!-- <el-table-column label="有功功率(KW)" align="center" key="activePower" prop="activePower" v-if="columns[11].visible" width="120" />
<el-table-column label="无功功率(Kvar)" align="center" key="reactivePower" prop="reactivePower" v-if="columns[12].visible" width="120" /> <el-table-column label="无功功率(Kvar)" align="center" key="reactivePower" prop="reactivePower" v-if="columns[12].visible" width="120" />
<el-table-column label="采集方式" align="center" key="collectType" prop="collectType" v-if="columns[13].visible" width="120" /> --> <el-table-column label="采集方式" align="center" key="collectType" prop="collectType" v-if="columns[13].visible" width="120" /> -->
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
<pagination <!-- <pagination-->
v-show="total>0" <!-- v-show="total>0"-->
:total="total" <!-- :total="total"-->
:page.sync="queryParams.pageNum" <!-- :page.sync="queryParams.pageNum"-->
:limit.sync="queryParams.pageSize" <!-- :limit.sync="queryParams.pageSize"-->
@pagination="getList" <!-- @pagination="getList"-->
/> <!-- />-->
<el-card style="margin-top: 30px;" class="box-card"> <el-card style="margin-top: 30px;" class="box-card">
<el-table v-loading="loading" :data="userListtwo" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="userListtwo" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center"/> <el-table-column type="selection" width="50" align="center"/>
<el-table-column label="计量设备编号" align="center" key="monitorId" prop="monitorId"/> <el-table-column label="计量设备编号" align="center" key="monitorId" prop="monitorId"/>
<el-table-column label="回路计量设备名称" align="center" key="monitorName" prop="monitorName" :show-overflow-tooltip="true" /> <el-table-column label="回路计量设备名称" align="center" key="monitorName" prop="monitorName"
<el-table-column label="采集时间" align="center" key="collectTime" prop="collectTime" :show-overflow-tooltip="true" /> :show-overflow-tooltip="true"/>
<el-table-column label="采集时间" align="center" key="collectTime" prop="collectTime"
:show-overflow-tooltip="true"/>
<el-table-column label="正向有功(kW·h)" align="center" key="zxyg" prop="zxyg" width="120"/> <el-table-column label="正向有功(kW·h)" align="center" key="zxyg" prop="zxyg" width="120"/>
</el-table> </el-table>
<pagination <!-- <pagination-->
v-show="total>0" <!-- v-show="total>0"-->
:total="total" <!-- :total="total"-->
:page.sync="queryParams.pageNum" <!-- :page.sync="queryParams.pageNum"-->
:limit.sync="queryParams.pageSize" <!-- :limit.sync="queryParams.pageSize"-->
@pagination="getListtwo" <!-- @pagination="getListtwo"-->
/> <!-- />-->
</el-card> </el-card>
</el-col> </el-col>
</el-row> </el-row>
@ -184,21 +191,6 @@ export default {
children: "children", children: "children",
label: "name" label: "name"
}, },
//
upload: {
//
open: false,
//
title: "",
//
isUploading: false,
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
url: process.env.VUE_APP_BASE_API + "/system/user/importData"
},
monitorIddata: '', monitorIddata: '',
// //
queryParams: { queryParams: {
@ -207,7 +199,6 @@ export default {
orderByColumn: "collectTime", orderByColumn: "collectTime",
isAsc: "desc", isAsc: "desc",
monitorSubset: '', monitorSubset: '',
collectType: undefined,
collectType: '', collectType: '',
params: {beginCollectTime: '', endCollectTime: ''} params: {beginCollectTime: '', endCollectTime: ''}
@ -229,34 +220,6 @@ export default {
// { key: 12, label: `(Kvar)`, visible: true }, // { key: 12, label: `(Kvar)`, visible: true },
// { key: 13, label: ``, visible: true } // { key: 13, label: ``, visible: true }
], ],
//
rules: {
userName: [
{ required: true, message: "用户名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
],
nickName: [
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
],
password: [
{ required: true, message: "用户密码不能为空", trigger: "blur" },
{ min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }
],
email: [
{
type: "email",
message: "请输入正确的邮箱地址",
trigger: ["blur", "change"]
}
],
phonenumber: [
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
]
}
}; };
}, },
watch: { watch: {
@ -340,7 +303,6 @@ export default {
item.lable = item.name item.lable = item.name
}) })
this.deptOptions = this.tranListToTreeData(response); this.deptOptions = this.tranListToTreeData(response);
console.log(this.deptOptions)
}); });
}, },
// //
@ -372,9 +334,6 @@ export default {
}, },
// //
handleCheckChange(data, checked, indeterminat) { handleCheckChange(data, checked, indeterminat) {
console.log('data',data, checked, indeterminat);
// this.formadd.deptId = data.label;
//this.monitorIdslist.push(data.monitorId);
if (checked === false) { if (checked === false) {
this.formadd.monitorIds.map((item, index) => { this.formadd.monitorIds.map((item, index) => {
if (data.monitorId == item) { if (data.monitorId == item) {
@ -384,14 +343,10 @@ export default {
} else { } else {
this.formadd.monitorIds.push(data.monitorId); this.formadd.monitorIds.push(data.monitorId);
} }
console.log('this.formadd.monitorIds',this.formadd.monitorIds)
// this.handleQuery();
}, },
// //
submitFormtwo: function () { submitFormtwo: function () {
let paramsstr = this.formadd.monitorIds.join('+'); let paramsstr = this.formadd.monitorIds.join('+');
console.log('paramsstr',paramsstr);
editMeterReading({monitorIds: paramsstr}).then(response => { editMeterReading({monitorIds: paramsstr}).then(response => {
if (response.msg === "操作成功") { if (response.msg === "操作成功") {
this.$message({ this.$message({
@ -466,6 +421,7 @@ console.log('this.formadd.monitorIds',this.formadd.monitorIds)
<style lang="scss" scoped> <style lang="scss" scoped>
.tree { .tree {
width: 220px; width: 220px;
::v-deep .el-tree-node { ::v-deep .el-tree-node {
white-space: normal; //!!!!!!!!! white-space: normal; //!!!!!!!!!
.el-tree-node__content { .el-tree-node__content {

@ -53,52 +53,6 @@
<QcChartLine :chart-data="qcChartLineData" ref="QcChartLine" /> <QcChartLine :chart-data="qcChartLineData" ref="QcChartLine" />
</div> </div>
</div> </div>
<!-- <el-row :gutter="20">
<el-col :sm="24" :lg="24">
<span style="font-size: 20px; margin: 40%; color: cadetblue">{{
titlename
}}</span>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<div style="border: 1px solid #cfdee4">
<line-chart :chart-data="lineChartData" ref="lineChart" />
</div>
</el-col>
</el-row> -->
<!--
<el-row :gutter="20">
<el-col :span="12">
<pie-chart ref="pieChart"/>
</el-col>
<el-col :span="12">
<pie-chart ref="pieChart2"/>
</el-col>
</el-row>-->
<!-- <el-row :gutter="20">
<el-col :span="12">
<span style="font-size: 18px; padding: 1% 39%; color: cadetblue"
>各线体设备月故障数</span
>
</el-col>
<el-col :span="12">
<span style="font-size: 18px; padding: 1% 39%; color: cadetblue"
>各车间生产不良率</span
>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<DeviceChartLine
:chart-data="deviceChartLineData"
ref="DeviceChartLine"
/>
</el-col>
<el-col :span="12">
<QcChartLine :chart-data="qcChartLineData" ref="QcChartLine" />
</el-col>
</el-row> -->
</div> </div>
</template> </template>

@ -307,7 +307,7 @@ export default {
}, },
xAxis: { xAxis: {
name: "辆", name: "辆",
// max: total, max: '100',
splitLine: { splitLine: {
show: false, show: false,
}, },
@ -540,7 +540,7 @@ export default {
}, },
xAxis: { xAxis: {
name: "辆", name: "辆",
// max: total, max: 50,
splitLine: { splitLine: {
show: false, show: false,
}, },
@ -733,7 +733,7 @@ export default {
}, },
xAxis: { xAxis: {
name: "辆", name: "辆",
// max: total, max: 150,
splitLine: { splitLine: {
show: false, show: false,
}, },
@ -927,7 +927,7 @@ export default {
}, },
xAxis: { xAxis: {
name: "辆", name: "辆",
// max: total, max: 30,
splitLine: { splitLine: {
show: false, show: false,
}, },

@ -451,7 +451,9 @@
<el-table-column label="单位" width="50" align="center" prop="unit" /> <el-table-column label="单位" width="50" align="center" prop="unit" />
<el-table-column label="反冲标识" align="center" prop="recoil" /> <el-table-column label="反冲标识" align="center" prop="recoil" />
<el-table-column label="sap项目编码" align="center" prop="rspos" /> <el-table-column label="订单数量" width="80" align="left" prop="quantitySplit" />
<el-table-column label="Bom用量" width="100" align="left" prop="quantitySplitBom" />
<el-table-column label="sap项目编码" width="100" align="center" prop="rspos" />
<el-table-column label="仓库" width="150" align="center" prop="warehouseCode"> <el-table-column label="仓库" width="150" align="center" prop="warehouseCode">
<template slot-scope="scope"> <template slot-scope="scope">
<el-select v-model="scope.row.warehouseCode" placeholder="请选择仓库" width="50%" <el-select v-model="scope.row.warehouseCode" placeholder="请选择仓库" width="50%"
@ -462,8 +464,7 @@
</el-select> </el-select>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="订单数量" width="110" align="left" prop="quantitySplit" />
<el-table-column label="Bom用量" width="110" align="left" prop="quantitySplitBom" />
<el-table-column label="报工单编号" align="center" prop="reportCode" width="90" :show-overflow-tooltip="true"/> <el-table-column label="报工单编号" align="center" prop="reportCode" width="90" :show-overflow-tooltip="true"/>
<el-table-column label="创建时间" align="center" prop="createTime" width="130" :show-overflow-tooltip="true"/> <el-table-column label="创建时间" align="center" prop="createTime" width="130" :show-overflow-tooltip="true"/>
<el-table-column label="工单编码" width="80" align="left" prop="workorderCode" <el-table-column label="工单编码" width="80" align="left" prop="workorderCode"

@ -391,6 +391,7 @@ export default {
getCheckTypes() { getCheckTypes() {
getCheckTypes('inventory').then(response => { getCheckTypes('inventory').then(response => {
this.checkTypes = response; this.checkTypes = response;
}); });
}, },
/**获取默认查询时间段**/ /**获取默认查询时间段**/
@ -495,6 +496,7 @@ export default {
handleAdd() { handleAdd() {
this.reset(); this.reset();
this.form.defects = this.defectTypeList; this.form.defects = this.defectTypeList;
this.form.checkType = 'checkTypeCC';
this.open = true; this.open = true;
this.title = "添加库存检验"; this.title = "添加库存检验";
}, },

@ -27,6 +27,7 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<!--
<el-form-item label="订单号"> <el-form-item label="订单号">
<el-input <el-input
v-model="queryParams.workorderCodeSap" v-model="queryParams.workorderCodeSap"
@ -36,6 +37,18 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
-->
<el-form-item label="入库时间">
<el-date-picker
v-model="queryParams.incomeTimeArray"
format="yyyy-MM-dd"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<el-form-item label="仓库名称"> <el-form-item label="仓库名称">
<el-select v-model="queryParams.supplierCode" placeholder="请选择仓库" width="50%" clearable> <el-select v-model="queryParams.supplierCode" placeholder="请选择仓库" width="50%" clearable>
<el-option v-for="work in cwarehouseList" <el-option v-for="work in cwarehouseList"
@ -82,7 +95,7 @@
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import moment from "moment/moment";
import { getPutInOrder,getWarehouseList } from "@/api/quality/income"; import { getPutInOrder,getWarehouseList } from "@/api/quality/income";
export default { export default {
name: "itemPutInOrder", name: "itemPutInOrder",
@ -112,7 +125,8 @@ export default {
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
workorderCode: '' workorderCode: '',
incomeTimeArray: [],
}, },
selectionRow:{}, selectionRow:{},
cwarehouseList: [], cwarehouseList: [],
@ -127,7 +141,14 @@ export default {
/** 查询表格列表*/ /** 查询表格列表*/
getList() { getList() {
debugger
this.loading = true; this.loading = true;
if (this.queryParams.incomeTimeArray.length > 0) {
this.queryParams.incomeTimeStart = moment(this.queryParams.incomeTimeArray[0]).format("YYYY-MM-DD");
this.queryParams.incomeTimeEnd = moment(this.queryParams.incomeTimeArray[1]).format("YYYY-MM-DD");
}
getPutInOrder(this.queryParams).then(response => { getPutInOrder(this.queryParams).then(response => {
this.itemList = response.rows; this.itemList = response.rows;
this.total = response.total; this.total = response.total;

@ -53,8 +53,7 @@
</el-form-item> </el-form-item>
<el-form-item label="CPK品类" prop="cpkType"> <el-form-item label="CPK品类" prop="cpkType">
<el-select <el-select v-model="queryParams.cpkType"
v-model="queryParams.cpkType"
placeholder="请选择品类" placeholder="请选择品类"
> >
<el-option <el-option

@ -55,7 +55,7 @@
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['mes:prepare:export']" v-hasPermi="['mes:prepare:export']"
>导出</el-button> >导出明细</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
@ -72,7 +72,7 @@
</el-table-column> </el-table-column>
<el-table-column prop="workorderCodeSap" label="订单编码" width="100" align="center"/> <el-table-column prop="workorderCodeSap" label="订单编码" width="100" align="center"/>
<el-table-column prop="equipmentName" label="线体名称" width="100" align="center"/> <el-table-column prop="equipmentName" label="线体名称" width="100" align="center"/>
<el-table-column prop="incomeBatchNo" label="批次" width="300" align="center"/> <el-table-column prop="incomeBatchNo" label="已检批次" width="300" align="center"/>
<el-table-column prop="incomeTimeStr" label="生产日期" width="100" align="center"/> <el-table-column prop="incomeTimeStr" label="生产日期" width="100" align="center"/>
<el-table-column prop="materialName" label="产品名称"align="center"/> <el-table-column prop="materialName" label="产品名称"align="center"/>
<el-table-column prop="materialCode" label="产品编码" width="150" align="center" <el-table-column prop="materialCode" label="产品编码" width="150" align="center"

Loading…
Cancel
Save