| | |
| | | <template> |
| | | <div> |
| | | <div style="display: flex;"> |
| | | <div style="margin-left: 50px;margin-top: 15px;font-size:large">工程号:</div> |
| | | <div> |
| | | <div style="display: flex;"> |
| | | <div style="margin-left: 50px;margin-top: 15px;font-size:large">工程号:</div> |
| | | <el-input v-model="current" style="margin-left: 20px;margin-top: 15px;width: 240px" placeholder="请输入工程号" @input="updateUrl"/> |
| | | <el-button style="margin-top: 15px;margin-left: 15px;" type="primary" @click="fetchData">查询</el-button> |
| | | </div> |
| | | <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;margin-right: 10px;width: 1850px;" height="900" v-loading="loading"> |
| | | <div v-for="(row, rowIndex) in divsData" :key="rowIndex" class="row"> |
| | | <div v-for="(rect, colIndex) in row" :key="colIndex" class="div-container"> |
| | | <el-scrollbar height="430px" width="900px" style="background-color: #e9e9eb;"> |
| | | <div style="position: relative;width: 100%;height: 100%;"> |
| | | <div |
| | | v-for="(rect, index) in getAdjustedRectsForRow(rowIndex)" |
| | | :key="index" |
| | | class="rect" |
| | | :style="{ position: 'absolute', |
| | | top: `${rect.y_axis}px`, |
| | | left: `${rect.x_axis}px`, |
| | | width: `${rect.width}px`, |
| | | height: `${rect.height}px`, |
| | | backgroundColor: '#911005'}"> |
| | | <div class="centered-text"> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.process_id }}</div> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.project_no }}</div> |
| | | <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-scrollbar> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, onMounted, watch, watchEffect } from 'vue'; |
| | | import { useRoute, useRouter } from 'vue-router'; |
| | | import request from "@/utils/request" |
| | | const route = useRoute(); |
| | | const router = useRouter(); |
| | | const current = ref(route.query.current || ''); |
| | | const adjustedRects = ref([]); |
| | | const loading = ref(false); |
| | | const adjustedRectsPerRow = ref([]); |
| | | const divsData = ref([]); |
| | | const rawData = ref([]); |
| | | onMounted(() => { |
| | | if (route.query.current) { |
| | | current.value = route.query.current; |
| | | console.log(current.value); |
| | | window.localStorage.setItem('current', current.value) |
| | | } |
| | | }); |
| | | onMounted(async () => { |
| | | try { |
| | | let current = window.localStorage.getItem('current') |
| | | const response = await request.post(`/cacheGlass/taskCache/temperingTerritory?current=${current}`); |
| | | if (response.code === 200) { |
| | | rawData.value = response.data; |
| | | console.log(rawData.value); |
| | | processData(rawData.value); |
| | | } else { |
| | | // ElMessage.warning(res.msg) |
| | | } |
| | | } catch (error) { |
| | | // console.error('Error fetching rects :', error); |
| | | <el-button style="margin-top: 15px;margin-left: 15px;" type="primary" @click="fetchData">查询</el-button> |
| | | </div> |
| | | <el-card style="flex: 1;margin-left: 400px;margin-top: 50px;margin-right: 10px;width: 1100px;" height="900" > |
| | | <div v-for="(row, rowIndex) in divsData" :key="rowIndex" class="row"> |
| | | <div v-for="(rect, colIndex) in row" :key="colIndex" class="div-container"> |
| | | <div style="text-align: center;">炉号:{{ getAdjustedRectsForRow(rowIndex)[0].layout_id }} ---- 装载率:{{ getAdjustedRectsForRow(rowIndex)[0].olLayoutRate }}</div> |
| | | <el-scrollbar height="550px" width="1000px" style="background-color: #e9e9eb;"> |
| | | <div style="position: relative;width: 100%;height: 100%;"> |
| | | <div |
| | | v-for="(rect, index) in getAdjustedRectsForRow(rowIndex)" |
| | | :key="index" |
| | | class="rect" |
| | | :style="{ position: 'absolute', |
| | | top: `${rect.y_axis}px`, |
| | | left: `${rect.x_axis}px`, |
| | | width: `${rect.width}px`, |
| | | height: `${rect.height}px`, |
| | | backgroundColor: 'lightblue'}"> |
| | | <div class="centered-text"> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.sort }}</div> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.process_id }}</div> |
| | | <div style="font-size: 15px;font-weight: bold;">{{ rect.project_no }}</div> |
| | | <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-scrollbar> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </template> |
| | | <script setup> |
| | | import { ref, onMounted, watch, watchEffect } from 'vue'; |
| | | import { useRoute, useRouter } from 'vue-router'; |
| | | import request from "@/utils/request" |
| | | const route = useRoute(); |
| | | const router = useRouter(); |
| | | const current = ref(route.query.current || ''); |
| | | const adjustedRects = ref([]); |
| | | const loading = ref(false); |
| | | const adjustedRectsPerRow = ref([]); |
| | | const divsData = ref([]); |
| | | const rawData = ref([]); |
| | | onMounted(() => { |
| | | if (route.query.current) { |
| | | current.value = route.query.current; |
| | | window.localStorage.setItem('current', current.value) |
| | | } |
| | | }); |
| | | onMounted(async () => { |
| | | try { |
| | | let current = window.localStorage.getItem('current') |
| | | const response = await request.post(`/cacheGlass/taskCache/temperingTerritory?current=${current}`); |
| | | if (response.code === 200) { |
| | | rawData.value = response.data; |
| | | processData(rawData.value); |
| | | } else { |
| | | } |
| | | }); |
| | | watch( |
| | | current, |
| | | (newVal) => { |
| | | router.replace({ query: { current: newVal } }); |
| | | }, |
| | | { immediate: true } // 使用 immediate: true 来确保在组件挂载时立即执行一次 watch 回调 |
| | | ); |
| | | const fetchData = async () => { |
| | | try { |
| | | const response = await request.post(`/cacheGlass/taskCache/temperingTerritory?current=${current.value}`); |
| | | if (response.code === 200) { |
| | | rawData.value = response.data; |
| | | console.log(rawData.value); |
| | | processData(rawData.value); |
| | | } |
| | | } catch (error) { |
| | | console.error('Failed to fetch data:', error); |
| | | } finally { |
| | | loading.value = false; |
| | | } catch (error) { |
| | | } |
| | | }); |
| | | watch( |
| | | current, |
| | | (newVal) => { |
| | | router.replace({ query: { current: newVal } }); |
| | | }, |
| | | { immediate: true } // 使用 immediate: true 来确保在组件挂载时立即执行一次 watch 回调 |
| | | ); |
| | | const fetchData = async () => { |
| | | try { |
| | | const response = await request.post(`/cacheGlass/taskCache/temperingTerritory?current=${current.value}`); |
| | | if (response.code === 200) { |
| | | rawData.value = response.data; |
| | | processData(rawData.value); |
| | | } |
| | | } catch (error) { |
| | | } finally { |
| | | loading.value = false; |
| | | } |
| | | }; |
| | | function processData(data) { |
| | | const groupedData = []; |
| | | for (let i = 0; i < data.length; i += 2) { |
| | | groupedData.push(data.slice(i, i + 2)); |
| | | function processData(data) { |
| | | const groupedData = []; |
| | | for (let i = 0; i < data.length; i += 1) { |
| | | groupedData.push(data.slice(i, i + 1)); |
| | | } |
| | | divsData.value = groupedData; |
| | | const rowIndex = divsData.value; |
| | | adjustedRectsPerRow.value = divsData.value.map(() => []); |
| | | divsData.value.forEach((row, rowIndex) => { |
| | | const rawRowData = rawData.value[rowIndex].listGlass; |
| | | if (rawRowData) { |
| | | adjustedRectsPerRow.value[rowIndex] = rawRowData.map(rect => { |
| | | let adjustedWidth, adjustedHeight,newX,widtha,heighta; |
| | | if (rect.width < rect.height) { |
| | | widtha = rect.height; |
| | | heighta = rect.width; |
| | | }else { |
| | | widtha = rect.width; |
| | | heighta = rect.height; |
| | | } |
| | | if (rect.rotate_angle === 90) { |
| | | newX = rect.olHeight -(rect.y_axis + heighta); |
| | | adjustedWidth = heighta * (1000/rect.olHeight); |
| | | adjustedHeight = widtha * (550/rect.olWidth); |
| | | } else { |
| | | newX = rect.olHeight -(rect.y_axis + widtha); |
| | | adjustedWidth = widtha * (1000/rect.olHeight); |
| | | adjustedHeight = heighta * (550/rect.olWidth); |
| | | } |
| | | let adjustedRect = { |
| | | ...rect, |
| | | y_axis: rect.x_axis * (550/rect.olWidth), |
| | | x_axis: newX * (1000/rect.olHeight), |
| | | width: adjustedWidth, |
| | | height: adjustedHeight, |
| | | widtha: rect.width, |
| | | heighta: rect.height, |
| | | }; |
| | | return adjustedRect; |
| | | }); |
| | | } |
| | | divsData.value = groupedData; |
| | | adjustedRectsPerRow.value = divsData.value.map(() => []); |
| | | divsData.value.forEach((row, rowIndex) => { |
| | | const rawRowData = rawData.value[rowIndex]; |
| | | if (rawRowData) { |
| | | adjustedRectsPerRow.value[rowIndex] = rawRowData.map(rect => { |
| | | let adjustedWidth, adjustedHeight,newX; |
| | | if (rect.rotate_angle === 0) { |
| | | newX = rect.olHeight -(rect.y_axis + rect.height); |
| | | adjustedWidth = rect.height * (900/rect.olHeight); |
| | | adjustedHeight = rect.width * (430/rect.olWidth); |
| | | } else { |
| | | newX = rect.olHeight -(rect.y_axis + rect.width); |
| | | adjustedWidth = rect.width * (900/rect.olHeight); |
| | | adjustedHeight = rect.height * (430/rect.olWidth); |
| | | } |
| | | // 该页面为顺时针旋转90度 |
| | | let adjustedRect = { |
| | | ...rect, |
| | | // x_axis: rect.y_axis * (959.35/rect.olHeight), |
| | | y_axis: rect.x_axis * (430/rect.olWidth), |
| | | x_axis: newX * (900/rect.olHeight), |
| | | // y_axis: rect.x_axis * (430/rect.olWidth), |
| | | width: adjustedWidth, |
| | | height: adjustedHeight, |
| | | widtha: rect.width, |
| | | heighta: rect.height, |
| | | }; |
| | | return adjustedRect; |
| | | }); |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | // 方法用于获取当前行的adjustedRects |
| | | function getAdjustedRectsForRow(rowIndex) { |
| | | return adjustedRectsPerRow.value[rowIndex] || []; |
| | | function getAdjustedRectsForRow(rowIndex) { |
| | | return adjustedRectsPerRow.value[rowIndex] || []; |
| | | } |
| | | </script> |
| | | |
| | | |
| | | <style scoped> |
| | | </script> |
| | | <style scoped> |
| | | .row { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-bottom: 20px; |
| | | } |
| | | .div-container { |
| | | width: 900px; |
| | | float: left; |
| | | background-color: #f4f4f5; |
| | | height: 430px; |
| | | box-sizing: border-box; |
| | | } |
| | | </style> |
| | | width: 1000px; |
| | | float: left; |
| | | background-color: #f4f4f5; |
| | | height: 550px; |
| | | box-sizing: border-box; |
| | | } |
| | | </style> |