<script setup>
|
import { onBeforeUnmount, onMounted, onUnmounted, reactive, ref } 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, ElMessageBox } from 'element-plus'
|
import { useI18n } from 'vue-i18n'
|
const router = useRouter()
|
const blinda = ref(false)
|
const blindb = 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 temperingGlassInfoOutList = 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();
|
}
|
temperingGlassInfoOutList.value = data.temperingGlassInfoOutList[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(() => {
|
console.log("关闭了")
|
closeWebSocket();
|
});
|
const numBoxes = ref(5);
|
const numBoxes2 = ref(5);
|
const numBoxes3 = ref(5);
|
const numBoxes4 = ref(1);
|
const speed = 0.1;
|
const maxX = 200; // 终点X坐标
|
const maxY = -73; // 终点Y坐标
|
const maxX2 = 250; // 终点X坐标
|
const maxY2 = -165; // 终点Y坐标
|
const maxX3 = 100; // 终点X坐标
|
const maxY3 = -75; // 终点Y坐标
|
const maxX4 = 60; // 终点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' : 'blue',
|
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' : 'blue',
|
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' : 'blue',
|
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}/#/StockBasicData/stockhistory`;;
|
};
|
const iframeUrl5 = ref('');
|
const iframe5 = ref(false);
|
const handlehistorical5 = () => {
|
iframe5.value = true;
|
iframeUrl5.value = `${window.location.origin}/#/hollow/hellowslicecagehistory`;
|
iframeUrl5.value = `${window.location.origin}/#/hollow/hellowslicecagehistory`;
|
};
|
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/hellowquiptwohistory`;
|
};
|
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}/#/largescreendisplay/statistics`;
|
};
|
</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="iframe9" top="10vh" width="95%">
|
<iframe :src="iframeUrl9" marginwidth="2000px" marginheight="2000px" width="100%" height="750px" frameborder="0"></iframe>
|
</el-dialog>
|
<!-- 生产统计 -->
|
<div style="height: 190px;width: 88%;float: right;position: absolute;" @click="handlehistorical9">
|
<el-table height="700" ref="table" :data="productionVO"
|
:header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
|
<el-table-column prop="date" align="center" :label="$t('large.date')" min-width="70" />
|
<el-table-column prop="countOutOne" align="center" :label="$t('large.countOutOne')" min-width="40" />
|
<el-table-column prop="totalAreaOutOne" align="center" :label="$t('large.totalAreaOutOne')" min-width="40" />
|
<el-table-column prop="countOutTwo" align="center" :label="$t('large.countOutTwo')" min-width="50" />
|
<el-table-column prop="totalAreaOutTwo" align="center" :label="$t('large.totalAreaOutTwo')" min-width="50" />
|
<el-table-column prop="countIn" align="center" :label="$t('large.countIn')" min-width="50" />
|
<el-table-column prop="totalAreaIn" align="center" :label="$t('large.totalAreaIn')" min-width="50" />
|
<el-table-column prop="countOut" align="center" :label="$t('large.countOut')" min-width="40" />
|
<el-table-column prop="totalAreaOut" align="center" :label="$t('large.totalAreaOut')" min-width="40" />
|
<el-table-column prop="hollowCountOutOne" align="center" :label="$t('large.hollowCountOutOne')" min-width="40" />
|
<el-table-column prop="hollowTotalAreaOutOne" align="center" :label="$t('large.hollowTotalAreaOutOne')" min-width="40" />
|
<el-table-column prop="countOut" align="center" :label="$t('large.countOut')" min-width="40" />
|
<el-table-column prop="hollowCountOutTwo" align="center" :label="$t('large.hollowCountOutTwo')" min-width="40" />
|
<!-- <el-table-column align="center" :label="$t('large.operate')" min-width="50">
|
<template #default="scope">
|
<el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;"
|
@click="flowCardDetail(scope.row.orderId)">{{ $t('large.mes') }}</el-button>
|
</template>
|
</el-table-column> -->
|
</el-table>
|
</div>
|
<div class="awatch">
|
<div class="img-screen" alt="Screen">
|
<!-- 钢化色块 -->
|
<div v-if="temperingGlassInfoList > 0" class="tempering"
|
style="width: 50px;height: 22px;top: 354px;left: 228px;position: absolute;background-color: #911005;"></div>
|
<div v-if="temperingGlassInfoList > 1" class="tempering"
|
style="width: 50px;height: 22px;top: 354px;left: 284px;position: absolute;background-color: #911005;"></div>
|
<!-- 切割台色块 -->
|
<div v-if="engineeringOne.length > 1" class="slicing"
|
style="width: 50px;height: 22px;top: 575px;left: 453px;position: absolute;background-color: #911005;"></div>
|
<div v-if="engineeringTwo.length > 1" class="slicing"
|
style="width: 50px;height: 22px;top: 625px;left: 453px;position: absolute;background-color: #911005;"></div>
|
<!-- 原片仓储色块 -->
|
<div class="raw" style="width: 31px;height: 32px;top: 571px;left: 300px;position: absolute;">
|
<div v-for="(item, index) in rawGlassStorageDetailList.slice(0, 7)" :key="index"
|
:style='"width: " + (item.remainQuantity / 5) + "px;height: 5px;background-color: #911005;"'></div>
|
</div>
|
<div class="raw" style="width: 31px;height: 47px;top: 610px;left: 300px;position: absolute;">
|
<div v-for="(item, index) in rawGlassStorageDetailList.slice(8, 17)" :key="index"
|
:style='"width: " + (item.remainQuantity / 5) + "px;height: 5px;background-color: #911005;"'></div>
|
</div>
|
<div class="raw" style="width: 31px;height: 13px;top: 675px;left: 300px;position: absolute;">
|
<div v-for="(item, index) in rawGlassStorageDetailList.slice(18, 20)" :key="index"
|
:style='"width: " + (item.remainQuantity / 5) + "px;height: 5px;background-color: #911005;"'></div>
|
</div>
|
<div class="raw" style="width: 31px;height: 22px;top: 657px;left: 370px;position: absolute;">
|
<div v-for="(item, index) in rawGlassStorageDetailList.slice(21, 25)" :key="index"
|
:style='"width: " + (item.remainQuantity / 5) + "px;height: 5px;background-color: #911005;"'></div>
|
</div>
|
<div class="raw" style="width: 31px;height: 9px;top: 561px;left: 370px;position: absolute;">
|
<div v-for="(item, index) in rawGlassStorageDetailList.slice(26, 27)" :key="index"
|
:style='"width: " + (item.remainQuantity / 5) + "px;height: 5px;background-color: #911005;"'></div>
|
</div>
|
<div class="raw" style="width: 31px;height: 9px;top: 612px;left: 370px;position: absolute;">
|
<div v-for="(item, index) in rawGlassStorageDetailList.slice(28, 29)" :key="index"
|
:style='"width: " + (item.remainQuantity / 5) + "px;height: 5px;background-color: #911005;"'></div>
|
</div>
|
<!-- 磨边色块 -->
|
<div class="container"
|
style="position: relative;width: 20px;height: 20px;top: 572px;left: 648px;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: 625px;left: 700px;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: 438px;left: 196px;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: 355px;left: 496px;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: " + (38 * item.percentage / 100) + "px;height: 13px;top: 447px;left: 314px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in bigStorageCageUsage.slice(1, 2)" :key="index"
|
:style='"position: relative;width: " + (38 * item.percentage / 100) + "px;height: 13px;top: 463px;left: 314px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in bigStorageCageUsage.slice(2, 3)" :key="index"
|
:style='"position: relative;width: " + (38 * item.percentage / 100) + "px;height: 13px;top: 478px;left: 314px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in bigStorageCageUsage.slice(3, 4)" :key="index"
|
:style='"position: relative;width: " + (38 * item.percentage / 100) + "px;height: 13px;top: 493px;left: 314px;position: absolute;background-color: #911005;"'>
|
</div>
|
<!-- 中空前大理片色块 -->
|
<div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(0, 1)" :key="index"
|
:style='"position: relative;width: " + (38 * item.percentage / 100) + "px;height: 13px;top: 337px;left: 671px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(1, 2)" :key="index"
|
:style='"position: relative;width: " + (38 * item.percentage / 100) + "px;height: 13px;top: 353px;left: 671px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(2, 3)" :key="index"
|
:style='"position: relative;width: " + (38 * item.percentage / 100) + "px;height: 13px;top: 369px;left: 671px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(3, 4)" :key="index"
|
:style='"position: relative;width: " + (38 * item.percentage / 100) + "px;height: 13px;top: 385px;left: 671px;position: absolute;background-color: #911005;"'>
|
</div>
|
<div class="container" v-for="(item, index) in hollowBigStorageCageUsage.slice(4, 5)" :key="index"
|
:style='"position: relative;width: " + (38 * item.percentage / 100) + "px;height: 13px;top: 401px;left: 671px;position: absolute;background-color: #911005;"'>
|
</div>
|
</div>
|
|
<div class="clickable-area" @click="handlehistorical"
|
style="position: relative;width: 110px;height: 100px;top: 603px;left: 297px;"></div>
|
</div>
|
<!-- 订单情况 -->
|
<div style="height: 190px;width: 48%;float: right;">
|
<!-- <div>
|
<el-button style="margin-top: 5px;margin-left: 50px;" id="searchButton" type="info" @click="handlehistorical1">{{ $t('large.historicaltasks1') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlehistorical2">{{ $t('large.historicaltasks2') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlehistorical3">{{ $t('large.historicaltasks3') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlehistorical4">{{ $t('large.historicaltasks4') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlehistorical5">{{ $t('large.historicaltasks5') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlehistorical7">{{ $t('large.historicaltasks7') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlehistorical6">{{ $t('large.historicaltasks6') }}</el-button>
|
<el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlehistorical8">{{ $t('large.historicaltasks8') }}</el-button>
|
</div> -->
|
<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="primary" style="margin-left: 10px;margin-bottom: 10px;"
|
@click="flowCardDetail(scope.row.orderId)">{{ $t('large.mes') }}</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
</div>
|
</div>
|
<!-- 原片使用详情 -->
|
<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="110" />
|
<el-table-column prop="glassChild" align="center" :label="$t('large.productname')" min-width="110" />
|
<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: 808px;
|
height: 841px;
|
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>
|