From ab389a5a6b329b15a655340ba7b87bce7fd7871d Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期三, 24 十二月 2025 17:16:19 +0800
Subject: [PATCH] 添加新增设备自动生成编码

---
 mes-web/src/views/device/DeviceEditDialog.vue |  110 +++++++++++++++++++++++++-----------------------------
 1 files changed, 51 insertions(+), 59 deletions(-)

diff --git a/mes-web/src/views/device/DeviceEditDialog.vue b/mes-web/src/views/device/DeviceEditDialog.vue
index 088e292..63123c5 100644
--- a/mes-web/src/views/device/DeviceEditDialog.vue
+++ b/mes-web/src/views/device/DeviceEditDialog.vue
@@ -31,12 +31,16 @@
             </el-form-item>
 
             <el-form-item label="璁惧缂栫爜" prop="deviceCode">
-              <el-input
-                v-model="deviceForm.deviceCode"
-                placeholder="璇疯緭鍏ヨ澶囩紪鐮�"
-                maxlength="50"
-                :disabled="isEdit"
-              />
+              <template v-if="isEdit">
+                <el-input
+                  v-model="deviceForm.deviceCode"
+                  maxlength="50"
+                  disabled
+                />
+              </template>
+              <template v-else>
+                <el-tag type="info">淇濆瓨鍚庤嚜鍔ㄧ敓鎴�</el-tag>
+              </template>
             </el-form-item>
 
             <el-form-item label="璁惧绫诲瀷" prop="deviceType">
@@ -50,11 +54,11 @@
               </el-select>
             </el-form-item>
 
-            <el-form-item label="PLC绫诲瀷" prop="plcType">
-              <el-select v-model="deviceForm.plcType" placeholder="閫夋嫨PLC绫诲瀷" style="width: 100%;" clearable>
+            <el-form-item label="閫氳绫诲瀷" prop="plcType">
+              <el-select v-model="deviceForm.plcType" placeholder="閫夋嫨閫氳绫诲瀷" style="width: 100%;" clearable>
                 <el-option label="瑗块棬瀛� S7-1200" value="S1200" />
                 <el-option label="瑗块棬瀛� S7-1500" value="S1500" />
-                <el-option label="Modbus 鎺у埗鍣�" value="MODBUS" />
+                <el-option label="Modbus TCP" value="MODBUS" />
               </el-select>
             </el-form-item>
 
@@ -105,22 +109,7 @@
               />
             </el-form-item>
 
-            <el-form-item label="閫氳鍗忚" prop="protocolType">
-              <el-select 
-                v-model="deviceForm.protocolType" 
-                placeholder="閫夋嫨閫氳鍗忚" 
-                style="width: 100%;"
-                @change="handleProtocolTypeChange"
-              >
-                <el-option label="S7 Communication" value="S7 Communication" />
-                <el-option label="Modbus TCP" value="Modbus TCP" />
-                <el-option label="OPC UA" value="OPC UA" />
-                <el-option label="EtherNet/IP" value="EtherNet/IP" />
-                <el-option label="Profinet" value="Profinet" />
-                <el-option label="鍏朵粬" value="鍏朵粬" />
-              </el-select>
-              <span class="form-tip">S7绯诲垪PLC閫氬父浣跨敤S7 Communication鍗忚</span>
-            </el-form-item>
+
 
             <el-form-item label="瓒呮椂鏃堕棿(绉�)" prop="timeout">
               <el-input-number
@@ -354,7 +343,7 @@
 const deviceTypesLoading = ref(false)
 
 // 璁惧閫昏緫鍙傛暟锛堟牴鎹澶囩被鍨嬪姩鎬佹樉绀猴級
-const deviceLogicParams = reactive({})
+const deviceLogicParams = ref({})
 
 const S7_PLC_TYPES = ['S1200', 'S1500']
 const MODBUS_PLC_TYPES = ['MODBUS']
@@ -388,7 +377,8 @@
   description: '',
   isPrimary: false,
   enabled: true,
-  extraParams: null
+  extraParams: null,
+  projectId: 1
 })
 
 const deviceForm = reactive(getDefaultForm())
@@ -397,14 +387,35 @@
 const isEdit = computed(() => !!props.deviceData)
 
 // 琛ㄥ崟楠岃瘉瑙勫垯
+const validateDeviceCode = async (rule, value, callback) => {
+  if (!value) {
+    // 鍏佽鐣欑┖锛屽悗鍙拌嚜鍔ㄧ敓鎴�
+    return callback()
+  }
+  try {
+    const res = await deviceConfigApi.checkCode(
+      value.trim(),
+      isEdit.value ? props.deviceData?.id : null
+    )
+    if (res?.data === true) {
+      callback(new Error('璁惧缂栫爜宸插瓨鍦紝璇锋洿鎹�'))
+    } else {
+      callback()
+    }
+  } catch (err) {
+    console.error('妫�鏌ヨ澶囩紪鐮佸け璐�', err)
+    callback(new Error('璁惧缂栫爜鏍¢獙澶辫触锛岃绋嶅悗閲嶈瘯'))
+  }
+}
+
 const deviceRules = {
   deviceName: [
     { required: true, message: '璇疯緭鍏ヨ澶囧悕绉�', trigger: 'blur' },
     { min: 1, max: 50, message: '璁惧鍚嶇О闀垮害鍦� 1 鍒� 50 涓瓧绗�', trigger: 'blur' }
   ],
   deviceCode: [
-    { required: true, message: '璇疯緭鍏ヨ澶囩紪鐮�', trigger: 'blur' },
-    { pattern: /^[A-Z0-9_]+$/, message: '璁惧缂栫爜鍙兘鍖呭惈澶у啓瀛楁瘝銆佹暟瀛楀拰涓嬪垝绾�', trigger: 'blur' }
+    { pattern: /^[A-Z0-9_]+$/, message: '璁惧缂栫爜鍙兘鍖呭惈澶у啓瀛楁瘝銆佹暟瀛楀拰涓嬪垝绾�', trigger: 'blur' },
+    { validator: validateDeviceCode, trigger: 'blur' }
   ],
   deviceType: [
     { required: true, message: '璇烽�夋嫨璁惧绫诲瀷', trigger: 'change' }
@@ -423,9 +434,7 @@
   moduleName: [
     { required: true, message: '璇疯緭鍏ユā鍧楀悕绉�', trigger: 'blur' }
   ],
-  protocolType: [
-    { required: true, message: '璇烽�夋嫨閫氳鍗忚', trigger: 'change' }
-  ],
+
   timeout: [
     { required: true, message: '璇疯緭鍏ヨ秴鏃舵椂闂�', trigger: 'blur' },
     { type: 'number', min: 1, max: 300, message: '瓒呮椂鏃堕棿鍦� 1 鍒� 300 绉掍箣闂�', trigger: 'blur' }
@@ -491,21 +500,7 @@
   }
 })
 
-// 澶勭悊閫氳鍗忚鍙樺寲
-const handleProtocolTypeChange = (value) => {
-  if (!deviceForm.plcType || !value) {
-    return
-  }
 
-  if (value !== 'S7 Communication' && S7_PLC_TYPES.includes(deviceForm.plcType)) {
-      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‘')
-  }
-}
 
 // 鏂规硶瀹氫箟
 // 鍔犺浇璁惧绫诲瀷鍒楄〃
@@ -683,15 +678,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 = {}
   }
 }
 
@@ -701,9 +692,7 @@
   deviceFormRef.value?.clearValidate()
   
   // 閲嶇疆璁惧閫昏緫鍙傛暟
-  Object.keys(deviceLogicParams).forEach(key => {
-    delete deviceLogicParams[key]
-  })
+  deviceLogicParams.value = {}
 }
 
 const addConfigParam = () => {
@@ -778,8 +767,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 瀛楃涓�
@@ -806,6 +797,7 @@
       isPrimary: deviceForm.isPrimary,
       enabled: deviceForm.enabled,
       description: deviceForm.description,
+      projectId: deviceForm.projectId,
       configJson: configJsonValue,  // 淇濆瓨閰嶇疆鍙傛暟JSON
       extraParams: JSON.stringify(extraObj)
     }

--
Gitblit v1.8.0