zhoushihao
2024-10-11 d5d0d1c7a84b996b9bbcebfaf2c2c95f1a5a3678
UI-Project/src/views/Identify/identify.vue
@@ -11,8 +11,8 @@
      @current-change="handleCurrentChange"
    />
    </div>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 600px;" v-loading="loading">
      <el-scrollbar height="550px" width="1200px" style="background-color: #e9e9eb;">
    <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 800px;" v-loading="loading">
      <el-scrollbar height="750px" width="1400px" style="background-color: #e9e9eb;">
  <div style="position: relative;">  
    <div  
      v-for="(rect, index) in adjustedRects"  
@@ -21,7 +21,7 @@
      @click="showDialog(rect.glass_id)"  
      :style="{ position: 'absolute', 
      top: `${rect.y_axis}px`, left: `${rect.x_axis}px`, width: `${rect.width}px`, height: `${rect.height}px`,
      backgroundColor: getRectColor(rect.glass_state)
      backgroundColor: rect.isActive ? '#ADFF2F' : getRectColor(rect.glass_state)
       }"  
    >
     <!-- 箭头 -->  
@@ -34,13 +34,13 @@
  </div> 
   </div>
  </el-scrollbar>
  <el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;">
        <el-button type="warning" plain :icon="Delete" @click="handleDamage(currentGlassId)"  style="width: 140px;margin-left: 10px;">
  <el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;" @close="handleDialogClose">
        <el-button :disabled="currentGlassRect?.glass_state === 8 || currentGlassRect?.glass_state === 9" type="warning" plain :icon="Delete" @click="handleDamage(currentGlassId)"  style="width: 140px;margin-left: 10px;">
          {{ $t('order.dilapidation') }}
        </el-button>
        <el-button  type="danger" plain @click="handleManualTake(currentGlassId)" style="width: 140px;margin-top: 10px;">
        <el-button :disabled="currentGlassRect?.glass_state === 9 || currentGlassRect?.glass_state === 8" type="danger" plain @click="handleManualTake(currentGlassId)" style="width: 140px;margin-top: 10px;">
          <el-icon class="el-icon--right"><Upload /></el-icon>
          {{ $t('order.Takeaway') }}</el-button>
          {{ $t('order.takeaway') }}</el-button>
  </el-dialog> 
  </el-card>
</template>  
@@ -60,40 +60,51 @@
const glass_id = ref();
const inputValue = ref('');
const currentGlassId = ref(null); // 存储当前点击矩形的 glass_id  
const currentstate = ref(null);
const adjustedRects = ref([]);
const raw = ref([]);
let webSocket: WebSocket | null = null;  
const totalPages = ref(0);
const pageSize = ref(1);
const currentPage = ref(1);
const currentPage = ref('');
const disabled = false;
const size = 'small';
const rawData = ref([]);
const rawData = ref([]);
// const handleBind = (row) => {
//   blind.value = true; // 打开绑定架子对话框
// };
// 显示对话框并设置当前 glass_id  
function showDialog(glassId: number) {
const currentGlassRect = computed(() => {
  return adjustedRects.value.find(rect => rect.glass_id === currentGlassId.value);
});
function showDialog(glassId: number) {
  currentGlassId.value = glassId;  
  blind.value = true;  
  adjustedRects.value = adjustedRects.value.map(rect =>
    rect.glass_id === glassId ? { ...rect, isActive: true } : rect
  );
}  
const handleDialogClose = () => {
  adjustedRects.value = adjustedRects.value.map(rect => ({
    ...rect,
    isActive: false
  }));
}
// 破损
const handleDamage = async () => {
  try  {
    // var url="/cacheGlass/taskCache/identControls?identId="+currentGlassId.value+'&controlsId='+201;
    //   console.log(url);
    //   const response = await request.post(url)
  const response = await request.post('/cacheGlass/taskCache/identControls', {
    glassId: currentGlassId.value,
    state: 8,
    line: 1001,
    workingProcedure: '识别',
    workingProcedure: '切割',
    })
    if (response.code == 200) {
      ElMessage.success(response.message);
      // window.location.reload() 
      blind.value = false;
      updateRectStatus(currentGlassId.value, 8); 
      findEngineering()
    } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.msg);
@@ -114,7 +125,7 @@
    glassId: currentGlassId.value,
    state: 9,
    line: 1001,
    workingProcedure: '识别',
    workingProcedure: '切割',
    })
    if (response.code == 200) {
      // 绑定成功,处理逻辑
@@ -122,7 +133,8 @@
      // window.location.reload() 
      blind.value = false;
      updateRectStatus(currentGlassId.value, 9); 
    } else {
      findEngineering()
  } else {
      // 请求失败,显示错误消息
      ElMessage.error(response.msg);
    }
@@ -132,24 +144,24 @@
    console.error(error);
  }
}
const handleBlur = async () => {
const handleBlur = async () => {
  if (inputValue.value) {  
    var url="/cacheGlass/taskCache/cutTerritory?current="+inputValue.value;
    const response = await request.post(url)
    if (response.code === 200) {
      console.log(response.data);
      const rawRects = response.data[0];
      rawData.value = response.data;
      totalPages.value = rawData.value.length;
      const scaleFactor =  1621.78/6000;
      const scaleFactory =  750/3300;
      adjustedRects.value = rawRects.map(rect => ({  
        ...rect,
        x_axis: (6000 -(rect.x_axis + rect.width)) * 0.2085,
        y_axis: rect.y_axis * 0.17,
        width: rect.width * 0.2 ,
        x_axis: (6000 -(rect.x_axis + rect.width)) * scaleFactor,
        y_axis: rect.y_axis * scaleFactory,
        width: rect.width * scaleFactor ,
        widtha: rect.width ,
        heighta: rect.height ,
        height: rect.height * 0.165 ,
        height: rect.height * scaleFactory,
        glass_state: rect.glass_state
      }));  
      // 如果WebSocket已连接,则关闭  
@@ -157,45 +169,57 @@
        webSocket.close();  
        webSocket = null;
      }  
       currentPage.value = 1;
       currentPage.value = 1;
    }  
  } else{
    connectWebSocket();
  } 
}; 
const findEngineering = async () => {
  if (inputValue.value) {
    var url="/cacheGlass/taskCache/cutTerritory?current="+inputValue.value;
    const response = await request.post(url)
    if (response.code === 200) {
      rawData.value = response.data;
    }
  } else{
  }
};
const handleCurrentChange = (val: number) => {  
  currentPage.value = val;
  // window.localStorage.setItem('pagenumber', currentPage.value).
  const page = currentPage.value - 1
      const scaleFactor =  1621.78/6000;
      const scaleFactory =  750/3300;
      adjustedRects.value = rawData.value[page]?.map(rect => ({  
      // adjustedRects.value = rawRects.map(rect => ({  
        ...rect,
        x_axis: (6000 -(rect.x_axis + rect.width)) * 0.2085,
        y_axis: rect.y_axis * 0.17,
        width: rect.width * 0.2 ,
        x_axis: (6000 -(rect.x_axis + rect.width)) * scaleFactor,
        y_axis: rect.y_axis * scaleFactory,
        width: rect.width * scaleFactor ,
        widtha: rect.width ,
        heighta: rect.height ,
        height: rect.height * 0.165 ,
        height: rect.height * scaleFactory,
        glass_state: rect.glass_state
      }));
      }));
};
function getRectColor(state: number): string {
  switch (state) {
    case 0:
      return '#e1f3d8';
    case 100:
      return '#c8c9cc';
    case 110:
      return '#b3e19d';
    case 120:
      return '#f89898';
    case 8:
      return '#911005';
    case 9:
      return '#f3d19e';
    // default:
    //   return '#911005'; // 默认颜色
  }
}
function getRectColor(state: number): string {
  switch (state) {
    case 0:
      return '#e1f3d8';
    case 100:
      return '#c8c9cc';
    case 110:
      return '#b3e19d';
    case 120:
      return '#f89898';
    case 8:
      return '#911005';
    case 9:
      return '#f3d19e';
  }
}
// 更新矩形状态  
function updateRectStatus(glassId: string, status: number) {  
  adjustedRects.value.forEach(rect => {  
@@ -209,28 +233,48 @@
const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`;
    webSocket = new WebSocket(socketUrl);  
    webSocket.onmessage = (event) => {  
      const data = JSON.parse(event.data);
        adjustedRects.value = data.currentCutTerritory[0].map(rect => ({
        ...rect,
        x_axis: (6000 -(rect.x_axis + rect.width)) * 0.2085,
        y_axis: rect.y_axis * 0.17,
        width: rect.width * 0.2 ,
        widtha: rect.width ,
        heighta: rect.height ,
        height: rect.height * 0.165 ,
        glass_state: rect.glass_state
      }));
      const data = JSON.parse(event.data);
      const scaleFactor =  1621.78/6000;
      const scaleFactory =  750/3300;
      if (data.currentCutTerritory && data.currentCutTerritory.length > 0) {
      const newRects = data.currentCutTerritory[0].map(rect => {
        const existingRect = adjustedRects.value.find(r => r.glass_id === rect.glass_id);
        if (existingRect) {
          return {
            ...existingRect,
            x_axis: (6000 - (rect.x_axis + rect.width)) * scaleFactor,
            y_axis: rect.y_axis * scaleFactory,
            width: rect.width * scaleFactor,
            height: rect.height * scaleFactory,
            widtha: rect.width,
            heighta: rect.height,
            glass_state: rect.glass_state,
            // 保持 isActive 状态不变
          };
        } else {
          // 如果不存在,则添加新矩形,默认 isActive 为 false
          return {
            ...rect,
            x_axis: (6000 - (rect.x_axis + rect.width)) * scaleFactor,
            y_axis: rect.y_axis * scaleFactory,
            width: rect.width * scaleFactor,
            height: rect.height * scaleFactory,
            widtha: rect.width,
            heighta: rect.height,
            glass_state: rect.glass_state,
            isActive: false,
            glass_id: rect.glass_id,
          };
        }
      });
      adjustedRects.value = newRects;
     } else if (data.currentCutTerritory == '') {
      adjustedRects.value = [];
     }
    };  
    webSocket.onerror = (error) => {
      console.error('WebSocket Error:', error);
    };
    webSocket.onclose = () => {
      console.log('WebSocket Connection Closed');
      // 可以选择重新连接
    };
  }
  }
};  
onMounted(() => {  
  // 初始时,如果输入框为空,则连接WebSocket  
  if (!inputValue.value) {