north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/OptimizeCompute.vue
@@ -1,10 +1,11 @@
<script setup>
import {ref, computed, watch} from "vue";
import {Connection} from "@element-plus/icons-vue";
import { ElMessage } from 'element-plus'; // 添加这行
import { ElMessage, ElMessageBox } from 'element-plus'; // 添加这行
import {useRoute, useRouter} from "vue-router";
import useOrderInfoStore from "@/stores/sd/order/orderInfo";
import requestOptimize from "@/utils/requestOptimize";
import request from "@/utils/request";
const router = useRouter()
const orderInfo = useOrderInfoStore()
@@ -77,13 +78,35 @@
            // 更新 store 数据
            if (result.layouts && result.layouts.length > 0) {
              // 更新 store 数据
              orderInfo.optimizeData.optimalResults = {
                layouts: result.layouts
              };
            }
            orderInfo.optimizeData.originalFilm = originalFilm.value;
            // 在这里就设置 originalFilm 数据
            const newOriginalFilm = [];
            result.layouts.forEach(items => {
              const existingItem = newOriginalFilm.find(
                  item => item.width === items.width && item.height === items.height
              );
              if (existingItem) {
                existingItem.count += 1;
              } else {
                newOriginalFilm.push({
                  width: items.width,
                  height: items.height,
                  upTrim: items.upTrim,
                  downTrim: items.downTrim,
                  leftTrim: items.leftTrim,
                  rightTrim: items.rightTrim,
                  stockCode: items.stockCode,
                  count: 1
                });
              }
            });
            originalFilm.value = newOriginalFilm;
            orderInfo.optimizeData.originalFilm = newOriginalFilm; // 这一行很重要
            console.log('优化完成后设置 originalFilm:', newOriginalFilm);
            // 更新利用率
            totalUtilizationRate.value = result.avgCutRate;
            tailPieceRate.value = result.lastCutRate;
@@ -121,43 +144,106 @@
    isRunning.value = false;
  }
};
const resetTimer = () => {
  router.push({path: '/main/glassOptimize/Optimization'})
  /*clearInterval(intervalId);
  isRunning.value = false;
  seconds.value = 0;
  progress.value = 0;*/
const saveOptimizeData = async () => {
  // 检查是否有优化数据
  if(orderInfo.optimizeData !== null){
    try {
      // 确保 originalFilm 数据已设置
      if (!orderInfo.optimizeData.originalFilm) {
        orderInfo.optimizeData.originalFilm = originalFilm.value;
        console.log('保存前设置 originalFilm:', originalFilm.value);
      }
      // 发送请求保存优化数据
      const res = await request.post(`/glassOptimize/saveOptimizeData/${props.optimizeData.projectNo}`, orderInfo.optimizeData);
      if (Number(res.code) === 200) {
        ElMessage.success("保存成功");
        return true; // 保存成功
      } else {
        ElMessage.warning(res.msg || "保存失败");
        return false; // 保存失败
      }
    } catch (error) {
      ElMessage.error("保存过程中发生错误");
      console.error("保存数据出错:", error);
      return false; // 保存出错
    }
  } else {
    ElMessage.warning("无优化数据可保存");
    return false;
  }
}
const resetTimer = async () => {
  // 先保存数据,保存成功后再跳转
  const isSaved = await saveOptimizeData();
  if (isSaved) {
    // 保存成功后跳转到优化界面
    router.push({path: '/main/glassOptimize/Optimization'});
  } else {
    // 保存失败,给用户选择是否仍要离开
    ElMessageBox.confirm(
        '数据保存失败,是否仍要离开当前页面?',
        '提示',
        {
          confirmButtonText: '确定离开',
          cancelButtonText: '取消',
          type: 'warning'
        }
    ).then(() => {
      // 用户确认离开
      router.push({path: '/main/glassOptimize/Optimization'});
    }).catch(() => {
      // 用户取消,留在当前页面
      ElMessage.info('操作已取消');
    });
  }
};
// watch(
//     () => progress.value,
//     (newValue) => {
//       if (newValue === 100 && orderInfo.optimizeData && orderInfo.optimizeData.optimalResults) {
//         // 根据接口返回的 layouts 数据构建版图统计
//         const layouts = orderInfo.optimizeData.optimalResults.layouts;
//         const newOriginalFilm = [];
//
//         layouts.forEach(items => {
//           const existingItem = newOriginalFilm.find(
//               item => item.width === items.width && item.height === items.height
//           );
//
//           if (existingItem) {
//             existingItem.count += 1;
//           } else {
//             newOriginalFilm.push({
//               width: items.width,
//               height: items.height,
//               upTrim: items.upTrim,
//               downTrim: items.downTrim,
//               leftTrim: items.leftTrim,
//               rightTrim: items.rightTrim,
//               stockCode: items.stockCode,
//               count: 1
//             });
//           }
//         });
//         // 更新 originalFilm
//         originalFilm.value = newOriginalFilm;
//         console.log('设置 originalFilm 数据:', newOriginalFilm);
//       }
//     }
// );
// 简化 watch 函数
watch(
    () => progress.value,
    (newValue) => {
      if (newValue === 10) {
        // 根据接口返回的 layouts 数据构建版图统计
        const layouts = orderInfo.optimizeData.optimalResults.layouts;
        originalFilm.value = [];
        layouts.forEach(items => {
          const existingItem = originalFilm.value.find(
              item => item.width === items.width && item.height === items.height
          );
          if (existingItem) {
            existingItem.count += 1;
          } else {
            originalFilm.value.push({
              width: items.width,
              height: items.height,
              upTrim: items.upTrim,
              downTrim: items.downTrim,
              leftTrim: items.leftTrim,
              rightTrim: items.rightTrim,
              stockCode: items.stockCode,
              count: 1
            });
          }
        });
      }
      // 进度更新时不需要额外处理,因为已经在 startTimer 中处理了 originalFilm
      console.log('优化进度更新:', newValue);
    }
);