zhoushihao
2024-06-29 c407e091ff0320625ef2566a4bea362c697200c9
Merge remote-tracking branch 'origin/master'

# Conflicts:
# hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
# hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
9个文件已修改
990 ■■■■■ 已修改文件
UI-Project/src/lang/zh.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/GlassStorage/MaterialRackManagement.vue 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/returns.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Slicecage/slicecage.vue 751 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/Landingindication.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/lang/zh.js
@@ -194,7 +194,10 @@
        search:'搜索',
        tabid:'大理片笼详情表id',
        tid:'设备id',
        tida:'设备id:',
        fin:'是否完成任务?',
        sureadd:'确认添加',
        sureadda:'是否确认添加?',
    },
    workOrder:{
        glassID:'玻璃ID',
UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
@@ -1,5 +1,5 @@
<template>
  <div >
  <div  class="app-container">
    <el-card style="flex: 1; margin-left: 10px; " :loading="loading">
      <div slot="header" class="clearfix" style="display: flex; align-items: center;">
@@ -7,7 +7,7 @@
<div >
  <el-button type="success" size="mini" @click="handleInbound()">入库</el-button>
  <el-button type="success" size="mini" @click="handleInbound()">吊装位入库</el-button>
  <el-button type="success" size="mini" @click="handleInbound()">添加原片</el-button>
</div>
<!-- 右侧选择框 -->
@@ -55,12 +55,12 @@
</el-table-column>
        <!-- 操作列 -->
        <el-table-column label="操作" width="300">
        <el-table-column label="操作" width="350">
          <template #default="{ row }">
            <el-button type="primary" size="mini" @click="handleEdit(row)">修改</el-button>
            <el-button type="primary" size="mini" @click="edithandleRowClick(row)">修改</el-button>
            <el-button type="danger" size="mini" @click="handleDelete(row)">删除</el-button>
            <el-button type="warning" size="mini" @click="handleCheckout(row)">出库</el-button>
            <el-button type="success" size="mini" @click="addglass()">添加原片</el-button>
          </template>
        </el-table-column>
      </el-table>
@@ -156,7 +156,65 @@
        <el-button type="primary" @click="handleConfirmInbound">确 定</el-button>
      </div>
    </el-dialog>
    <div ref="chart" id="chart" style="width: 100%; height: 400px;"></div>
    <el-dialog title="添加原片"  v-model="dialogVisible3" width="50%">
    <el-form :model="formData3" ref="form" label-width="80px">
      <el-form-item label="颜色膜系">
        <el-input v-model="formData.selectedColor" readonly style="width: 250px; height: 35px; font-size: 20px"></el-input>
        <el-dropdown @command="handleCommand">
          <span class="el-dropdown-link">
            选择<i class="el-icon-arrow-down el-icon--right"></i>
          </span>
          <el-dropdown-menu slot="dropdown">
            <el-dropdown-item v-for="color in colors" :key="color['0_glass_id']" :command="color['0_glass_id']">
              {{ color['0_glass_id'] }}
            </el-dropdown-item>
          </el-dropdown-menu>
        </el-dropdown>
      </el-form-item>
      <el-form-item label="长度">
        <el-input v-model="formData.wid" required style="width: 250px; font-size: 20px" @focus="clearInput('wid')"></el-input>
      </el-form-item>
      <el-form-item label="高度">
        <el-input v-model="formData.heig" required style="width: 250px; font-size: 20px" @focus="clearInput('heig')"></el-input>
      </el-form-item>
      <el-form-item label="厚度">
        <el-input v-model="formData.thinkness" required style="width: 250px; font-size: 20px" @focus="clearInput('thinkness')"></el-input>
      </el-form-item>
      <el-form-item label="数量">
        <el-input-number v-model="formData.num" required :min="0" :max="9000" style="width: 250px; font-size: 20px" @focus="clearInput('num')"></el-input-number>
      </el-form-item>
    </el-form>
    <span slot="footer" class="dialog-footer">
      <el-button @click="dialogVisible3 = false">关闭</el-button>
      <el-button type="primary" @click="submitForm">提交</el-button>
    </span>
  </el-dialog>
  <el-dialog title="编辑" v-model="editdialogVisible" width="30%" @close="edithandleDialogClose">
      <el-form :model="editForm" ref="editForm" label-width="80px">
        <el-form-item label="数量">
          <el-input v-model="editForm.quantity"></el-input>
        </el-form-item>
        <el-form-item label="批次号">
          <el-input v-model="editForm.batchnumber"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="editdialogVisible = false">取消</el-button>
        <el-button type="primary" @click="editsaveEdit">保存</el-button>
      </div>
    </el-dialog>
    <!-- <div ref="chart" id="chart" style="width: 100%; height: 400px;"></div> -->
  </div>
</template>
@@ -283,16 +341,9 @@
     
    });
    const handleEdit = (row) => {
      // 处理修改数量逻辑
      console.log('Edit Quantity:', row);
    };
    const handleDelete = (row) => {
      // 处理删除逻辑
      console.log('Delete:', row);
    };
    const handleCheckout = (row) => {
      // 处理出库逻辑
      console.log('Checkout:', row);
@@ -322,7 +373,83 @@
      // 关闭对话框
      dialogVisible.value = false;
    };
    const dialogVisible3 = ref(false);
    const colors = ref([
      { '0_glass_id': 'Red' },
      { '0_glass_id': 'Green' },
      { '0_glass_id': 'Blue' }
      // Add more colors as needed
    ]);
    const formData3 = ref({
      selectedColor: '',
      wid: '',
      heig: '',
      thinkness: '',
      num: ''
    });
    const addglass = () => {
      // 打开入库对话框
      dialogVisible3.value = true;
    };
    const handleCommand = (command) => {
      formData.value.selectedColor = command;
    };
    const clearInput = (field) => {
      formData.value[field] = '';
    };
    const submitForm = () => {
      console.log('提交数据:', formData.value);
      dialogVisible3.value = false;
      // Add your submit logic here
    };
    
    const editdialogVisible = ref(false);
    const editForm = ref({
      quantity: '',
      batchnumber: ''
    });
    let currentRow = ref(null);
    // 处理行点击事件
    const edithandleRowClick = (row) => {
      currentRow.value = row;
      editForm.value.quantity = row.quantity;
      editForm.value.batchnumber = row.batchnumber;
      editdialogVisible.value = true;
      console.log(editForm.value)
    };
    // 添加保存编辑内容
    const editsaveEdit = () => {
      if (!currentRow.value) return;
      // 更新当前行数据
      currentRow.value.quantity = parseInt(editForm.value.quantity);
      currentRow.value.batchnumber = editForm.value.batchnumber;
      // 关闭对话框
      editdialogVisible.value = false;
    };
    // 对话框关闭时重置编辑表单和当前行数据
    const edithandleDialogClose = () => {
      editForm.value.quantity = '';
      editForm.value.batchnumber = '';
      currentRow.value = null;
    };
    let chartInstance = null;
@@ -407,6 +534,26 @@
</script>
<style>
<style scoped>
html, body {
  height: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden; /* 禁止出现滚动条 */
}
.app-container {
  flex-direction: column;
  height: 100vh; /* 使用视口高度 */
}
.custom-dialog {
  max-height: 90vh; /* 最大高度为视口高度的90% */
  overflow-y: auto; /* 对话框内部出现垂直滚动条 */
}
</style>
UI-Project/src/views/Returns/returns.vue
@@ -323,8 +323,8 @@
      const uniqueThicknesses = new Set(response.data.map(item => item.thickness));  
  
      selectOptions.value = Array.from(uniqueWidths).map(width => ({ 
      value: width, // 假设这是你想要作为value的属性
      label: width, // 假设这是你想要显示的label
      value: width,
      label: width,
    }));  
      selectOptionsa.value = Array.from(uniqueHeights).map(height => ({ 
      value: height, 
@@ -504,14 +504,13 @@
    ElMessage.error(t('basicData.updatanull'));  
    return; // 如果 id 为空,则不执行后续操作  
  }  
  const newState = row.state === 100 ? 0 : 100;  
  try {  
    // 发送请求到后端更新状态  
    const response = await request.post('/loadGlass/up-patten-usage/updateGlassState', { id: row.id, state: newState });  
    if (response.code === 200) {  
      ElMessage.success(response.message);  
      row.state = newState;
    } else {  
      ElMessage.error(response.message);  
    }  
@@ -520,7 +519,6 @@
    ElMessage.error(t('basicData.glassnull'));   
  }  
};  
const wsUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlass`;
const ws = new WebSocket(wsUrl);  
ws.onopen = () => {  
UI-Project/src/views/Slicecage/slicecage.vue
@@ -1,18 +1,13 @@
<script lang="ts" setup>
// import zhCn from 'element-plus/lib/locale/lang/zh-cn'
// import en from 'element-plus/dist/locale/en.mjs'
// const { locale } = useI18n()
import { useI18n } from 'vue-i18n'
  const { t } = useI18n()
  let language = ref(localStorage.getItem('lang') || 'zh')
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
import request from "@/utils/request"
import { WebSocketHost ,host} from '@/utils/constants'
import { ref, onMounted , onBeforeUnmount} from "vue";
import { ref, onMounted , onBeforeUnmount, reactive} from "vue";
import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
import { ElMessage, ElMessageBox } from 'element-plus'
import { tr } from "element-plus/es/locale";
@@ -23,10 +18,18 @@
const tableDatab = ref([])
const tableDatac = ref([])
const tableDatad = ref([])
const tableDataf = ref([])
const tableDatae = ref([])
const adjustedRects = ref([]);
const project = ref([]);
const adjustedRectsa = ref([]);
// const height = ref([]);
const adjustedRectsb = ref([]);
const adjustedRectsc = ref([]);
const adjustedRectsd = ref([]);
const adjustedRectse = ref([]);
const adjustedRectsf = ref([]);
const adjustedRectsg = ref([]);
const currentRow = reactive({}); // 当前行的数据
const add = ref(false)
const flowCardId = ref('');
const gap = ref('');
@@ -67,111 +70,8 @@
const cell7=ref(true);
const cell8=ref(true);
const selectedRow = ref(null); // 存储选中的行数据  
const currentPage4 = ref(4)
const pageSize4 = ref(100)
  // var timer=setInterval(() => {
  //   // console.log(million.value,million1.value);
  //   million.value+=1;
  //   if(million.value-million1.value!==12){
  //     if(million.value-million1.value>=2){
  //       if(carposition1.value==220){
  //         timers1.value=false;
  //       }else if(carposition1.value==60){
  //         timers1.value=true;
  //       }
  //       if(timers1.value==true){
  //         carposition1.value=carposition1.value+16;
  //       }else{
  //         carposition1.value=carposition1.value-16;
  //       }
  //       if(carposition2.value==220){
  //         timers2.value=false;
  //       }else if(carposition2.value==60){
  //         timers2.value=true;
  //       }
  //       if(timers2.value==true){
  //         carposition2.value+=16;
  //       }else{
  //         carposition2.value-=16;
  //       }
  //     }else{
  //     }
  //   }else{
  //     million1.value=million.value;
  //     if(cellshow1.value==true){
  //       cellshow1.value=false;
  //     }else{
  //       cellshow1.value=true;
  //     }
  //     if(cellshow2.value==true){
  //       cellshow2.value=false;
  //     }else{
  //       cellshow2.value=true;
  //     }
  //   }
  // }, 1000);
  // var timer=setInterval(() => {
  //   // console.log(million3.value,million4.value);
  //   million3.value+=1;
  //   if(million3.value-million4.value!==12){
  //     if(million3.value-million4.value>=2){
  //       if(carposition3.value==260){
  //         timers3.value=false;
  //       }else if(carposition3.value==60){
  //         timers3.value=true;
  //       }
  //       if(timers3.value==true){
  //         carposition3.value=carposition3.value+20;
  //       }else{
  //         carposition3.value=carposition3.value-20;
  //       }
  //       if(carposition4.value==260){
  //         timers4.value=false;
  //       }else if(carposition4.value==60){
  //         timers4.value=true;
  //       }
  //       if(timers4.value==true){
  //         carposition4.value+=20;
  //       }else{
  //         carposition4.value-=20;
  //       }
  //     }else{
  //     }
  //   }else{
  //     million4.value=million3.value;
  //     if(cellshow5.value==true){
  //       cellshow5.value=false;
  //     }else{
  //       cellshow5.value=true;
  //     }
  //     if(cellshow3.value==true){
  //       cellshow3.value=false;
  //     }else{
  //       cellshow3.value=true;
  //     }
  //     if(cellshow4.value==true){
  //       cellshow4.value=false;
  //     }else{
  //       cellshow4.value=true;
  //     }
  //   }
  // }, 1000);
const getTableRow = (row,type) =>{
  switch (type) {
@@ -188,78 +88,35 @@
}
const handleBindRack = (row) => {
  selectedRow.value = row; // 更新选中的行数据  
  currentRow.deviceId  = row.deviceId; // 直接设置响应式属性
  currentRow.slot = row.slot;
  console.log(row.deviceId);
  console.log(row.slot);
  window.localStorage.setItem('deviceId', row.deviceId)
  window.localStorage.setItem('slot', row.slot)
  add.value = true; // 打开绑定架子对话框
};
async function handleConfirm() {
  if (!selectedRow.value) {
    // 处理没有选中行的情况...
    return;
  }
  // 构造你的POST请求数据,包含选中的行数据和表单数据
  const postData = {
    ...selectedRow.value, // 选中行的数据
  };
// 搜索
const searchout = async () => {
  try {
    const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/insertBigStorageCageDetails', {
      'flowCardId': flowCardId.value,
      'gap': gap.value,
      'glassId': glassId.value,
      'glassType': glassType.value,
      'height': height.value,
      'sequence': sequence.value,
      'state': state.value,
      'temperingFeedSequence': temperingFeedSequence.value,
      'temperingLayoutId': temperingLayoutId.value,
      'thickness': thickness.value,
      'width': width.value,
       body: JSON.stringify(postData),
    const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/selectBigStorageCageDetails',{
      glassId:glassId.value
    });
    if (response.code == 200) {
      // 绑定成功,处理逻辑
      tableDataf.value = response.data;
      ElMessage.success(response.message);
      add.value = false;
     tableData.value = response.data;
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.message);
    }
  } catch (error) {
    // 处理错误...
    console.error(error);
  }
}
// 添加
// const handleConfirm = async () => {
//   try {
//     const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/insertBigStorageCageDetails', {
//       'bigStorageCageOutTask.flowCardId': flowCardId.value,
//       'bigStorageCageOutTask.gap': gap.value,
//       'bigStorageCageOutTask.glassId': glassId.value,
//       'bigStorageCageOutTask.glassType': glassType.value,
//       'bigStorageCageOutTask.height': height.value,
//       'bigStorageCageOutTask.sequence': sequence.value,
//       'bigStorageCageOutTask.state': state.value,
//       'bigStorageCageOutTask.temperingFeedSequence': temperingFeedSequence.value,
//       'bigStorageCageOutTask.temperingLayoutId': temperingLayoutId.value,
//       'bigStorageCageOutTask.thickness': thickness.value,
//       'bigStorageCageOutTask.width': width.value,
//     });
//     if (response.code == 200) {
//       // 绑定成功,处理逻辑
//       ElMessage.success(response.message);
//       add.value = false;
//      tableData.value = response.data;
//     } else {
//       // 请求失败,显示错误消息
//       ElMessage.error(response.msg);
//     }
//   } catch (error) {
//     // 处理错误
//     console.error(error);
//   }
// };
  } catch (error) {
    // 处理错误
    console.error(error);
  }
};
// 是否禁用
const toggleEnableState = async (row) => {
  const newState = row.enableState === 1 ? 0 : 1;  
@@ -274,13 +131,7 @@
      ElMessage.error(response.message);
      }  
  row.enableState = newState;  
};
// const tableData = ref([
//   // ...您的表格数据
//   id:
//   deviceId slot enableState remainWidth
// ]);
};
 // 删除 
 const opena = async(row) => {  
  try {
@@ -322,22 +173,14 @@
      } 
    ); 
    if (confirmResult === 'confirm') {  
      // const dataToSend = {
      //   ...row,
      //   status: 0
      // };
      // 用户点击了“是”,现在调用删除接口
      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/damageBigStorageCageDetails?status="+0, row)
    if (response.code === 200) {
      ElMessage.success(response.message);
      } else {  
        // 删除失败,您可以处理错误或显示错误信息给用户
      ElMessage.error(response.message);
        // alert('删除失败:' + deleteResponse.message);
      }  
    }  
  } catch (error) {  
    // 处理可能出现的错误,比如 ElMessageBox 抛出的异常等
    console.error('发生错误:', error);  
  }  
}; 
@@ -354,22 +197,14 @@
      } 
    ); 
    if (confirmResult === 'confirm') {  
      // const dataToSend = {
      //   ...row,
      //   status: 1
      // };
      // 用户点击了“是”,现在调用删除接口
      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/damageBigStorageCageDetails?status="+1, row)
    if (response.code === 200) {
      ElMessage.success(response.message);
      } else {  
        // 删除失败,您可以处理错误或显示错误信息给用户
      ElMessage.error(response.message);
        // alert('删除失败:' + deleteResponse.message);
      }  
    }  
  } catch (error) {  
    // 处理可能出现的错误,比如 ElMessageBox 抛出的异常等
    console.error('发生错误:', error);  
  }  
}; 
@@ -391,13 +226,10 @@
    if (response.code === 200) {
      ElMessage.success(response.message);
      } else {  
        // 删除失败,您可以处理错误或显示错误信息给用户
      ElMessage.error(response.message);
        // alert('删除失败:' + deleteResponse.message);
      }  
    }  
  } catch (error) {  
    // 处理可能出现的错误,比如 ElMessageBox 抛出的异常等
    console.error('发生错误:', error);  
  }  
}; 
@@ -414,22 +246,14 @@
      } 
    ); 
    if (confirmResult === 'confirm') {  
      // 用户点击了“是”,现在调用删除接口
      // const dataToSend = {
      //   ...row,
      //   status: 0
      // };
      const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/damageTemperingGlassInfo?status="+0, row)
    if (response.code === 200) {
      ElMessage.success(response.message);
      } else {  
        // 删除失败,您可以处理错误或显示错误信息给用户
      ElMessage.error(response.message);
        // alert('删除失败:' + deleteResponse.message);
      }  
    }  
  } catch (error) {  
    // 处理可能出现的错误,比如 ElMessageBox 抛出的异常等
    console.error('发生错误:', error);  
  }  
}; 
@@ -446,22 +270,14 @@
      } 
    ); 
    if (confirmResult === 'confirm') {  
      // 用户点击了“是”,现在调用删除接口
      // const dataToSend = {
      //   ...row,
      //   status: 1
      // };
      const response = await request.post("/cacheVerticalGlass/temperingGlassInfo/damageTemperingGlassInfo?status="+1, row)
    if (response.code === 200) {
      ElMessage.success(response.message);
      } else {  
        // 删除失败,您可以处理错误或显示错误信息给用户
      ElMessage.error(response.message);
        // alert('删除失败:' + deleteResponse.message);
      }  
    }  
  } catch (error) {  
    // 处理可能出现的错误,比如 ElMessageBox 抛出的异常等
    console.error('发生错误:', error);  
  }  
}; 
@@ -478,7 +294,6 @@
      } 
    ); 
    if (confirmResult === 'confirm') {  
      // 用户点击了“是”,现在调用删除接口
      const dataToSend = {  
        ...row,
        status: 1
@@ -487,13 +302,10 @@
    if (response.code === 200) {
      ElMessage.success(response.message);
      } else {  
        // 删除失败,您可以处理错误或显示错误信息给用户
      ElMessage.error(response.message);
        // alert('删除失败:' + deleteResponse.message);
      }  
    }  
  } catch (error) {  
    // 处理可能出现的错误,比如 ElMessageBox 抛出的异常等
    console.error('发生错误:', error);  
  }  
}; 
@@ -510,21 +322,46 @@
      } 
    ); 
    if (confirmResult === 'confirm') {  
      // 用户点击了“是”,现在调用删除接口
      // const dataToSend = {
      //   ...row,
      //   status: 1
      // };
      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/finishBigStorageCageDetails", row)
    if (response.code === 200) {
      ElMessage.success(response.message);
      } else {  
        // 删除失败,您可以处理错误或显示错误信息给用户
      ElMessage.error(response.message);
        // alert('删除失败:' + deleteResponse.message);
      }  
    }  
  } catch (error) {
  } catch (error) {
    console.error('发生错误:', error);
  }
};
// 确认添加
const finisha = async(row) => {
  try {
    const confirmResult = await ElMessageBox.confirm(
      t('searchOrder.sureadda'),
      t('searchOrder.prompt'),
      {
        confirmButtonText: t('searchOrder.yes'),
        cancelButtonText: t('searchOrder.cancel'),
        type: 'warning',
      }
    );
    if (confirmResult === 'confirm') {
    let deviceId = window.localStorage.getItem('deviceId')
    let slot = window.localStorage.getItem('slot')
      const dataToSend = {
        ...row,
        deviceId: deviceId,
        slot: slot
      };
      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/insertBigStorageCageDetails", dataToSend)
    if (response.code === 200) {
      add.value = false;
      ElMessage.success(response.message);
      } else {
      ElMessage.error(response.message);
      }
    }
  } catch (error) {
    // 处理可能出现的错误,比如 ElMessageBox 抛出的异常等  
    console.error('发生错误:', error);  
  }  
@@ -543,24 +380,51 @@
  tableDatab.value = data.temperingGlassInfoList[0]
  tableDatae.value = data.bigStorageCageUsage[0]
  // adjustedRects.value = data.bigStorageCageInfo1[0]
  window.localStorage.setItem('length', data.bigStorageCageInfo1[0].length)
  let length = window.localStorage.getItem('length')
  adjustedRects.value = data.bigStorageCageInfo1[0].map(rect => ({  
            ...rect, 
            // width: rect.remainWidth *0.04,
            top: rect.id *2,
            height: 20/length,
            top: 29/length
          })); 
console.log(data.bigStorageCageInfo1[0]);
    let small = data.bigStorageCageInfo1[0]
    console.log(small[0].bigStorageCageDetails);
adjustedRectsa.value = data.bigStorageCageInfo2[0].map(rect => ({  
            ...rect, 
            // width: rect.remainWidth *0.04,
            top: rect.id *2,
            height: 20/length,
            top: 29/length
          })); 
  // window.localStorage.setItem('length', data.bigStorageCageInfo1[0].length)
  // let length = window.localStorage.getItem('length')
adjustedRectsb.value = data.bigStorageCageInfo3[0].map(rect => ({
            ...rect,
            height: 20/length,
            top: 29/length
          }));
adjustedRectsc.value = data.bigStorageCageInfo4[0].map(rect => ({
            ...rect,
            height: 20/length,
            top: 29/length
          }));
adjustedRectsd.value = data.bigStorageCageInfo5[0].map(rect => ({
            ...rect,
            height: 20/length,
            top: 29/length
          }));
adjustedRectse.value = data.bigStorageCageInfo6[0].map(rect => ({
            ...rect,
            height: 20/length,
            top: 29/length
          }));
adjustedRectsf.value = data.bigStorageCageInfo7[0].map(rect => ({
            ...rect,
            height: 20/length,
            top: 29/length
          }));
adjustedRectsg.value = data.bigStorageCageInfo8[0].map(rect => ({
            ...rect,
            height: 20/length,
            top: 29/length
          }));
};
// function getRectHeight(length: number) {
//   return length > 0 ? 29 / length : 29;
// }
// 初始化 WebSocket,并传递消息处理函数
onMounted(() => {
  // fetchFlowCardId();
@@ -709,9 +573,6 @@
               </el-col>  
             </div>  
    </div>
    <!-- <div id="awatch">
  <img src="../../assets/cp.png" alt="" style="width: 70%;height: 70%;margin-left: 160px;">
</div> -->
<!-- // 父级框 -->
<div class="img-dlpl" >
    <div class="img-car1" :style="'z-index:999;left:247px;top:' + carposition1 + 'px;position:absolute;'">
@@ -727,174 +588,321 @@
    <div class="img-car4" :style="'z-index:999;left:704px;top:' + carposition4 + 'px;position:absolute;'">
      <div v-show="cellshow4" style="margin-top:10px;width:200px;height:5px;background-color:#409EFF;"></div>
    </div>
    <div v-show="cell1" style="width: 227px;position: relative;height: 29px;top:55px;left: 465px;background-color: #911005;">
    <div style="position: relative;">
    <div v-show="cell1" style="width: 227px;height: 29px;position: relative;top:55px;left: 465px;">
      <div  
      v-for="(rect, index) in adjustedRects"  
      :key="rect"
      :key="rect.id"
      :style="{
        // display:'flex',
       position: 'absolute',
       width: '227px',
       height: '0.8px',
       backgroundColor: '#409EFF',
      //  backgroundColor: 'red',
       left: '0px',
       top: `${rect.top}px`,
       top: index*rect.top+`px`,
       height: `${rect.height}px`,
       }"  
    >
    <div
      v-for="(rects, index) in rect.bigStorageCageDetails"
      :key="rects"
      :style="{
        float:'left',
       width: '18px',
       height: `${rect.height}px`,
       backgroundColor: '#911005',
      // border:'1px solid black',
       top: '0px',
       marginRight: rects.gap/5000*227+'px'
       }"
    >
      </div>
    </div>
    </div>
 <div v-show="cell2" style="width: 227px;height: 29px;position: relative;top:86px;left: 465px;background-color: #911005;">
 <div v-show="cell2" style="width: 227px;height: 29px;position: relative;top:56px;left: 465px;">
  <div  
      v-for="(rect, index) in adjustedRectsa"  
      :key="rect"
      :key="rect.id"
      :style="{
        // display:'flex',
       position: 'absolute',
       width: '227px',
       height: '0.8px',
       backgroundColor: '#409EFF',
      //  backgroundColor: 'red',
       left: '0px',
       top: `${rect.top}px`,
       top: index*rect.top+`px`,
       height: `${rect.height}px`,
       }"  
    >
    <div
      v-for="(rects, index) in rect.bigStorageCageDetails"
      :key="rects"
      :style="{
        float:'left',
       width: '18px',
       height: `${rect.height}px`,
       backgroundColor: '#911005',
      // border:'1px solid black',
       top: '0px',
       marginRight: rects.gap/5000*227+'px'
       }"
    >
      </div>
    </div>
    </div>
      <!--  <div v-show="cell3" style="width: 227px;height: 29px;position: absolute;top:117px;left: 465px;background-color: #409EFF;">
  <div v-show="cell3" style="width: 227px;height: 29px;position: absolute;top:117px;left: 465px;">
    <div
      v-for="(rect, index) in adjustedRectsb"
      :key="rect.id"
      :style="{
        // display:'flex',
       position: 'absolute',
       width: '227px',
      //  backgroundColor: 'red',
       left: '0px',
       top: index*rect.top+`px`,
       height: `${rect.height}px`,
       }"
    >
    <div
      v-for="(rects, index) in rect.bigStorageCageDetails"
      :key="rects"
      :style="{
        float:'left',
       width: '18px',
       height: `${rect.height}px`,
       backgroundColor: '#911005',
      // border:'1px solid black',
       top: '0px',
       marginRight: rects.gap/5000*227+'px'
       }"
    >
      </div>
    </div>
  <div v-show="cell4" style="width: 227px;height: 29px;position: absolute;top:148px;left: 465px;background-color: #409EFF;">
    </div>
  <div v-show="cell5" style="width: 227px;height: 29px;position: absolute;top:208px;left: 465px;background-color: #409EFF;">
  <div v-show="cell4" style="width: 227px;height: 29px;position: absolute;top:148px;left: 465px;">
    <div
      v-for="(rect, index) in adjustedRectsc"
      :key="rect.id"
      :style="{
        // display:'flex',
       position: 'absolute',
       width: '227px',
      //  backgroundColor: 'red',
       left: '0px',
       top: index*rect.top+`px`,
       height: `${rect.height}px`,
       }"
    >
    <div
      v-for="(rects, index) in rect.bigStorageCageDetails"
      :key="rects"
      :style="{
        float:'left',
       width: '18px',
       height: `${rect.height}px`,
       backgroundColor: '#911005',
      // border:'1px solid black',
       top: '0px',
       marginRight: rects.gap/5000*227+'px'
       }"
    >
      </div>
    </div>
  <div v-show="cell6" style="width: 227px;height: 29px;position: absolute;top:238px;left: 465px;background-color: #409EFF;">
    </div>
  <div v-show="cell7" style="width: 227px;height: 29px;position: absolute;top:269px;left: 465px;background-color: #409EFF;">
  <div v-show="cell5" style="width: 227px;height: 29px;position: absolute;top:208px;left: 465px;">
    <div
      v-for="(rect, index) in adjustedRectsd"
      :key="rect.id"
      :style="{
        // display:'flex',
       position: 'absolute',
       width: '227px',
      //  backgroundColor: 'red',
       left: '0px',
       top: index*rect.top+`px`,
       height: `${rect.height}px`,
       }"
    >
    <div
      v-for="(rects, index) in rect.bigStorageCageDetails"
      :key="rects"
      :style="{
        float:'left',
       width: '18px',
       height: `${rect.height}px`,
       backgroundColor: '#911005',
      // border:'1px solid black',
       top: '0px',
       marginRight: rects.gap/5000*227+'px'
       }"
    >
      </div>
    </div>
  <div v-show="cell8" style="width: 227px;height: 29px;position: absolute;top:300px;left: 465px;background-color: #409EFF;">
    </div> -->
    </div>
  <div v-show="cell6" style="width: 227px;height: 29px;position: absolute;top:238px;left: 465px;">
    <div
      v-for="(rect, index) in adjustedRectse"
      :key="rect.id"
      :style="{
        // display:'flex',
       position: 'absolute',
       width: '227px',
      //  backgroundColor: 'red',
       left: '0px',
       top: index*rect.top+`px`,
       height: `${rect.height}px`,
       }"
    >
    <div
      v-for="(rects, index) in rect.bigStorageCageDetails"
      :key="rects"
      :style="{
        float:'left',
       width: '18px',
       height: `${rect.height}px`,
       backgroundColor: '#911005',
      // border:'1px solid black',
       top: '0px',
       marginRight: rects.gap/5000*227+'px'
       }"
    >
      </div>
    </div>
    </div>
  <div v-show="cell7" style="width: 227px;height: 29px;position: absolute;top:269px;left: 465px;">
    <div
      v-for="(rect, index) in adjustedRectsf"
      :key="rect.id"
      :style="{
        // display:'flex',
       position: 'absolute',
       width: '227px',
      //  backgroundColor: 'red',
       left: '0px',
       top: index*rect.top+`px`,
       height: `${rect.height}px`,
       }"
    >
    <div
      v-for="(rects, index) in rect.bigStorageCageDetails"
      :key="rects"
      :style="{
        float:'left',
       width: '18px',
       height: `${rect.height}px`,
       backgroundColor: '#911005',
      // border:'1px solid black',
       top: '0px',
       marginRight: rects.gap/5000*227+'px'
       }"
    >
      </div>
    </div>
    </div>
  <div v-show="cell8" style="width: 227px;height: 29px;position: absolute;top:300px;left: 465px;">
    <div
      v-for="(rect, index) in adjustedRectsg"
      :key="rect.id"
      :style="{
        // display:'flex',
       position: 'absolute',
       width: '227px',
      //  backgroundColor: 'red',
       left: '0px',
       top: index*rect.top+`px`,
       height: `${rect.height}px`,
       }"
    >
    <div
      v-for="(rects, index) in rect.bigStorageCageDetails"
      :key="rects"
      :style="{
        float:'left',
       width: '18px',
       height: `${rect.height}px`,
       backgroundColor: '#911005',
      // border:'1px solid black',
       top: '0px',
       marginRight: rects.gap/5000*227+'px'
       }"
    >
      </div>
    </div>
    </div>
</div>
</div>
  </div>
  <el-dialog v-model="add" top="10vh" width="65%" :title="$t('searchOrder.addcage')" >
      <div style="margin-top: -20px;margin-bottom: 40px;margin-left: 30px">
          <el-input :placeholder="$t('searchOrder.inputid')" clearable style="width: 200px;">
          </el-input>
          <el-button type="primary" plain style="margin-left: 10px;">{{ $t('searchOrder.search') }}</el-button>
        <!-- <span style="margin-right: 10px">禁用词</span>
        <el-input clearable placeholder="请输入禁用词" size="mini"
          style="margin-right: 50px; width: 200px;" /> -->
        </div>
    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="180px">
      <el-form label-width="180px" label-position="right">
  <el-dialog v-model="add" top="10vh" width="70%" :title="$t('searchOrder.addcage')" >
    <div style="margin-bottom: 20px">
      <el-form>
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="6">
          <el-col :span="4">
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('searchOrder.glassIDa')" :required="true" style="width: 24vw;">
                <el-input :placeholder="$t('searchOrder.inglassID')" v-model="glassId" autocomplete="off" />
              <el-form-item :label="$t('searchOrder.tida')"  style="width: 14vw">
                {{ currentRow.deviceId }}
            <!-- <el-input v-model="currentRow.id" autocomplete="off"></el-input> -->
              </el-form-item>
              </div></div>
              </div>
          </el-col>
          <el-col :span="9">
          <el-col :span="5">
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('searchOrder.pieceingrida')" :required="true" style="width: 24vw;">
                <el-input :placeholder="$t('searchOrder.inpieceingrid')" v-model="sequence" autocomplete="off" />
              </el-form-item></div>
          <el-form-item :label="$t('searchOrder.gridnumbera')" style="width: 14vw">
                {{ currentRow.slot }}
                <!-- <el-input v-model="currentRow.slot" autocomplete="off"></el-input> -->
              </el-form-item>
              </div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('searchOrder.cardnumbera')" :required="true" style="width: 24vw;">
                <el-input :placeholder="$t('searchOrder.incardnumber')" v-model="flowCardId" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('searchOrder.typeglassa')" :required="true" style="width: 24vw;">
                <el-input :placeholder="$t('searchOrder.intypeglass')" v-model="glassType" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('searchOrder.widtha')" :required="true" style="width: 24vw;">
                <el-input :placeholder="$t('searchOrder.inwidth')" v-model="width" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('searchOrder.heighta')" :required="true" style="width: 24vw;">
                <el-input :placeholder="$t('searchOrder.inheight')" v-model="height" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('searchOrder.thicknessa')" :required="true" style="width: 24vw;">
                <el-input :placeholder="$t('searchOrder.inthickness')" v-model="thickness" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('searchOrder.layoutIDa')" :required="true" style="width: 24vw;">
                <el-input :placeholder="$t('searchOrder.inlayoutID')" v-model="temperingLayoutId" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('searchOrder.picturesequencea')" :required="true" style="width: 24vw;">
                <el-input :placeholder="$t('searchOrder.inpicturesequence')" v-model="temperingFeedSequence" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('searchOrder.startstatusa')" :required="true" style="width: 24vw;">
                <el-input :placeholder="$t('searchOrder.instartstatus')" v-model="state" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('searchOrder.glassgapsa')" :required="true" style="width: 24vw;">
                <el-input :placeholder="$t('searchOrder.inglassgaps')" v-model="gap" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
          <el-form-item :label="$t('searchOrder.gridnumbera')" :required="true" style="width: 24vw;">
                <el-input :placeholder="$t('searchOrder.grid')" v-model="state" autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        </el-form>
            </el-form>
          </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="handleConfirm">
          {{ $t('searchOrder.sure') }}
        </el-button>
        <el-button @click="add = false">{{ $t('searchOrder.cancel') }}</el-button>
      </el-form>
    </div>
      <div style="margin-top: -20px;margin-bottom: 40px;margin-left: 30px">
          <el-input v-model="glassId"   :placeholder="$t('searchOrder.inputid')" clearable style="width: 200px;">
          </el-input>
          <el-button type="primary" plain style="margin-left: 10px;" @click="searchout">{{ $t('searchOrder.search') }}</el-button>
    </div>
    <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 500px;">
        <el-table height="100%" ref="table"
        :data="tableDataf" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="120" />
          <el-table-column prop="sequence" align="center" :label="$t('searchOrder.pieceingrid')" min-width="180" />
          <el-table-column prop="flowCardId" align="center" :label="$t('searchOrder.cardnumber')" min-width="150" />
          <el-table-column prop="glassType" align="center" :label="$t('searchOrder.typeglass')" min-width="150"/>
          <el-table-column prop="width" align="center" :label="$t('searchOrder.width')" min-width="150"/>
          <el-table-column prop="height" align="center" :label="$t('searchOrder.height')" min-width="150"/>
          <el-table-column prop="thickness" align="center" :label="$t('searchOrder.thickness')" min-width="150"/>
          <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutID')" min-width="150"/>
          <el-table-column prop="temperingFeedSequence" align="center" :label="$t('searchOrder.picturesequence')" min-width="150"/>
          <el-table-column
          align="center"
            :label="$t('searchOrder.startstatus')"
            min-width="80"
            prop="state"
          >
          <template #default="scope">
          <el-tag
            :type="scope.row.state === 1 ? 'success' : 'danger'"
          >
          {{ scope.row.state === 1 ? $t('searchOrder.enable') : $t('searchOrder.disable') }}
          </el-tag>
        </template>
          </el-table-column>
          <el-table-column prop="gap" align="center" :label="$t('searchOrder.glassgaps')" min-width="150"/>
          <!-- <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="150"/> -->
          <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="150">
            <template #default="scope">
              <el-button size="mini" type="text" plain @click="finisha(scope.row)">{{ $t('searchOrder.sureadd') }}</el-button>
            </template>
        </el-table-column>
        </el-table>
      </div>
    </template>
  </el-dialog>
<el-dialog v-model="dialogFormVisiblea" top="5vh" width="97%" :title="$t('searchOrder.cageinformation')">
    <el-table  
@@ -1050,7 +1058,6 @@
 
</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{
UI-Project/src/views/UnLoadGlass/Landingindication.vue
@@ -46,7 +46,7 @@
 
  { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG12345678',downGlassInfoList:"" } },
 
  { x: 140, y: 420, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' ,downGlassInfoList:""} }
  { x: 140, y: 320, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' ,downGlassInfoList:""} }
  
]);
UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
@@ -46,7 +46,7 @@
 
  { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG12345678' } },
 
  { x: 140, y: 420, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' } }
  { x: 140, y: 320, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' } }
  
]);
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/controller/DownStorageCageDetailsController.java
@@ -69,8 +69,15 @@
//
    @ApiOperation("修改玻璃状态   功能:对笼内栅格玻璃进行【破损/拿走】  ")
    @PostMapping("/ReportStatus")
    @ResponseBody
    public Result edgReportStatus(@RequestBody Map<String, String> arguments) {
        String downStorageCageDetailsId=arguments.get("glassId");
        int controlsId=Integer.valueOf(arguments.get("controlsId"));
        boolean isSucess=downStorageCageDetailsService.identWorn(downStorageCageDetailsId,controlsId);
        return Result.build(200,"【破损/拿走】成功",1);
    }
    // Other CRUD operations can be defined here
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/DownStorageCageDetailsService.java
@@ -72,4 +72,11 @@
    boolean DirectConnection(GlassInfo glassInfo);
    DownStorageCageDetails getGlassInfoMaxCount();
    /**
     * @param glassId
     * @param ControlsId
     * @return  破损
     */
    boolean identWorn(String glassId, int ControlsId);
}
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageDetailsServiceImpl.java
@@ -3,12 +3,19 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.yulichang.query.MPJLambdaQueryWrapper;
import com.github.yulichang.query.MPJQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.mes.common.config.Const;
import com.mes.downstorage.entity.DownStorageCage;
import com.mes.downstorage.entity.DownStorageCageDetails;
import com.mes.downstorage.mapper.DownStorageCageDetailsMapper;
import com.mes.downstorage.mapper.DownStorageCageMapper;
import com.mes.downstorage.service.DownStorageCageDetailsService;
import com.mes.downworkstation.entity.DownWorkstation;
@@ -346,4 +353,24 @@
    }
    @Override
    public boolean identWorn(String glassId, int ControlsId) {
        List<DownStorageCageDetails> edgStorageCageDetails = baseMapper.selectList(new MPJLambdaQueryWrapper<DownStorageCageDetails>().selectAll(DownStorageCageDetails.class).eq(DownStorageCageDetails::getGlassId, glassId));
        if (edgStorageCageDetails.size() == 1) {
            DownStorageCageDetails item = edgStorageCageDetails.get(0);
            item.setState(ControlsId);
            baseMapper.update(item, new MPJLambdaWrapper<DownStorageCageDetails>().selectAll(DownStorageCageDetails.class).eq(DownStorageCageDetails::getGlassId, glassId));
            return true;
        }
        return false;
    }
}