From 715cf4c8b9e097aae6c4bcaf00bdd67a763529c4 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期一, 30 三月 2026 13:58:09 +0800
Subject: [PATCH] feat(stockChat): 集成 SignalR 实现实时库存更新
---
Code/WMS/WIDESEA_WMSClient/src/views/stock/stockChat.vue | 41 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/Code/WMS/WIDESEA_WMSClient/src/views/stock/stockChat.vue b/Code/WMS/WIDESEA_WMSClient/src/views/stock/stockChat.vue
index 0f7402e..9cc6436 100644
--- a/Code/WMS/WIDESEA_WMSClient/src/views/stock/stockChat.vue
+++ b/Code/WMS/WIDESEA_WMSClient/src/views/stock/stockChat.vue
@@ -59,8 +59,12 @@
import { ref, reactive, onMounted, onUnmounted, watch, getCurrentInstance } from 'vue'
import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
+import * as signalR from '@microsoft/signalr'
const { proxy } = getCurrentInstance()
+
+// SignalR 杩炴帴
+let connection = null
// 棰滆壊甯搁噺
const COLOR_MAP = {
@@ -101,6 +105,39 @@
let locationMesh = null
let locationData = []
let animationId = null
+
+// SignalR 鍒濆鍖�
+function initSignalR() {
+ proxy.http.post('api/User/GetCurrentUserInfo').then((result) => {
+ connection = new signalR.HubConnectionBuilder()
+ .withAutomaticReconnect()
+ .withUrl(`${proxy.http.ipAddress}stockHub?userName=${result.data.userName}`)
+ .build();
+
+ connection.start().catch((err) => console.log('SignalR杩炴帴澶辫触:', err));
+
+ connection.on('StockUpdated', (update) => {
+ // 鏇存柊瀵瑰簲璐т綅鐨勬暟鎹�
+ const idx = locationData.findIndex(x => x.locationId === update.locationId);
+ if (idx !== -1) {
+ locationData[idx].stockQuantity = update.stockQuantity;
+ locationData[idx].stockStatus = update.stockStatus;
+ // 閲嶆柊娓叉煋鍗曚釜璐т綅棰滆壊
+ updateInstanceColor(idx, update.stockStatus);
+ }
+ });
+ });
+}
+
+// 鏇存柊鍗曚釜璐т綅棰滆壊
+function updateInstanceColor(instanceId, stockStatus) {
+ if (!locationMesh) return;
+ const loc = locationData[instanceId];
+ if (!loc) return;
+ const color = getLocationColor(loc);
+ locationMesh.setColorAt(instanceId, new THREE.Color(color));
+ locationMesh.instanceColor.needsUpdate = true;
+}
// 鑾峰彇璐т綅棰滆壊
function getLocationColor(location) {
@@ -386,6 +423,7 @@
onMounted(() => {
initThreeJS()
loadWarehouseList()
+ initSignalR()
window.addEventListener('resize', onWindowResize)
})
@@ -401,6 +439,9 @@
if (renderer) {
renderer.dispose()
}
+ if (connection) {
+ connection.stop()
+ }
})
</script>
--
Gitblit v1.9.3