<script setup>
|
import { onBeforeUnmount, onMounted, onUnmounted, ref, computed } from "vue";
|
import { useRouter } from "vue-router"
|
import { host, WebSocketHost } from '@/utils/constants'
|
import request from "@/utils/request"
|
import { closeWebSocket, initializeWebSocket } from '@/utils/WebSocketService';
|
import dayjs from 'dayjs';
|
import { ElMessage } from 'element-plus'
|
import { useI18n } from 'vue-i18n'
|
|
const router = useRouter()
|
const blinda = ref(false)
|
const blindb = ref(false)
|
const blindc = ref(false)
|
const { t } = useI18n()
|
let language = ref(localStorage.getItem('lang') || 'zh')
|
let socket = null;
|
const rawGlassStorageDetailList = ref([])
|
const orderDTOS = ref([])
|
const socketUrl = `ws://${WebSocketHost}:${host}/api/glassStorage/api/talk/largenScreen`;
|
const handleMessage = (data) => {
|
rawGlassStorageDetailList.value = data.rawGlassStorageDetailList[0]
|
orderDTOS.value = data.orderDTOS[0]
|
};
|
let socket1 = null;
|
const edgOneTasks = ref([])
|
const edgTwoTasks = ref([])
|
const engineeringOne = ref([])
|
const engineeringTwo = ref([])
|
const socketUrl1 = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/largenScreen`;
|
const handleMessage1 = (data) => {
|
edgOneTasks.value = data.edgOneTasks[0];
|
edgTwoTasks.value = data.edgTwoTasks[0];
|
engineeringOne.value = data.engineeringOne[0];
|
engineeringTwo.value = data.engineeringTwo[0];
|
if (numBoxes.value != edgOneTasks.value.length) {
|
numBoxes.value = edgOneTasks.value.length;
|
boxStart();
|
}
|
if (numBoxes2.value != edgTwoTasks.value.length) {
|
numBoxes2.value = edgTwoTasks.value.length;
|
boxStart2();
|
}
|
};
|
let socket2 = null;
|
const temperingTaskType = ref([])
|
const temperingGlassInfoList = ref([])
|
const temperingGlassInfoInList = ref([])
|
const socketUrl2 = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/largenScreen`;
|
const handleMessage2 = (data) => {
|
temperingTaskType.value = data.temperingTaskType[0];
|
temperingGlassInfoList.value = data.temperingGlassInfoList[0];
|
if (numBoxes3.value != temperingTaskType.value) {
|
numBoxes3.value = temperingTaskType.value;
|
boxStart3();
|
}
|
if (temperingGlassInfoList.value > 1) {
|
numBoxes4.value = 1;
|
} else {
|
numBoxes4.value = 0;
|
}
|
temperingGlassInfoInList.value = data.temperingGlassInfoInList[0];
|
// if (numBoxes4.value != temperingGlassInfoOutList.value) {
|
// numBoxes4.value = temperingGlassInfoOutList.value;
|
// boxStart3();
|
// }
|
};
|
let socket3 = null;
|
const bigStorageCageUsage = ref([])
|
const socketUrl3 = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/largenScreen`;
|
const handleMessage3 = (data) => {
|
bigStorageCageUsage.value = data.bigStorageCageUsage[0];
|
};
|
let socket4 = null;
|
const hollowBigStorageCageUsage = ref([])
|
const socketUrl4 = `ws://${WebSocketHost}:${host}/api/hollowGlass/api/talk/largenScreen`;
|
const handleMessage4 = (data) => {
|
hollowBigStorageCageUsage.value = data.hollowBigStorageCageUsage[0];
|
};
|
let socket5 = null;
|
const productionVO = ref([])
|
const socketUrl5 = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/largenScreenProduction`;
|
const handleMessage5 = (data) => {
|
productionVO.value = data.productionVO;
|
};
|
|
const tableDatad = ref([]);
|
const patternUsage = async () => {
|
try {
|
const response = await request.post('/glassStorage/rawGlassStorageDetails/patternUsage?width=' + ptnusage.value.width + '&height=' + ptnusage.value.height + '&thickness=' + ptnusage.value.thickness + '&films=' + ptnusage.value.films);
|
if (response.code == 200) {
|
ElMessage.success(response.message);
|
tableDatad.value = response.data;
|
} else {
|
ElMessage.error(response.message);
|
}
|
}
|
catch (error) {
|
console.error(error);
|
}
|
}
|
|
const tableData = ref([]);
|
const dynamicColumns = ref([]);
|
const flowCardDetail = async (orderId) => {
|
blinda.value = true;
|
try {
|
const response = await request.post('/glassStorage/flow_card/flowCardReportForms?orderId=' + orderId);
|
if (response.code == 200) {
|
ElMessage.success(response.message);
|
tableData.value = response.data;
|
// 解析数据并生成动态列
|
if (response.data.length > 0) {
|
// 解析第一个对象的 reportWorkQuantity,确定动态列
|
const firstItem = response.data[0];
|
const reportData = JSON.parse(firstItem.reportWorkQuantity || "{}");
|
dynamicColumns.value = Object.keys(reportData).map((key) => ({
|
prop: key,
|
label: key,
|
}));
|
|
// 解析数据并将 JSON 字符串转换为对象
|
tableData.value = response.data.map((item) => {
|
const reportData = JSON.parse(item.reportWorkQuantity || "{}");
|
return {
|
...item,
|
...reportData, // 把 JSON 字段合并到平铺对象
|
};
|
});
|
}
|
} else {
|
ElMessage.error(response.message);
|
}
|
}
|
catch (error) {
|
console.error(error);
|
}
|
}
|
|
const ptnusage = ref({
|
width: '',
|
height: '',
|
thickness: '',
|
films: ''
|
})
|
// 点击下方弹窗
|
const handlehistorical = (row) => {
|
blindb.value = true;
|
patternUsage()
|
};
|
// 在组件挂载时设置默认时间范围
|
onMounted(() => {
|
boxStart();
|
boxStart2();
|
boxStart3();
|
boxStart4();
|
requestAnimationFrame(animate);
|
socket = initializeWebSocket(socketUrl, handleMessage);
|
socket1 = initializeWebSocket(socketUrl1, handleMessage1);
|
socket2 = initializeWebSocket(socketUrl2, handleMessage2);
|
socket3 = initializeWebSocket(socketUrl3, handleMessage3);
|
socket4 = initializeWebSocket(socketUrl4, handleMessage4);
|
socket5 = initializeWebSocket(socketUrl5, handleMessage5);
|
const endTime = dayjs().startOf('minute'); // 当前时间,精确到分钟
|
const startTime = endTime.subtract(1, 'day').startOf('minute'); // 当前时间的前一天,精确到分钟
|
// 设置时间范围为 [开始时间, 结束时间]
|
// timeRange.value = [startTime.format('YYYY-MM-DD HH:mm:ss'), endTime.format('YYYY-MM-DD HH:mm:ss')];
|
});
|
// onMounted(() => {
|
// socket = initializeWebSocket(socketUrl, handleMessage);
|
// });
|
onUnmounted(() => {
|
if (socket) {
|
closeWebSocket(socket);
|
closeWebSocket(socket1);
|
closeWebSocket(socket2);
|
closeWebSocket(socket3);
|
closeWebSocket(socket4);
|
closeWebSocket(socket5);
|
}
|
});
|
onBeforeUnmount(() => {
|
closeWebSocket();
|
});
|
const numBoxes = ref(5);
|
const numBoxes2 = ref(5);
|
const numBoxes3 = ref(5);
|
const numBoxes4 = ref(1);
|
const speed = 0.1;
|
const maxX = 250; // 终点X坐标
|
const maxY = -90; // 终点Y坐标
|
const maxX2 = 313; // 终点X坐标
|
const maxY2 = -204; // 终点Y坐标
|
const maxX3 = 125; // 终点X坐标
|
const maxY3 = -105; // 终点Y坐标
|
const maxX4 = 80; // 终点X坐标
|
const maxY4 = 0; // 终点Y坐标
|
const delayFrames = 600; // 每个 div 的延迟帧数
|
const boxes = ref([]);
|
const boxes2 = ref([]);
|
const boxes3 = ref([]);
|
const boxes4 = ref([]);
|
// 初始化 div 数据
|
const boxStart = () => {
|
boxes.value = [];
|
for (let i = 0; i < numBoxes.value; i++) {
|
boxes.value.push({
|
x: 0,
|
y: 0, // 初始位置在底部
|
direction: 'up',
|
delay: i * delayFrames,
|
style: {
|
width: '15px',
|
height: '15px',
|
backgroundColor: i % 2 === 0 ? '#911005' : '#911005',
|
position: 'absolute',
|
transform: `translate(0px, 0px)`
|
}
|
});
|
}
|
}
|
const boxStart2 = () => {
|
boxes2.value = [];
|
for (let i = 0; i < numBoxes2.value; i++) {
|
boxes2.value.push({
|
x: 0,
|
y: 0, // 初始位置在底部
|
direction: 'up',
|
delay: i * delayFrames,
|
style: {
|
width: '15px',
|
height: '15px',
|
backgroundColor: i % 2 === 0 ? '#911005' : '#911005',
|
position: 'absolute',
|
transform: `translate(0px, 0px)`
|
}
|
});
|
}
|
}
|
const boxStart3 = () => {
|
boxes3.value = [];
|
for (let i = 0; i < numBoxes3.value; i++) {
|
boxes3.value.push({
|
x: 0,
|
y: 0, // 初始位置在底部
|
direction: 'left',
|
delay: i * delayFrames,
|
style: {
|
width: '15px',
|
height: '15px',
|
backgroundColor: i % 2 === 0 ? '#911005' : '#911005',
|
position: 'absolute',
|
transform: `translate(0px, 0px)`
|
}
|
});
|
}
|
}
|
const boxStart4 = () => {
|
boxes4.value = [];
|
for (let i = 0; i < numBoxes4.value; i++) {
|
boxes4.value.push({
|
x: 0,
|
y: 0, // 初始位置在底部
|
direction: 'right',
|
delay: i * delayFrames,
|
style: {
|
width: '15px',
|
height: '15px',
|
backgroundColor: i % 2 === 0 ? '#911005' : '#911005',
|
position: 'absolute',
|
transform: `translate(0px, 0px)`
|
}
|
});
|
}
|
}
|
const animate = () => {
|
boxes.value.forEach((box) => {
|
if (box.delay > 0) {
|
box.delay--;
|
return;
|
}
|
if (box.direction === 'up') {
|
box.y -= speed;
|
if (box.y <= maxY) {
|
// box.y = 0; // 确保不会超出界限
|
box.direction = 'left';
|
}
|
} else if (box.direction === 'left') {
|
box.x -= speed;
|
if (box.x <= -maxX) {
|
box.x = 0;
|
box.y = 0; // 重新回到底部
|
box.direction = 'up';
|
}
|
}
|
box.style = {
|
...box.style,
|
transform: `translate(${box.x}px, ${box.y}px)`
|
};
|
});
|
boxes2.value.forEach((box) => {
|
if (box.delay > 0) {
|
box.delay--;
|
return;
|
}
|
if (box.direction === 'up') {
|
box.y -= speed;
|
if (box.y <= maxY2) {
|
// box.y = 0; // 确保不会超出界限
|
box.direction = 'left';
|
}
|
} else if (box.direction === 'left') {
|
box.x -= speed;
|
if (box.x <= -maxX2) {
|
box.x = 0;
|
box.y = 0; // 重新回到底部
|
box.direction = 'up';
|
}
|
}
|
box.style = {
|
...box.style,
|
transform: `translate(${box.x}px, ${box.y}px)`
|
};
|
});
|
boxes3.value.forEach((box) => {
|
if (box.delay > 0) {
|
box.delay--;
|
return;
|
}
|
if (box.direction === 'up') {
|
box.y -= speed;
|
if (box.y <= maxY3) {
|
// box.y = 0; // 确保不会超出界限
|
box.direction = 'left';
|
box.x = 0;
|
box.y = 0; // 重新回到底部
|
}
|
} else if (box.direction === 'left') {
|
box.x -= speed;
|
if (box.x <= -maxX3) {
|
|
box.direction = 'up';
|
}
|
}
|
box.style = {
|
...box.style,
|
transform: `translate(${box.x}px, ${box.y}px)`
|
};
|
});
|
boxes4.value.forEach((box) => {
|
if (box.delay > 0) {
|
box.delay--;
|
return;
|
}
|
if (box.direction === 'right') {
|
box.x += speed;
|
if (box.x >= maxX4) {
|
// box.y = 0; // 确保不会超出界限
|
box.x = 0;
|
box.y = 0; // 重新回到底部
|
}
|
}
|
box.style = {
|
...box.style,
|
transform: `translate(${box.x}px, ${box.y}px)`
|
};
|
});
|
requestAnimationFrame(animate);
|
};
|
//嵌入历史任务
|
const iframeUrl1 = ref('');
|
const iframe1 = ref(false);
|
const handlehistorical1 = () => {
|
iframe1.value = true;
|
iframeUrl1.value = `${window.location.origin}/#/GlassStorage/rawhistory`;
|
};
|
const iframeUrl2 = ref('');
|
const iframe2 = ref(false);
|
const handlehistorical2 = () => {
|
iframe2.value = true;
|
iframeUrl2.value = `${window.location.origin}/#/Returns/upreturnhistory`;;
|
};
|
const iframeUrl3 = ref('');
|
const iframe3 = ref(false);
|
const handlehistorical3 = () => {
|
iframe3.value = true;
|
iframeUrl3.value = `${window.location.origin}/#/Returns/upreturnhistory2`;
|
};
|
const iframeUrl4 = ref('');
|
const iframe4 = ref(false);
|
const handlehistorical4 = () => {
|
iframe4.value = true;
|
iframeUrl4.value = `${window.location.origin}/#/Caching/cachingbeforehistory`;
|
};
|
const iframeUrl5 = ref('');
|
const iframe5 = ref(false);
|
const handlehistorical5 = () => {
|
iframe5.value = true;
|
iframeUrl5.value = `${window.location.origin}/#/Caching/cachingunhistory`;
|
};
|
const iframeUrl6 = ref('');
|
const iframe6 = ref(false);
|
const handlehistorical6 = () => {
|
iframe6.value = true;
|
iframeUrl6.value = `${window.location.origin}/#/Slicecage/slicecagehistory`;
|
};
|
const iframeUrl7 = ref('');
|
const iframe7 = ref(false);
|
const handlehistorical7 = () => {
|
iframe7.value = true;
|
iframeUrl7.value = `${window.location.origin}/#/hollow/hellowquiphistory`;
|
};
|
const iframeUrl8 = ref('');
|
const iframe8 = ref(false);
|
const handlehistorical8 = () => {
|
iframe8.value = true;
|
iframeUrl8.value = `${window.location.origin}/#/hollow/hellowquiptwohistory`;
|
};
|
const iframeUrl9 = ref('');
|
const iframe9 = ref(false);
|
const handlehistorical9 = () => {
|
iframe9.value = true;
|
iframeUrl9.value = `${window.location.origin}/#/hollow/hellowslicecagehistory`;
|
};
|
const iframeUrl10 = ref('');
|
const iframe10 = ref(false);
|
const handlehistorical10 = () => {
|
iframe10.value = true;
|
iframeUrl10.value = `${window.location.origin}/#/largescreendisplay/statistics`;
|
};
|
const transposedData = computed(() => {
|
const keys = Object.keys(productionVO.value[0] || {});
|
return keys.map(key => {
|
const row = { name: fieldNames[key] || key };
|
productionVO.value.forEach((item, index) => {
|
row[`value${index}`] = item[key];
|
});
|
return row;
|
});
|
});
|
const fieldNames = {
|
date: t('large.date'),
|
countOutOne: t('large.countOutOne'),
|
totalAreaOutOne: t('large.totalAreaOutOne'),
|
countOutTwo: t('large.countOutTwo'),
|
totalAreaOutTwo: t('large.totalAreaOutTwo'),
|
countIn: t('large.countIn'),
|
totalAreaIn: t('large.totalAreaIn'),
|
countOut: t('large.countOut'),
|
totalAreaOut: t('large.totalAreaOut'),
|
hollowCountOutOne: t('large.hollowCountOutOne'),
|
hollowTotalAreaOutOne: t('large.hollowTotalAreaOutOne'),
|
hollowCountOutTwo: t('large.hollowCountOutTwo'),
|
hollowTotalAreaOutTwo: t('large.hollowTotalAreaOutTwo'),
|
};
|
|
</script>
|
<template>
|
<div style="height: 500px;">
|
<el-dialog v-model="iframe1" top="10vh" width="95%">
|
<iframe :src="iframeUrl1" marginwidth="2000px" marginheight="2000px" width="100%" height="700px"
|
frameborder="0"></iframe>
|
</el-dialog>
|
<el-dialog v-model="iframe2" top="10vh" width="95%">
|
<iframe :src="iframeUrl2" marginwidth="2000px" marginheight="2000px" width="100%" height="700px"
|
frameborder="0"></iframe>
|
</el-dialog>
|
<el-dialog v-model="iframe3" top="10vh" width="95%">
|
<iframe :src="iframeUrl3" marginwidth="2000px" marginheight="2000px" width="100%" height="700"
|
frameborder="0"></iframe>
|
</el-dialog>
|
<el-dialog v-model="iframe4" top="10vh" width="95%">
|
<iframe :src="iframeUrl4" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
|
frameborder="0"></iframe>
|
</el-dialog>
|
<el-dialog v-model="iframe5" top="10vh" width="95%">
|
<iframe :src="iframeUrl5" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
|
frameborder="0"></iframe>
|
</el-dialog>
|
<el-dialog v-model="iframe6" top="10vh" width="95%">
|
<iframe :src="iframeUrl6" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
|
frameborder="0"></iframe>
|
</el-dialog>
|
<el-dialog v-model="iframe7" top="10vh" width="95%">
|
<iframe :src="iframeUrl7" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
|
frameborder="0"></iframe>
|
</el-dialog>
|
<el-dialog v-model="iframe8" top="10vh" width="95%">
|
<iframe :src="iframeUrl8" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
|
frameborder="0"></iframe>
|
</el-dialog>
|
<el-dialog v-model="iframe9" top="10vh" width="95%">
|
<iframe :src="iframeUrl9" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
|
frameborder="0"></iframe>
|
</el-dialog>
|
<el-dialog v-model="iframe10" top="10vh" width="95%">
|
<iframe :src="iframeUrl10" marginwidth="2000px" marginheight="2000px" width="100%" height="750px"
|
frameborder="0"></iframe>
|
</el-dialog>
|
|
<div class="awatch" style="display: flex;">
|
<!-- 生产统计 -->
|
<div style="height: 100px;width: 15%;float: right;">
|
<el-table height="540" ref="table" :data="transposedData" @click="handlehistorical10"
|
:header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }">
|
<el-table-column prop="name" align="center" min-width="100" />
|
<el-table-column v-for="(item, index) in productionVO" :key="index" :prop="'value' + index" align="center"
|
min-width="80" />
|
</el-table>
|
<div>
|
<el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
|
@click="handlehistorical1">{{
|
$t('large.historicaltasks1') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
|
@click="handlehistorical2">{{
|
$t('large.historicaltasks2') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
|
@click="handlehistorical3">{{
|
$t('large.historicaltasks3') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
|
@click="handlehistorical4">{{
|
$t('large.historicaltasks4') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
|
@click="handlehistorical5">{{
|
$t('large.historicaltasks5') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
|
@click="handlehistorical6">{{
|
$t('large.historicaltasks6') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
|
@click="handlehistorical7">{{
|
$t('large.historicaltasks7') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
|
@click="handlehistorical8">{{
|
$t('large.historicaltasks8') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
|
@click="handlehistorical9">{{
|
$t('large.historicaltasks9') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 5px;" id="searchButton" type="primary"
|
@click="blindc=true">{{
|
$t('large.order') }}</el-button>
|
</div>
|
</div>
|
<div class="img-screen" alt="Screen">
|
<!-- 钢化色块 -->
|
<div v-if="temperingGlassInfoInList > 0" class="tempering"
|
style="width: 55px;height: 25px;top: 359px;left: 162px;position: absolute;background-color: #911005;"></div>
|
<div v-if="temperingGlassInfoList > 0" class="tempering"
|
style="width: 66px;height: 28px;top: 355px;left: 284px;position: absolute;background-color: #911005;"></div>
|
<div v-if="temperingGlassInfoList > 1" class="tempering"
|
style="width: 66px;height: 28px;top: 355px;left: 358px;position: absolute;background-color: #911005;"></div>
|
<!-- 切割台色块 -->
|
<div v-if="engineeringOne.length > 1" class="slicing"
|
style="width: 59px;height: 29px;top: 629px;left: 562px;position: absolute;background-color: #911005;"></div>
|
<div v-if="engineeringTwo.length > 1" class="slicing"
|
style="width: 59px;height: 29px;top: 692px;left: 562px;position: absolute;background-color: #911005;"></div>
|
<!-- 原片仓储色块 -->
|
<div class="raw" style="width: 35px;height: 40px;top: 624px;left: 372px;position: absolute;">
|
<div v-for="(item, index) in rawGlassStorageDetailList.slice(0, 7)" :key="index"
|
:style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div>
|
</div>
|
<div class="raw" style="width: 35px;height: 58px;top: 673px;left: 372px;position: absolute;">
|
<div v-for="(item, index) in rawGlassStorageDetailList.slice(8, 17)" :key="index"
|
:style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div>
|
</div>
|
<div class="raw" style="width: 35px;height: 20px;top: 751px;left: 372px;position: absolute;">
|
<div v-for="(item, index) in rawGlassStorageDetailList.slice(18, 20)" :key="index"
|
:style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div>
|
</div>
|
<div class="raw" style="width: 35px;height: 27px;top: 732px;left: 459px;position: absolute;">
|
<div v-for="(item, index) in rawGlassStorageDetailList.slice(21, 25)" :key="index"
|
:style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div>
|
</div>
|
<div class="raw" style="width: 35px;height: 12px;top: 611px;left: 459px;position: absolute;">
|
<div v-for="(item, index) in rawGlassStorageDetailList.slice(26, 27)" :key="index"
|
:style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div>
|
</div>
|
<div class="raw" style="width: 35px;height: 12px;top: 6676px;left: 459px;position: absolute;">
|
<div v-for="(item, index) in rawGlassStorageDetailList.slice(28, 29)" :key="index"
|
:style='"width: " + (item.remainQuantity / 5) + "px;height: 5.6px;background-color: #911005;"'></div>
|
</div>
|
<!-- 磨边色块 -->
|
<div class="container"
|
style="position: relative;width: 20px;height: 20px;top: 628px;left: 804px;position: absolute;">
|
<div v-for="(box, index) in boxes" :key="index" class="box" :style="box.style"></div>
|
</div>
|
<div class="container"
|
style="position: relative;width: 20px;height: 20px;top: 690px;left: 867px;position: absolute;">
|
<div v-for="(box, index) in boxes2" :key="index" class="box" :style="box.style"></div>
|
</div>
|
<!-- 钢化运动色块 -->
|
<div class="container"
|
style="position: relative;width: 20px;height: 20px;top: 468px;left: 250px;position: absolute;">
|
<div v-for="(box, index) in boxes3" :key="index" class="box" :style="box.style"></div>
|
</div>
|
<div class="container"
|
style="position: relative;width: 20px;height: 20px;top: 357px;left: 618px;position: absolute;">
|
<div v-for="(box, index) in boxes4" :key="index" class="box" :style="box.style"></div>
|
</div>
|
<!-- 钢化前大理片色块 -->
|
<div class="container" v-for="(item, index) in bigStorageCageUsage.slice(0, 1)" :key="index"
|
:style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 471px;left: 389px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in bigStorageCageUsage.slice(1, 2)" :key="index"
|
:style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 491px;left: 389px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in bigStorageCageUsage.slice(2, 3)" :key="index"
|
:style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 510px;left: 389px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in bigStorageCageUsage.slice(3, 4)" :key="index"
|
:style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 530px;left: 389px;position: absolute;background-color: #911005;"'>
|
</div>
|
<!-- 中空前大理片色块 -->
|
<div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(0, 1)" :key="index"
|
:style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 334px;left: 832px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(1, 2)" :key="index"
|
:style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 354px;left: 832px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(2, 3)" :key="index"
|
:style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 374px;left: 832px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(3, 4)" :key="index"
|
:style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 394px;left: 832px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(4, 5)" :key="index"
|
:style='"position: relative;width: " + (46 * item.percentage / 100) + "px;height: 17px;top: 414px;left: 832px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="clickable-area" @click="handlehistorical"
|
style="position: relative;width: 140px;height: 170px;top: 603px;left: 364px;"></div>
|
</div>
|
</div>
|
</div>
|
<el-dialog v-model="blindc" top="10vh" width="90%">
|
<el-table height="700" ref="table" :data="orderDTOS"
|
:header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
|
<el-table-column prop="orderId" align="center" :label="$t('large.orderId')" min-width="50" />
|
<el-table-column prop="customerName" align="center" :show-overflow-tooltip="true"
|
:label="$t('large.customerName')" min-width="90" />
|
<el-table-column prop="project" align="center" :label="$t('large.project')" min-width="50" />
|
<el-table-column prop="area" align="center" :label="$t('large.are')" min-width="50" />
|
<el-table-column prop="quantity" align="center" :label="$t('large.quantity')" min-width="50" />
|
<el-table-column prop="percent" align="center" :label="$t('large.percent')" min-width="50" />
|
<el-table-column align="center" :label="$t('large.operate')" min-width="50">
|
<template #default="scope">
|
<el-button type="text" style="margin-left: 10px;margin-bottom: 10px;"
|
@click="flowCardDetail(scope.row.orderId)">{{ $t('large.mes') }}</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
</el-dialog>
|
<!-- 原片使用详情 -->
|
<el-dialog v-model="blindb" top="10vh" width="90%">
|
<div style="display: flex;">
|
<el-input v-model="ptnusage.width" style="margin-left: 10px;margin-bottom: 10px;width: 270px;" clearable
|
:placeholder="$t('screendisplay.pwidth')" />
|
<el-input v-model="ptnusage.height" style="margin-left: 10px;margin-bottom: 10px;width: 270px;" clearable
|
:placeholder="$t('screendisplay.pheight')" />
|
<el-input v-model="ptnusage.thickness" style="margin-left: 10px;margin-bottom: 10px;width: 270px;" clearable
|
:placeholder="$t('searchOrder.inthickness')" />
|
<el-input v-model="ptnusage.films" style="margin-left: 10px;margin-bottom: 10px;width: 270px;" clearable
|
:placeholder="$t('film.infilms')" />
|
<el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="patternUsage()">{{
|
$t('reportmanage.inquire')
|
}}</el-button>
|
</div>
|
<el-table ref="table" style="margin-top: 20px;height: 650px;" :data="tableDatad"
|
:header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
|
<el-table-column prop="patternWidth" align="center" :label="$t('basicData.width')" min-width="80" />
|
<el-table-column prop="patternHeight" align="center" :label="$t('basicData.height')" min-width="80" />
|
<el-table-column prop="patternThickness" align="center" :label="$t('basicData.thickness')" min-width="80" />
|
<el-table-column prop="filmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="120" />
|
<el-table-column prop="totalCount" align="center" :label="$t('searchOrder.allnumber')" min-width="120" />
|
<el-table-column prop="count" align="center" :label="$t('searchOrder.cagesnumber')" min-width="120" />
|
<el-table-column prop="finishCount" align="center" :label="$t('screendisplay.upnumber')" min-width="120" />
|
<el-table-column prop="damageCount" align="center" :label="$t('hellow.damagenumber')" min-width="120" />
|
</el-table>
|
</el-dialog>
|
<!-- 流程卡进度 -->
|
<el-dialog v-model="blinda" top="5vh" width="85%">
|
<el-table height="650" ref="table" :data="tableData"
|
:header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
|
<el-table-column prop="processId" fixed align="center" :label="$t('large.processId')" min-width="150" />
|
<el-table-column prop="glassChild" align="center" :label="$t('large.productname')" min-width="150" />
|
<el-table-column prop="orderNumber" align="center" :label="$t('large.serialnumber')" min-width="110" />
|
<el-table-column prop="technologyNumber" align="center" :label="$t('large.slicemarker')" min-width="110" />
|
<el-table-column prop="width" align="center" :label="$t('large.width')" min-width="110" />
|
<el-table-column prop="height" align="center" :label="$t('large.height')" min-width="110" />
|
<el-table-column prop="quantity" align="center" :label="$t('large.quantity')" min-width="110" />
|
<el-table-column prop="brokenNum" align="center" :label="$t('large.brokenNum')" min-width="100" />
|
<el-table-column prop="inventory" align="center" :label="$t('large.inventory')" min-width="100" />
|
<el-table-column prop="inventoryArea" align="center" :label="$t('large.inventoryarea')" min-width="100" />
|
<el-table-column prop="shippedQuantity" align="center" :label="$t('large.shippedQuantity')" min-width="110" />
|
<!-- <el-table-column prop="reportWorkQuantity" align="center" :label="$t('large.reportWorkQuantity')" min-width="110" />
|
<el-table-column prop="reportWorkQuantityCount" align="center" :label="$t('large.reportWorkQuantityCount')" min-width="110" /> -->
|
<!-- 动态生成的 reportWorkQuantity 列 -->
|
<el-table-column v-for="column in dynamicColumns" :key="column.prop" :prop="column.prop" :label="column.label"
|
align="center" min-width="110" />
|
</el-table>
|
</el-dialog>
|
</template>
|
<style scoped>
|
#dt {
|
display: block;
|
float: left;
|
line-height: 20px;
|
margin-left: 100px;
|
}
|
|
#dta {
|
display: block;
|
float: left;
|
line-height: 20px;
|
margin-left: 80%;
|
}
|
|
#dialog-footer {
|
text-align: center;
|
margin-top: -15px;
|
}
|
|
#message {
|
text-align: center;
|
align-items: center;
|
color: black;
|
width: 200px;
|
height: 100px;
|
background-color: #337ecc;
|
margin-left: 28%;
|
}
|
|
#awatch {
|
height: 460px;
|
}
|
|
.img-screen {
|
/* max-width: 48%;
|
max-height: 100%; */
|
/* margin-top: 50px; */
|
/* float: left; */
|
position: relative;
|
background-image: url('../../assets/screen.png');
|
width: 1002px;
|
height: 878px;
|
background-size: contain;
|
background-repeat: no-repeat;
|
/* background-position: center; */
|
/* width: 100%;
|
height: 0;
|
padding-bottom: 50%; */
|
}
|
|
.clickable-area {
|
cursor: pointer;
|
/* 指示这是一个可点击的区域 */
|
text-align: center;
|
/* 如果需要,可以在div中添加文本并居中 */
|
line-height: 95px;
|
/* 如果需要,使文本垂直居中 */
|
}
|
|
/* .awatch{
|
height: 460px;
|
/* max-width: 100%; */
|
.box {
|
transition: transform 0.016s linear;
|
}
|
</style>
|