From dad0263459b30dbfa75f06dff062a0c85183517b Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期一, 01 十二月 2025 17:01:51 +0800
Subject: [PATCH] 添加卧转立扫码设备交互逻辑,任务流转

---
 mes-web/src/views/device/DeviceEditDialog.vue |   78 ++++++++++++++++++++++++++++----------
 1 files changed, 57 insertions(+), 21 deletions(-)

diff --git a/mes-web/src/views/device/DeviceEditDialog.vue b/mes-web/src/views/device/DeviceEditDialog.vue
index 494fa61..2845239 100644
--- a/mes-web/src/views/device/DeviceEditDialog.vue
+++ b/mes-web/src/views/device/DeviceEditDialog.vue
@@ -40,11 +40,13 @@
             </el-form-item>
 
             <el-form-item label="璁惧绫诲瀷" prop="deviceType">
-              <el-select v-model="deviceForm.deviceType" placeholder="閫夋嫨璁惧绫诲瀷" style="width: 100%;">
-                <el-option label="澶ц溅璁惧" value="澶ц溅璁惧" />
-                <el-option label="澶х悊鐗囩" value="澶х悊鐗囩" />
-                <el-option label="鍗ц浆绔嬫壂鐮�" value="鍗ц浆绔嬫壂鐮�" />
-                <el-option label="鍗ц浆绔�" value="鍗ц浆绔�" />
+              <el-select v-model="deviceForm.deviceType" placeholder="閫夋嫨璁惧绫诲瀷" style="width: 100%;" :loading="deviceTypesLoading">
+                <el-option 
+                  v-for="type in deviceTypes" 
+                  :key="type" 
+                  :label="type" 
+                  :value="type" 
+                />
               </el-select>
             </el-form-item>
 
@@ -347,8 +349,12 @@
 const testing = ref(false)
 const testResult = ref(null)
 
+// 璁惧绫诲瀷鍒楄〃
+const deviceTypes = ref([])
+const deviceTypesLoading = ref(false)
+
 // 璁惧閫昏緫鍙傛暟锛堟牴鎹澶囩被鍨嬪姩鎬佹樉绀猴級
-const deviceLogicParams = reactive({})
+const deviceLogicParams = ref({})
 
 const S7_PLC_TYPES = ['S1200', 'S1500']
 const MODBUS_PLC_TYPES = ['MODBUS']
@@ -447,6 +453,8 @@
 watch(() => props.modelValue, (newVal) => {
   dialogVisible.value = newVal
   if (newVal) {
+    // 鍔犺浇璁惧绫诲瀷鍒楄〃
+    loadDeviceTypes()
     if (isEdit.value && props.deviceData) {
       loadDeviceData(props.deviceData)
     } else {
@@ -490,9 +498,9 @@
   }
 
   if (value !== 'S7 Communication' && S7_PLC_TYPES.includes(deviceForm.plcType)) {
-    ElMessage.warning('S7绯诲垪PLC閫氬父浣跨敤S7 Communication鍗忚锛岃纭鍗忚閫夋嫨鏄惁姝g‘')
+      ElMessage.warning('S7绯诲垪PLC閫氬父浣跨敤S7 Communication鍗忚锛岃纭鍗忚閫夋嫨鏄惁姝g‘')
     return
-  }
+    }
 
   if (value !== 'Modbus TCP' && MODBUS_PLC_TYPES.includes(deviceForm.plcType)) {
     ElMessage.warning('Modbus 绫诲瀷PLC閫氬父浣跨敤 Modbus TCP 鍗忚锛岃纭鍗忚閫夋嫨鏄惁姝g‘')
@@ -500,6 +508,38 @@
 }
 
 // 鏂规硶瀹氫箟
+// 鍔犺浇璁惧绫诲瀷鍒楄〃
+const loadDeviceTypes = async () => {
+  if (deviceTypes.value.length > 0) {
+    // 濡傛灉宸茬粡鍔犺浇杩囷紝涓嶅啀閲嶅鍔犺浇
+    return
+  }
+  // 鎵�鏈夋敮鎸佺殑璁惧绫诲瀷锛堢‘淇濆寘鍚墍鏈夋湁閰嶇疆缁勪欢鐨勭被鍨嬶級
+  const supportedTypes = ['澶ц溅璁惧', '澶х悊鐗囩', '鍗ц浆绔嬫壂鐮�', '鍗ц浆绔�']
+  
+  try {
+    deviceTypesLoading.value = true
+    const res = await deviceConfigApi.getDeviceTypes()
+    if (res?.data && Array.isArray(res.data)) {
+      // 鍚堝苟鏁版嵁搴撲腑鐨勭被鍨嬪拰鏀寔鐨勭被鍨嬶紝鍘婚噸骞舵帓搴�
+      const dbTypes = res.data
+      const allTypes = [...new Set([...supportedTypes, ...dbTypes])].sort()
+      deviceTypes.value = allTypes
+    } else {
+      // 濡傛灉API杩斿洖澶辫触锛屼娇鐢ㄩ粯璁ょ被鍨�
+      deviceTypes.value = supportedTypes
+      console.warn('鑾峰彇璁惧绫诲瀷鍒楄〃澶辫触锛屼娇鐢ㄩ粯璁ょ被鍨�')
+    }
+  } catch (error) {
+    console.error('鍔犺浇璁惧绫诲瀷鍒楄〃澶辫触:', error)
+    // 澶辫触鏃朵娇鐢ㄩ粯璁ょ被鍨�
+    deviceTypes.value = supportedTypes
+    ElMessage.warning('鍔犺浇璁惧绫诲瀷鍒楄〃澶辫触锛屼娇鐢ㄩ粯璁ょ被鍨�')
+  } finally {
+    deviceTypesLoading.value = false
+  }
+}
+
 const parseJsonSafe = (str, defaultValue = null) => {
   if (!str) return defaultValue
   try {
@@ -643,15 +683,11 @@
 }
 
 // 鍔犺浇璁惧閫昏緫鍙傛暟
-const loadDeviceLogicParams = (deviceLogic, deviceType) => {
-  // 娓呯┖鐜版湁鍙傛暟
-  Object.keys(deviceLogicParams).forEach(key => {
-    delete deviceLogicParams[key]
-  })
-  
-  // 鏍规嵁璁惧绫诲瀷鍔犺浇瀵瑰簲鐨勫弬鏁�
+const loadDeviceLogicParams = (deviceLogic) => {
   if (deviceLogic && Object.keys(deviceLogic).length > 0) {
-    Object.assign(deviceLogicParams, deviceLogic)
+    deviceLogicParams.value = { ...deviceLogic }
+  } else {
+    deviceLogicParams.value = {}
   }
 }
 
@@ -661,9 +697,7 @@
   deviceFormRef.value?.clearValidate()
   
   // 閲嶇疆璁惧閫昏緫鍙傛暟
-  Object.keys(deviceLogicParams).forEach(key => {
-    delete deviceLogicParams[key]
-  })
+  deviceLogicParams.value = {}
 }
 
 const addConfigParam = () => {
@@ -738,8 +772,10 @@
   }
 
     // 淇濆瓨璁惧閫昏緫鍙傛暟锛堢洿鎺ヤ娇鐢╠eviceLogicParams锛岀敱鍚勪釜閰嶇疆缁勪欢绠$悊锛�
-    if (deviceLogicParams && Object.keys(deviceLogicParams).length > 0) {
-      extraObj.deviceLogic = { ...deviceLogicParams }
+    if (deviceLogicParams.value && Object.keys(deviceLogicParams.value).length > 0) {
+      extraObj.deviceLogic = { ...deviceLogicParams.value }
+    } else {
+      delete extraObj.deviceLogic
     }
 
     // 鏋勫缓 configJson锛氬皢 configParams 鏁扮粍杞崲涓� JSON 瀛楃涓�

--
Gitblit v1.8.0