Ver código fonte

增加扫码自动填充中转区货位

wangzhengguang 3 meses atrás
pai
commit
8d937e91e0

+ 37 - 1
src/components/StockIn.vue

@@ -149,6 +149,7 @@ onUnmounted(() => {
   if (ws.value) {
     ws.value.close();
   }
+  clearTimeout(timer);
 });
 
 // 初始化WebSocket连接
@@ -177,15 +178,50 @@ const initWebSocket = () => {
 const handleWebSocketMessage = event => {
   try {
     // 解析接收到的JSON数据
-    const data = JSON.parse(event.data);
+    const data = event.data;
     console.log('接收到WebSocket数据:', data);
 
+    // 判断数据长度是否小于20
+    if (data && typeof data === 'string' && data.length < 20) {
+      const positionNo = data;
+      console.log('货位编号:', positionNo);
+      // 搜索货位
+      searchPositionByNo(positionNo);
+    }
+
   } catch (error) {
     console.error('解析WebSocket消息失败:', error);
     showFailToast('解析数据失败,请检查数据格式');
   }
 };
 
+// 根据货位编号搜索货位
+const searchPositionByNo = positionNo => {
+  const url = `/api/positionResource/getTransferPosition?start=0&length=10&filter=${positionNo}&warehouseId=${warehouseId.value}`;
+  ajaxApiGet(url).then(
+    success => {
+      const { errorCode, errorMessage, datas } = success;
+      if (errorCode === 0) {
+        if (datas && datas.length > 0) {
+          const position = datas[0];
+          // 自动填充中转区货位
+          formData.value.transferId = position.id;
+          formData.value.transferNo = position.no;
+          formData.value.transferName = position.name;
+          showSuccessToast('中转货位自动填充成功');
+        } else {
+          console.log('未找到对应货位');
+        }
+      } else {
+        showFailToast(errorMessage);
+      }
+    },
+    error => {
+      processException(error);
+    },
+  );
+};
+
 let timer = null;
 
 // 搜索入库物料

+ 49 - 14
src/components/StockInScan.vue

@@ -144,21 +144,29 @@ const initWebSocket = () => {
 // 处理WebSocket消息
 const handleWebSocketMessage = event => {
   try {
-    // 解析接收到的JSON数据
-    const data = JSON.parse(event.data);
-    console.log('接收到WebSocket数据:', data);
-
-    // 将数据赋值到对应字段
-    if (data.batchNumber) {
-      stockData.value.batchNo = data.batchNumber;
-    }
-    if (data.count) {
-      stockData.value.num = data.count.toString();
-    }
+    const data = event.data;
+    // 判断数据长度是否小于20
+    if (data && typeof data === 'string' && data.length < 20) {
+      console.log('货位编号:', data);
+      // 搜索货位
+      searchPositionByNo(data);
+    }else {
+      // 解析接收到的JSON数据
+      const jsonData = JSON.parse(data);
+      console.log('接收到WebSocket数据:', jsonData);
+
+      // 将数据赋值到对应字段
+      if (jsonData.batchNumber) {
+        stockData.value.batchNo = jsonData.batchNumber;
+      }
+      if (jsonData.count) {
+        stockData.value.num = jsonData.count.toString();
+      }
 
-    // 使用code调用getInfo方法
-    if (data.barcode) {
-      getInfo(data.barcode);
+      // 使用code调用getInfo方法
+      if (jsonData.barcode) {
+        getInfo(jsonData.barcode);
+      }
     }
   } catch (error) {
     console.error('解析WebSocket消息失败:', error);
@@ -166,6 +174,33 @@ const handleWebSocketMessage = event => {
   }
 };
 
+// 根据货位编号搜索货位
+const searchPositionByNo = positionNo => {
+  const url = `/api/positionResource/getTransferPosition?start=0&length=10&filter=${positionNo}&warehouseId=${warehouseId.value}`;
+  ajaxApiGet(url).then(
+    success => {
+      const { errorCode, errorMessage, datas } = success;
+      if (errorCode === 0) {
+        if (datas && datas.length > 0) {
+          const position = datas[0];
+          // 自动填充中转区货位
+          stockData.value.transferId = position.id;
+          stockData.value.transferNo = position.no;
+          stockData.value.transferName = position.name;
+          showSuccessToast('中转货位自动填充成功');
+        } else {
+          console.log('未找到对应货位');
+        }
+      } else {
+        showFailToast(errorMessage);
+      }
+    },
+    error => {
+      processException(error);
+    },
+  );
+};
+
 const columns = ref([]);
 const showCarrierTypePicker = ref(false);
 const carrierType = ref([]);

+ 79 - 0
src/components/StockOut.vue

@@ -83,6 +83,9 @@ import { processException } from '../common/Common.js';
 import { ajaxApiGet, ajaxApiPost } from '../common/utils.js';
 import { showFailToast, showSuccessToast, showConfirmDialog } from 'vant';
 
+// WebSocket实例
+const ws = ref(null);
+
 const route = useRoute();
 const router = useRouter();
 
@@ -124,10 +127,16 @@ onMounted(() => {
   warehouseId.value = route.query.warehouseId || '';
   warehouseName.value = route.query.warehouseName || '';
   title.value = route.query.warehouseName ? '出库 - ' + route.query.warehouseName : '出库';
+  // 建立WebSocket连接
+  initWebSocket();
 });
 
 // 在组件卸载时清除定时器(避免内存泄漏)
 onUnmounted(() => {
+  // 关闭WebSocket连接
+  if (ws.value) {
+    ws.value.close();
+  }
   clearTimeout(timer);
 });
 
@@ -139,6 +148,76 @@ const goBack = () => {
   router.push('/warehouse-selector?page=stock-out&warehouseId=' + warehouseId.value);
 };
 
+// 初始化WebSocket连接
+const initWebSocket = () => {
+  const wsUrl = 'ws://127.0.0.1:10023';
+  ws.value = new WebSocket(wsUrl);
+
+  ws.value.onopen = () => {
+    console.log('WebSocket连接已建立');
+  };
+
+  ws.value.onmessage = event => {
+    handleWebSocketMessage(event);
+  };
+
+  ws.value.onerror = error => {
+    console.error('WebSocket错误:', error);
+  };
+
+  ws.value.onclose = () => {
+    console.log('WebSocket连接已关闭');
+  };
+};
+
+// 处理WebSocket消息
+const handleWebSocketMessage = event => {
+  try {
+    // 解析接收到的JSON数据
+    const data = event.data;
+    console.log('接收到WebSocket数据:', data);
+
+    // 判断数据长度是否小于20
+    if (data && typeof data === 'string' && data.length < 20) {
+      const positionNo = data;
+      console.log('货位编号:', positionNo);
+      // 搜索货位
+      searchPositionByNo(positionNo);
+    }
+
+  } catch (error) {
+    console.error('解析WebSocket消息失败:', error);
+    showFailToast('解析数据失败,请检查数据格式');
+  }
+};
+
+// 根据货位编号搜索货位
+const searchPositionByNo = positionNo => {
+  const url = `/api/positionResource/getTransferPosition?start=0&length=10&filter=${positionNo}&warehouseId=${warehouseId.value}`;
+  ajaxApiGet(url).then(
+    success => {
+      const { errorCode, errorMessage, datas } = success;
+      if (errorCode === 0) {
+        if (datas && datas.length > 0) {
+          const position = datas[0];
+          // 自动填充中转区货位
+          formData.value.transferId = position.id;
+          formData.value.transferNo = position.no;
+          formData.value.transferName = position.name;
+          showSuccessToast('中转货位自动填充成功');
+        } else {
+          console.log('未找到对应货位');
+        }
+      } else {
+        showFailToast(errorMessage);
+      }
+    },
+    error => {
+      processException(error);
+    },
+  );
+};
+
 let timer = null;
 
 // 搜索出库物料

+ 45 - 10
src/components/StockOutScan.vue

@@ -136,16 +136,24 @@ const initWebSocket = () => {
 // 处理WebSocket消息
 const handleWebSocketMessage = event => {
   try {
-    // 解析接收到的JSON数据
-    const data = JSON.parse(event.data);
-    console.log('接收到WebSocket数据:', data);
-
-    // 获取positionId(出库货位)
-    const positionId = stockData.value.positionId || '';
-
-    // 使用code调用getInfo方法
-    if (data.barcode) {
-      getInfo(data.barcode, data.batchNumber, positionId);
+    const data = event.data;
+    // 判断数据长度是否小于20
+    if (data && typeof data === 'string' && data.length < 20) {
+      console.log('货位编号:', data);
+      // 搜索货位
+      searchPositionByNo(data);
+    }else {
+      // 解析接收到的JSON数据
+      const jsonData = JSON.parse(data);
+      console.log('接收到WebSocket数据:', jsonData);
+
+      // 获取positionId(出库货位)
+      const positionId = stockData.value.positionId || '';
+
+      // 使用code调用getInfo方法
+      if (jsonData.barcode) {
+        getInfo(jsonData.barcode, jsonData.batchNumber, positionId);
+      }
     }
   } catch (error) {
     console.error('解析WebSocket消息失败:', error);
@@ -153,6 +161,33 @@ const handleWebSocketMessage = event => {
   }
 };
 
+// 根据货位编号搜索货位
+const searchPositionByNo = positionNo => {
+  const url = `/api/positionResource/getTransferPosition?start=0&length=10&filter=${positionNo}&warehouseId=${warehouseId.value}`;
+  ajaxApiGet(url).then(
+    success => {
+      const { errorCode, errorMessage, datas } = success;
+      if (errorCode === 0) {
+        if (datas && datas.length > 0) {
+          const position = datas[0];
+          // 自动填充中转区货位
+          stockData.value.transferId = position.id;
+          stockData.value.transferNo = position.no;
+          stockData.value.transferName = position.name;
+          showSuccessToast('中转货位自动填充成功');
+        } else {
+          console.log('未找到对应货位');
+        }
+      } else {
+        showFailToast(errorMessage);
+      }
+    },
+    error => {
+      processException(error);
+    },
+  );
+};
+
 const goBack = () => {
   router.back();
 };