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