From 14763d895151f3ddad09906f2233057b8b967881 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期五, 19 十二月 2025 17:06:18 +0800
Subject: [PATCH] 添加plc通讯协议工厂,支持后续多种plc协议

---
 mes-web/src/views/device/DeviceGroupEditDialog.vue |   98 ++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 85 insertions(+), 13 deletions(-)

diff --git a/mes-web/src/views/device/DeviceGroupEditDialog.vue b/mes-web/src/views/device/DeviceGroupEditDialog.vue
index 6f360bc..bd0d586 100644
--- a/mes-web/src/views/device/DeviceGroupEditDialog.vue
+++ b/mes-web/src/views/device/DeviceGroupEditDialog.vue
@@ -1,11 +1,10 @@
 <template>
   <el-dialog
-    :visible="visible"
+    v-model="dialogVisible"
     :title="title"
     width="70%"
     :close-on-click-modal="false"
     @close="handleClose"
-    @update:visible="(val) => emit('update:visible', val)"
   >
     <el-form
       ref="formRef"
@@ -51,10 +50,9 @@
             
             <el-form-item label="缁勭被鍨�" prop="groupType">
               <el-select v-model="form.groupType" placeholder="閫夋嫨缁勭被鍨�">
-                <el-option label="璁惧缁�" value="璁惧缁�" />
-                <el-option label="绠$悊缁�" value="绠$悊缁�" />
-                <el-option label="鐩戞帶缁�" value="鐩戞帶缁�" />
-                <el-option label="缁存姢缁�" value="缁存姢缁�" />
+                <el-option label="鐢熶骇绾�" value="鐢熶骇绾�" />
+                <el-option label="娴嬭瘯绾�" value="娴嬭瘯绾�" />
+                <el-option label="杈呭姪璁惧缁�" value="杈呭姪璁惧缁�" />
               </el-select>
             </el-form-item>
             
@@ -93,7 +91,16 @@
               <el-select v-model="form.groupStatus" placeholder="閫夋嫨缁勭姸鎬�">
                 <el-option label="鍚敤" value="ENABLED" />
                 <el-option label="绂佺敤" value="DISABLED" />
+                <el-option label="缁存姢涓�" value="MAINTENANCE" />
               </el-select>
+            </el-form-item>
+            
+            <el-form-item label="鎵ц妯″紡" prop="executionMode">
+              <el-radio-group v-model="form.executionMode">
+                <el-radio label="SERIAL">涓茶鎵ц</el-radio>
+                <el-radio label="PARALLEL">骞惰鎵ц</el-radio>
+              </el-radio-group>
+              <div class="form-tip">涓茶锛氭寜椤哄簭渚濇鎵ц璁惧鎿嶄綔锛涘苟琛岋細鍚屾椂鎵ц澶氫釜璁惧鎿嶄綔</div>
             </el-form-item>
             
             <el-form-item label="鏈�澶ц澶囨暟" prop="maxDeviceCount">
@@ -348,16 +355,23 @@
 const testing = ref(false)
 const saving = ref(false)
 const validationResult = ref(null)
+
+// 浣跨敤璁$畻灞炴�ф潵鍚屾 visible prop 鍜屽唴閮� dialogVisible
+const dialogVisible = computed({
+  get: () => props.visible,
+  set: (val) => emit('update:visible', val)
+})
 const customParamsText = ref('')
 
 // 琛ㄥ崟鏁版嵁
 const form = reactive({
   groupName: '',
   groupCode: '',
-  groupType: '璁惧缁�',
+  groupType: '鐢熶骇绾�',
   description: '',
   sortOrder: 0,
   groupStatus: 'ENABLED',
+  executionMode: 'SERIAL', // 鎵ц妯″紡锛歋ERIAL涓茶 / PARALLEL骞惰
   maxDeviceCount: 100,
   heartbeatInterval: 30,
   connectionTimeout: 10,
@@ -435,17 +449,18 @@
       }
     })
   }
-})
+}, { immediate: true })
 
 // 鏂规硶瀹氫箟
 const resetForm = () => {
   Object.assign(form, {
     groupName: '',
     groupCode: '',
-    groupType: '璁惧缁�',
+    groupType: '鐢熶骇绾�',
     description: '',
     sortOrder: 0,
     groupStatus: 'ENABLED',
+    executionMode: 'SERIAL',
     maxDeviceCount: 100,
     heartbeatInterval: 30,
     connectionTimeout: 10,
@@ -471,13 +486,31 @@
 const loadFormData = () => {
   if (!props.data) return
   
+  // 杞崲鍚庣鐘舵�佸瓧娈靛埌鍓嶇鏍煎紡
+  // 鍚庣 status: 0=鍋滅敤, 1=鍚敤, 2=缁存姢涓�
+  // 鍓嶇 groupStatus: "ENABLED"/"DISABLED"/"MAINTENANCE"
+  let groupStatus = 'ENABLED'
+  if (props.data.status !== undefined) {
+    // 浼樺厛浣跨敤鍚庣鐨� status 瀛楁
+    if (props.data.status === 1) {
+      groupStatus = 'ENABLED'
+    } else if (props.data.status === 2) {
+      groupStatus = 'MAINTENANCE'
+    } else {
+      groupStatus = 'DISABLED'
+    }
+  } else if (props.data.groupStatus) {
+    // 鍏煎鍓嶇宸叉湁鐨� groupStatus 瀛楁
+    groupStatus = props.data.groupStatus
+  }
+  
   Object.assign(form, {
     groupName: props.data.groupName || '',
     groupCode: props.data.groupCode || '',
-    groupType: props.data.groupType || '璁惧缁�',
+    groupType: props.data.groupType || '鐢熶骇绾�',
     description: props.data.description || '',
     sortOrder: props.data.sortOrder || 0,
-    groupStatus: props.data.groupStatus || 'ENABLED',
+    groupStatus: groupStatus,
     maxDeviceCount: props.data.maxDeviceCount || 100,
     heartbeatInterval: props.data.heartbeatInterval || 30,
     connectionTimeout: props.data.connectionTimeout || 10,
@@ -493,8 +526,24 @@
     logLevel: props.data.logLevel || 'INFO',
     enableAutoBackup: props.data.enableAutoBackup || false,
     backupInterval: props.data.backupInterval || 24,
-    customParams: props.data.customParams || {}
+    customParams: props.data.customParams || props.data.extraConfig ? (typeof props.data.extraConfig === 'string' ? JSON.parse(props.data.extraConfig) : props.data.extraConfig) : {}
   })
+  
+  // 浠巆ustomParams鎴杄xtraConfig涓鍙杄xecutionMode
+  let executionMode = 'SERIAL' // 榛樿涓茶
+  if (form.customParams && form.customParams.executionMode) {
+    executionMode = form.customParams.executionMode
+  } else if (props.data.extraConfig) {
+    try {
+      const extraConfig = typeof props.data.extraConfig === 'string' ? JSON.parse(props.data.extraConfig) : props.data.extraConfig
+      if (extraConfig.executionMode) {
+        executionMode = extraConfig.executionMode
+      }
+    } catch (e) {
+      console.warn('瑙f瀽extraConfig澶辫触:', e)
+    }
+  }
+  form.executionMode = executionMode
   
   customParamsText.value = JSON.stringify(form.customParams, null, 2)
 }
@@ -595,10 +644,33 @@
       return
     }
     
+    // 杞崲鍓嶇鐘舵�佸瓧娈靛埌鍚庣鏍煎紡
+    // 鍓嶇 groupStatus: "ENABLED"/"DISABLED"/"MAINTENANCE"
+    // 鍚庣 status: 0=鍋滅敤, 1=鍚敤, 2=缁存姢涓�
+    let status = 1 // 榛樿鍚敤
+    if (form.groupStatus === 'ENABLED') {
+      status = 1
+    } else if (form.groupStatus === 'MAINTENANCE') {
+      status = 2
+    } else {
+      status = 0
+    }
+    
+    // 灏唀xecutionMode淇濆瓨鍒癱ustomParams涓紝浠ヤ究鍚庣浠巈xtraConfig涓鍙�
+    const customParams = {
+      ...form.customParams,
+      executionMode: form.executionMode
+    }
+    
     const config = {
       ...form,
-      customParams: form.customParams
+      status: status, // 鍚庣闇�瑕佺殑 status 瀛楁
+      customParams: customParams,
+      extraConfig: JSON.stringify(customParams) // 鍚庣浣跨敤extraConfig瀛楁
     }
+    // 绉婚櫎鍓嶇涓撶敤鐨� groupStatus 鍜� executionMode 瀛楁锛岄伩鍏嶅悗绔贩娣�
+    delete config.groupStatus
+    delete config.executionMode
     
     const response = isEdit.value
       ? await deviceGroupApi.update(props.data.id, config)

--
Gitblit v1.8.0