wu
2024-08-27 2bb5874750f30f1e7c8c5c2df66c24dcf78b9b9b
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -1,33 +1,96 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
import request from "@/utils/request"
import { ref, onMounted, onBeforeUnmount } from 'vue';
import { ref, onMounted, onBeforeUnmount,nextTick  } from 'vue';
import { WebSocketHost ,host} from '@/utils/constants'
import { ElMessage, ElMessageBox } from 'element-plus'
import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
  import { useI18n } from 'vue-i18n'
  import { useRouter } from 'vue-router'
  const { t } = useI18n()
  let language = ref(localStorage.getItem('lang') || 'zh')
const dialogFormVisible = ref(false)
const dialogFormVisiblea = ref(true)
const dialogFormVisibleb = ref(false)
const dialogFormVisiblec = ref(false)
const blind1 = ref(false)
const blind2 = ref(false)
const blinda = ref(false)
const blindb = ref(false)
const dialogVisible = ref(false)
const width = ref();
const height = ref();
const adjustedRects1 = ref([]);
const adjustedRects2 = ref([]);
const adjustedRectsa = ref([]);
const adjustedRectsb = ref([]);
const tableData = ref([])
const engineerId = ref('')
const router = useRouter()
const currentGlassId = ref(null);
const currenttemperingFeedSequence = ref(null);
onMounted(async () => {
  try {
    const response = await request.post('/loadGlass/damage/selectDamagePrint', {
    type: 9,
    workingProcedure: '钢化',
    })
    if (response.code === 200) {
          tableData.value = response.data
          console.log(response.data);
    } else {
      ElMessage.warning(res.msg)
    }
  } catch (error) {
    // console.error('Error fetching rects :', error);
  }
});
const selectReportData = async () => {
  let postData = {
    type: 9,
    workingProcedure: '钢化',
    ...(engineerId.value !== '' && { engineerId: engineerId.value }),
  };
  const response = await request.post("/loadGlass/damage/selectDamagePrint", postData)
  if (response.code === 200) {
    tableData.value = response.data;
    ElMessage.success(response.message);
  } else {
    ElMessage.error(response.message);
  }
};
const printing = async () => {
  let postData = {
    type: 9,
    workingProcedure: '钢化',
    ...(engineerId.value !== '' && { engineerId: engineerId.value }),
  };
  console.log(engineerId.value);
  const response = await request.post("/loadGlass/damage/selectDamagePrintDetails", postData)
  if (response.code === 200) {
  dialogVisible.value = true;
    tableData.value = response.data;
    await nextTick();
  window.print();
} else {
    ElMessage.error(response.message);
  }
};
const printTable = () => {
  // 这里可以添加一些CSS样式来优化打印效果
  // 例如,可以添加一个隐藏的打印样式表
  window.print();
};
const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`;
const handleMessage = (data) => {  
  if (data.intoGlass2 && data.intoGlass2.length > 0) {  
    // 提取新的矩形ID
    const newGlassIds = new Set(data.intoGlass2[0].map(rect => rect.glassId));
    // 过滤出已存在的矩形
    const existingRects = adjustedRects2.value.filter(rect => newGlassIds.has(rect.glassId));
    // 计算新的矩形
    const newRects = data.intoGlass2[0].map(rect => {  
      const scaleFactor =  794.67/5087; 
        let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;;
@@ -61,17 +124,25 @@
        widtha: rect.width, 
        heighta: rect.height,
      }
    });
    // 合并新旧矩形,保留 isActive 状态
    adjustedRects2.value = adjustedRects2.value.map(oldRect => {
    });
    // 合并新旧矩形,并保留 isActive 状态
    adjustedRects2.value = existingRects.map(oldRect => {
      const newRect = newRects.find(r => r.glassId === oldRect.glassId);  
      if (newRect) {  
        return { ...oldRect, ...newRect, isActive: oldRect.isActive };  
      }  
      return oldRect; // 如果旧矩形在新数据中不存在,则保留原样
    }).concat(newRects.filter(r => !adjustedRects2.value.some(o => o.glassId === r.glassId)));
      return oldRect; // 如果旧矩形在新数据中不存在,但保留在newGlassIds中,则保留原样
    }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId)));
  }
  else if (data.intoGlass2 == null) {
    adjustedRects2.value = []
  }
  if (data.intoGlass && data.intoGlass.length > 0) {  
    // 提取新的矩形ID
    const newGlassIds = new Set(data.intoGlass[0].map(rect => rect.glassId));
    // 过滤出已存在的矩形
    const existingRects = adjustedRects1.value.filter(rect => newGlassIds.has(rect.glassId));
    // 计算新的矩形
    const newRects = data.intoGlass[0].map(rect => {  
      const scaleFactor =  794.67/5087; 
      let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;;
@@ -105,17 +176,25 @@
        widtha: rect.width, 
        heighta: rect.height,
      }
    });
    // 合并新旧矩形,保留 isActive 状态
    adjustedRects1.value = adjustedRects1.value.map(oldRect => {
    });
    // 合并新旧矩形,并保留 isActive 状态
    adjustedRects1.value = existingRects.map(oldRect => {
      const newRect = newRects.find(r => r.glassId === oldRect.glassId);  
      if (newRect) {  
        return { ...oldRect, ...newRect, isActive: oldRect.isActive };  
      }  
      return oldRect; // 如果旧矩形在新数据中不存在,则保留原样
    }).concat(newRects.filter(r => !adjustedRects1.value.some(o => o.glassId === r.glassId)));
      return oldRect; // 如果旧矩形在新数据中不存在,但保留在newGlassIds中,则保留原样
    }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId)));
  }
  else if (data.overGlass == null) {
    adjustedRects1.value = []
  }
  if (data.waitingGlass && data.waitingGlass.length > 0) {  
    // 提取新的矩形ID
    const newGlassIds = new Set(data.waitingGlass[0].map(rect => rect.glassId));
    // 过滤出已存在的矩形
    const existingRects = adjustedRectsa.value.filter(rect => newGlassIds.has(rect.glassId));
    // 计算新的矩形
    const newRects = data.waitingGlass[0].map(rect => {  
      const scaleFactor =  1621.78/5190; 
  let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;; 
@@ -149,17 +228,25 @@
    widtha: rect.width, 
    heighta: rect.height,
  }
    });
    // 合并新旧矩形,保留 isActive 状态
    adjustedRectsa.value = adjustedRectsa.value.map(oldRect => {
    });
    // 合并新旧矩形,并保留 isActive 状态
    adjustedRectsa.value = existingRects.map(oldRect => {
      const newRect = newRects.find(r => r.glassId === oldRect.glassId);  
      if (newRect) {  
        return { ...oldRect, ...newRect, isActive: oldRect.isActive };  
      }  
      return oldRect; // 如果旧矩形在新数据中不存在,则保留原样
    }).concat(newRects.filter(r => !adjustedRectsa.value.some(o => o.glassId === r.glassId)));
      return oldRect; // 如果旧矩形在新数据中不存在,但保留在newGlassIds中,则保留原样
    }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId)));
  }
  else if (data.waitingGlass == null) {
    adjustedRectsa.value = []
  }
  if (data.outGlass && data.outGlass.length > 0) {  
    // 提取新的矩形ID
    const newGlassIds = new Set(data.outGlass[0].map(rect => rect.glassId));
    // 过滤出已存在的矩形
    const existingRects = adjustedRectsb.value.filter(rect => newGlassIds.has(rect.glassId));
    // 计算新的矩形
    const newRects = data.outGlass[0].map(rect => {  
      const scaleFactor =  1621.78/5190; 
      const scaleFactory =  550/2800; 
@@ -196,24 +283,49 @@
        widtha: rect.width, 
        heighta: rect.height,
  }
    });
    // 合并新旧矩形,保留 isActive 状态
    adjustedRectsb.value = adjustedRectsb.value.map(oldRect => {
    });
    // 合并新旧矩形,并保留 isActive 状态
    adjustedRectsb.value = existingRects.map(oldRect => {
      const newRect = newRects.find(r => r.glassId === oldRect.glassId);  
      if (newRect) {  
        return { ...oldRect, ...newRect, isActive: oldRect.isActive };  
      }  
      return oldRect; // 如果旧矩形在新数据中不存在,则保留原样
    }).concat(newRects.filter(r => !adjustedRectsb.value.some(o => o.glassId === r.glassId)));
      return oldRect; // 如果旧矩形在新数据中不存在,但保留在newGlassIds中,则保留原样
    }).concat(newRects.filter(r => !existingRects.some(o => o.glassId === r.glassId)));
  }
  else if (data.outGlass == null) {
    adjustedRectsb.value = []
  }
}; 
onMounted(() => {
  initializeWebSocket(socketUrl, handleMessage);
});
function updateRectColors() {
function updateRectColorsa() {
  adjustedRectsa.value.forEach(rect => {  
    if (rect.glassId === glassId) {  
      rect.state = 5;
      rect.state = 8;
    }
  });
}
function updateRectColorsb() {
  adjustedRectsb.value.forEach(rect => {
    if (rect.glassId === glassId) {
      rect.state = 8;
    }
  });
}
function updateRectColors1() {
  adjustedRects1.value.forEach(rect => {
    if (rect.glassId === glassId) {
      rect.state = 8;
    }
  });
}
function updateRectColors2() {
  adjustedRects2.value.forEach(rect => {
    if (rect.glassId === glassId) {
      rect.state = 8;
    }
  });  
}  
@@ -225,7 +337,7 @@
      return '#95d475';
    case -1:  
      return '#CDAF95';  
    case 5:
    case 8:
      return '#911005';  
  }
}
@@ -235,7 +347,7 @@
      return '#eebe77';  
    case 4:  
      return '#CD6090';
    case 5:
    case 8:
      return '#911005';  
  }  
}
@@ -306,13 +418,13 @@
    glassId: currentGlassId.value,
    // temperingFeedSequence: currenttemperingFeedSequence.value,
    line: 4001,
    status: 2,
    status: 8,
    workingProcedure: '钢化',
    })
    if (response.code == 200) {
      ElMessage.success(response.message);
      blind1.value = false;
      updateRectColors();
      updateRectColors1();
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
@@ -329,13 +441,13 @@
    glassId: currentGlassId.value,
    // temperingFeedSequence: currenttemperingFeedSequence.value,
    line: 4001,
    status: 2,
    status: 8,
    workingProcedure: '钢化',
    })
    if (response.code == 200) {
      ElMessage.success(response.message);
      blind2.value = false;
      updateRectColors();
      updateRectColors2();
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
@@ -352,13 +464,13 @@
    glassId: currentGlassId.value,
    // temperingFeedSequence: currenttemperingFeedSequence.value,
    line: 4001,
    status: 2,
    status: 8,
    workingProcedure: '钢化',
    })
    if (response.code == 200) {
      ElMessage.success(response.message);
      blinda.value = false;
      updateRectColors();
      updateRectColorsa();
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
@@ -375,13 +487,13 @@
    glassId: currentGlassId.value,
    // temperingFeedSequence: currenttemperingFeedSequence.value,
    line: 4001,
    status: 2,
    status: 8,
    workingProcedure: '钢化',
    })
    if (response.code == 200) {
      ElMessage.success(response.message);
      blindb.value = false;
      updateRectColors();
      updateRectColorsb();
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
@@ -389,7 +501,7 @@
}
catch (error) {
    // 处理错误
    console.error(error);
    // console.error(error);
  }
}
onBeforeUnmount(() => {
@@ -399,9 +511,10 @@
</script>
<template>
  <div style="margin-top: 10px;">
     <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;" >{{ $t('processCard.beforefurnace') }}</el-button>
     <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;">{{ $t('processCard.intofurnace') }}</el-button>
    <el-button  id="searchButton" type="success" @click="dialogFormVisibleb = true;dialogFormVisible = false;dialogFormVisiblea = false">{{ $t('processCard.outfurnace') }}</el-button>
     <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;dialogFormVisiblec = false;" >{{ $t('processCard.beforefurnace') }}</el-button>
     <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;dialogFormVisiblec = false;">{{ $t('processCard.intofurnace') }}</el-button>
    <el-button  id="searchButton" type="success" @click="dialogFormVisibleb = true;dialogFormVisible = false;dialogFormVisiblea = false;dialogFormVisiblec = false;">{{ $t('processCard.outfurnace') }}</el-button>
    <el-button  id="searchButton" type="info" @click="dialogFormVisiblec = true;dialogFormVisibleb = false;dialogFormVisible = false;dialogFormVisiblea = false">{{ $t('processCard.print') }}</el-button>
<div v-if="dialogFormVisible" >
    <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 600px;" v-loading="loading">
<div style="width: 49%;float: left;background-color: #f4f4f5;height: 550px;">
@@ -420,12 +533,12 @@
       left: `${rect.xcoordinate}px`,
        width: `${rect.width}px`, 
        height: `${rect.height}px`,
        backgroundColor: rect.isActive ? '#ADFF2F' : rect.state === 5 ? '#911005' : 'lightblue' }"
        backgroundColor: rect.isActive ? '#ADFF2F' : rect.state === 8 ? '#911005' : 'lightblue' }"
    >
     <div  class="centered-text">
    <div >{{ rect.glassId }}</div>
    <div >{{ rect.flowCardId }}</div>
    <div>{{ rect.widtha }}*{{ rect.heighta }}</div>
    <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div>
    <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div>
    <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div>
  </div>
  </div>
   </div>
@@ -448,12 +561,12 @@
       left: `${rect.xcoordinate}px`, 
       width: `${rect.width}px`, 
       height: `${rect.height}px`,
       backgroundColor: rect.isActive ? '#ADFF2F' : rect.state === 5 ? '#911005' : 'lightblue' }"
       backgroundColor: rect.isActive ? '#ADFF2F' : rect.state === 8 ? '#911005' : 'lightblue' }"
       >
     <div  class="centered-text">
    <div >{{ rect.glassId }}</div>
    <div >{{ rect.flowCardId }}</div>
    <div>{{ rect.widtha }}*{{ rect.heighta }}</div>
    <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div>
    <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div>
    <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div>
  </div>
  </div>
   </div>
@@ -479,9 +592,9 @@
       width: `${rect.width}px`, height: `${rect.height}px`,
      backgroundColor: rect.isActive ? '#ADFF2F' : getRectColora(rect.state) }">
    <div  class="centered-text">
    <div>{{ rect.glassId }}</div>
    <div >{{ rect.flowCardId }}</div>
    <div>{{ rect.widtha }}*{{ rect.heighta }}</div>
    <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div>
    <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div>
    <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div>
  </div>
  </div> 
   </div>
@@ -507,9 +620,9 @@
      backgroundColor: rect.isActive ? '#ADFF2F' : getRectColorb(rect.state) }">
       <!-- backgroundColor: rect.state === 4 ? '#911005' : '#f8e3c5' }"> -->
     <div  class="centered-text">
    <div >{{ rect.glassId }}</div>
    <div >{{ rect.flowCardId }}</div>
    <div>{{ rect.widtha }}*{{ rect.heighta }}</div>
    <div style="font-size: 15px;font-weight: bold;">{{ rect.glassId }}</div>
    <div style="font-size: 15px;font-weight: bold;">{{ rect.flowCardId }}</div>
    <div style="font-size: 30px;font-weight: bold;">{{ rect.widtha }}*{{ rect.heighta }}</div>
  </div>
  </div> 
   </div>
@@ -517,7 +630,32 @@
   </div>
   </el-card>
</div>
<div v-if="dialogFormVisiblec">
  <!-- 打印 -->
  <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 600px;" v-loading="loading">
    <div style="display: flex; flex-direction: row; align-items: center; margin-top: 5px;margin-left: 10px;">
    <el-input :placeholder="$t('processCard.projectnumber')" v-model="engineerId" autocomplete="off" style="width: 300px;"/>
    <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('processCard.inquire') }}</el-button>
    <el-button type="info" style="margin-left: 10px;" @click="printing()">{{ $t('processCard.printing') }}</el-button>
  </div>
 
    <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
    <el-table
    height="350"
     ref="table"
     :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
      :data="tableData"
    >
      <el-table-column prop="engineerId" :label="$t('processCard.project')" width="200" align="center"/>
      <el-table-column prop="workingProcedure" :label="$t('processCard.awayprocess')" align="center"/>
      <el-table-column prop="deviceName" :label="$t('processCard.awayequipment')" align="center"/>
      <el-table-column prop="teamsGroupsName" :label="$t('processCard.awayteam')" align="center"/>
    </el-table>
      </div>
      </el-card>
   </el-card>
</div>
<el-dialog v-model="blind1" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose1">
        <el-button type="warning" plain :icon="Delete" @click="handleDamage1"  style="width: 140px;margin-left: 10px;">
          {{ $t('order.dilapidation') }}
@@ -538,6 +676,29 @@
          {{ $t('order.dilapidation') }}
        </el-button>
  </el-dialog> 
  <el-dialog
      v-model="dialogVisible"
      width="100%"
      top="0vh"
      :show-close="false"
      >
      <div class="custom-title" style="text-align: center; margin-bottom: 20px;">
      {{ $t('processCard.glasstakeout') }}
    </div>
      <el-table
        :data="tableData"
        style="width: 100%;height: 760px"
      >
      <el-table-column prop="flowCardId" :label="$t('processCard.flowcard')" width="140" align="center"/>
      <el-table-column prop="layer" :label="$t('processCard.layer')" align="center" width="52"/>
      <el-table-column prop="engineerId" :label="$t('processCard.project')" align="center" width="110"/>
      <el-table-column prop="temperingLayoutId" :label="$t('processCard.temperinglayout')" align="center" width="52"/>
      <el-table-column prop="temperingFeedSequence" :label="$t('processCard.temperingfeed')" align="center" width="52"/>
      <el-table-column prop="width" :label="$t('processCard.width')" align="center" width="80"/>
      <el-table-column prop="height" :label="$t('processCard.height')" align="center" width="80"/>
      <el-table-column prop="thickness" :label="$t('processCard.thickness')" align="center" width="52"/>
      </el-table>
    </el-dialog>
  </div>
</template>
<style scoped>
@@ -611,7 +772,6 @@
#rect {  
  position: relative; /* 确保箭头可以相对于矩形定位 */  
  /* 其他样式 */
}  
.centered-text {
  /* 设置文字居中样式 */  
@@ -621,4 +781,8 @@
  height: 100%; /* 确保div占据整个矩形的高度 */  
  /* font-size: small; */
.custom-title {
  font-size: 20px;
  font-weight: bold;
}
</style>