From baf74fc6ba071853f6bcb23150bb19d5ba872b39 Mon Sep 17 00:00:00 2001
From: 于杰 <1210123631@qq.com>
Date: 星期日, 28 九月 2025 09:34:39 +0800
Subject: [PATCH] 修改调整后坐标保存逻辑,实现优化后保存opt文件,并显示地址
---
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/OptimizationRect.vue | 66 +++++++++++++++++++++
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml | 1
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue | 54 +++++++++--------
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java | 18 ++++++
4 files changed, 112 insertions(+), 27 deletions(-)
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue
index b5a8092..939ff1d 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue
@@ -21,7 +21,7 @@
import RectRenderer from './page/RectRenderer.vue';
import request from "@/utils/request";
import { useI18n } from "vue-i18n";
-import { ElMessage } from "element-plus";
+import {ElMessage, ElMessageBox} from "element-plus";
import requestOptimize from "@/utils/requestOptimize";
import useUserInfoStore from "@/stores/userInfo";
@@ -180,41 +180,45 @@
const response = await requestOptimize.post('api/cutFiles', {
fileName: processId,
projectNo: processId,
- glassThickness:inventoryData.value[0].thickness,
- glassType:inventoryData.value[0].model,
+ glassThickness: inventoryData.value[0].thickness,
+ glassType: inventoryData.value[0].model,
quantity: inventoryData.value[0].processingQuantity,
- fileType:"OPT",
- fileSaveMode:fileMode.value,
- glassIdMode:glassIdMode.value,
- haveMark:haveMark.value,
- haveOptimaMark:haveOptimaMark.value,
- haveQMark:haveQMark.value,
- optimaMarkPosition:optimaMarkPosition.value,
- optimaMarkName:optimaMarkName.value,
- optimaMarkWidth:optimaMarkWidth.value,
- optimaMarkHeight:optimaMarkHeight.value,
+ fileType: "OPT",
+ fileSaveMode: fileMode.value,
+ glassIdMode: glassIdMode.value,
+ haveMark: haveMark.value,
+ haveOptimaMark: haveOptimaMark.value,
+ haveQMark: haveQMark.value,
+ optimaMarkPosition: optimaMarkPosition.value,
+ optimaMarkName: optimaMarkName.value,
+ optimaMarkWidth: optimaMarkWidth.value,
+ optimaMarkHeight: optimaMarkHeight.value,
layouts: optimizeLayouts.value.layouts
}, {
headers: {
'Content-Type': 'application/json'
- },
- responseType: 'blob'
+ }
});
- // 澶勭悊涓嬭浇
- const downloadUrl = window.URL.createObjectURL(response);
- const a = document.createElement('a');
- a.href = downloadUrl;
- a.download = 'output.opt';
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- window.URL.revokeObjectURL(downloadUrl);
- ElMessage.success('OPT鏂囦欢淇濆瓨鎴愬姛');
+ // 浣跨敤 MessageBox 鏄剧ず鏂囦欢淇濆瓨浣嶇疆淇℃伅
+ if (response.data && response.data.length > 0) {
+ const filePath = response.data[0];
+ ElMessageBox.alert(`OPT鏂囦欢淇濆瓨鎴愬姛锛屼綅缃細${filePath}`, '淇濆瓨鎴愬姛', {
+ confirmButtonText: '纭畾',
+ type: 'success',
+ dangerouslyUseHTMLString: true
+ });
+ } else {
+ ElMessageBox.alert('OPT鏂囦欢淇濆瓨鎴愬姛', '淇濆瓨鎴愬姛', {
+ confirmButtonText: '纭畾',
+ type: 'success'
+ });
+ }
} catch (error) {
console.error('淇濆瓨澶辫触:', error);
ElMessage.error('淇濆瓨澶辫触锛岃绋嶅悗鍐嶈瘯');
}
};
+
</script>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/OptimizationRect.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/OptimizationRect.vue
index fab593e..6d16c5b 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/OptimizationRect.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/OptimizationRect.vue
@@ -80,9 +80,9 @@
<script setup>
import { ref, reactive, onMounted, onUnmounted } from 'vue';
-import { useRouter } from 'vue-router'; // 娣诲姞杩欒
+import { useRouter } from 'vue-router';
import request from "@/utils/request";
-const router = useRouter(); // 娣诲姞杩欒
+const router = useRouter();
import { useI18n } from "vue-i18n";
import { ElMessage, ElMessageBox } from "element-plus";
import useUserInfoStore from "@/stores/userInfo";
@@ -553,6 +553,11 @@
const rectIndex = dragRect.value.rectIndex;
const layout = layouts.value[layoutIndex];
const glassDetail = layout.glassDetails[rectIndex];
+
+ // 淇濆瓨鍘熷鍧愭爣鐢ㄤ簬璁$畻鍋忕Щ閲�
+ const originalX = glassDetail.x;
+ const originalY = glassDetail.y;
+
const scale = Math.min(
(props.gw - 100) / layout.width,
(props.gh - 100) / layout.height
@@ -583,6 +588,18 @@
if (isValidMove) {
glassDetail.x = newRect.x;
glassDetail.y = newRect.y;
+
+ // 鏇存柊glassPoint鍧愭爣
+ if (glassDetail.glassPoint && Array.isArray(glassDetail.glassPoint)) {
+ const offsetX = glassDetail.x - originalX;
+ const offsetY = glassDetail.y - originalY;
+
+ glassDetail.glassPoint.forEach(point => {
+ point.X += offsetX;
+ point.Y += offsetY;
+ });
+ }
+
dragStartPos.value = {
x: event.clientX,
y: event.clientY
@@ -819,6 +836,22 @@
}
if (isValidRotation) {
+ // 鏇存柊glassPoint鍧愭爣锛堝鏋滃瓨鍦級
+ if (glassDetail.glassPoint && Array.isArray(glassDetail.glassPoint)) {
+ // 淇濆瓨鍘熷鐐瑰潗鏍�
+ const originalPoints = JSON.parse(JSON.stringify(glassDetail.glassPoint));
+
+ // 鏃嬭浆鐐瑰潗鏍囷紙浠ョ煩褰㈠乏涓婅涓哄師鐐圭殑鏃嬭浆锛�
+ glassDetail.glassPoint.forEach((point, index) => {
+ // 璁$畻鐩稿浜庣煩褰㈠乏涓婅鐨勫潗鏍�
+ const relX = originalPoints[index].X - originalState.x;
+ const relY = originalPoints[index].Y - originalState.y;
+
+ // 鏃嬭浆90搴﹀悗鐨勫潗鏍囷紙椤烘椂閽堬級
+ point.X = originalState.x + relY;
+ point.Y = originalState.y + (originalState.width - relX);
+ });
+ }
adjustGrayRectangles(layoutIndex);
} else {
glassDetail.width = originalState.width;
@@ -882,6 +915,11 @@
return;
}
+
+ // 淇濆瓨鍘熷鍧愭爣
+ const originalX = glassDetail.x;
+ const originalY = glassDetail.y;
+
switch (direction) {
case 'up':
glassDetail.y += maxStep;
@@ -913,6 +951,16 @@
}
if (isValidMove) {
+ // 鏇存柊glassPoint鍧愭爣
+ if (glassDetail.glassPoint && Array.isArray(glassDetail.glassPoint)) {
+ const offsetX = glassDetail.x - originalX;
+ const offsetY = glassDetail.y - originalY;
+
+ glassDetail.glassPoint.forEach(point => {
+ point.X += offsetX;
+ point.Y += offsetY;
+ });
+ }
adjustGrayRectangles(layoutIndex);
} else {
glassDetail.x = originalState.x;
@@ -1161,6 +1209,13 @@
// 鏇存柊鐭╁舰浣嶇疆
glassDetail.x = newX;
glassDetail.y = newY;
+
+ // 鏇存柊glassPoint鍧愭爣
+ if (glassDetail.glassPoint && Array.isArray(glassDetail.glassPoint)) {
+ glassDetail.glassPoint.forEach(point => {
+ point.X = width - point.X;
+ });
+ }
});
// 鏇存柊甯冨眬
@@ -1181,6 +1236,13 @@
// 鏇存柊鐭╁舰浣嶇疆
glassDetail.y = newY;
+
+ // 鏇存柊glassPoint鍧愭爣
+ if (glassDetail.glassPoint && Array.isArray(glassDetail.glassPoint)) {
+ glassDetail.glassPoint.forEach(point => {
+ point.Y = height - point.Y;
+ });
+ }
});
// 鏇存柊甯冨眬
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java b/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
index 2130651..560d062 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
@@ -393,6 +393,24 @@
}
}
}
+ // 澶勭悊 glassPoint 搴忓垪鍖�
+ if (detail.containsKey("glassPoint")) {
+ Object glassPointObj = detail.get("glassPoint");
+ if (glassPointObj != null) {
+ try {
+ // 濡傛灉 glassPointObj 宸茬粡鏄瓧绗︿覆锛屽垯涓嶉渶瑕佽浆鎹�
+ if (!(glassPointObj instanceof String)) {
+ // 灏嗗璞¤浆鎹负 JSON 瀛楃涓�
+ String glassPointStr = mapper.writeValueAsString(glassPointObj);
+ detail.put("glassPoint", glassPointStr);
+ }
+ } catch (Exception e) {
+ // 濡傛灉杞崲澶辫触锛岃褰曢敊璇苟绉婚櫎璇ュ瓧娈�
+ System.err.println("杞崲 glassPoint 澶辫触: " + e.getMessage());
+ detail.remove("glassPoint");
+ }
+ }
+ }
if (isRemain) {
offCutDetails.add(detail);
diff --git a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
index 6dd579c..f684745 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -1523,6 +1523,7 @@
<update id="updateNormalDetails">
UPDATE pp.optimize_detail
SET
+ glass_point = #{detail.glassPoint},
x_axis = #{detail.x},
y_axis = #{detail.y}
WHERE
--
Gitblit v1.8.0