diff --git a/src/views/ops/pages/dc/components/SnmpOidEditor.vue b/src/views/ops/pages/dc/components/SnmpOidEditor.vue
new file mode 100644
index 0000000..4bd1f5c
--- /dev/null
+++ b/src/views/ops/pages/dc/components/SnmpOidEditor.vue
@@ -0,0 +1,343 @@
+
+
+
+
+
SNMP OID配置
+
+
+ {{ editMode === 'table' ? 'JSON' : '表格' }}
+
+
添加
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/ops/pages/dc/device-collect/components/FormDialog.vue b/src/views/ops/pages/dc/device-collect/components/FormDialog.vue
index 389ea3f..9813909 100644
--- a/src/views/ops/pages/dc/device-collect/components/FormDialog.vue
+++ b/src/views/ops/pages/dc/device-collect/components/FormDialog.vue
@@ -140,13 +140,11 @@
-
-
-
+
@@ -194,6 +192,7 @@ import {
} from '@/api/ops/room-device'
import { fetchPolicyOptions, type PolicyOptionItem } from '@/api/ops/alertPolicy'
import { fetchRoomOptions, type RoomOptionItem } from '@/api/ops/room'
+import SnmpOidEditor from '../../components/SnmpOidEditor.vue'
interface Props {
visible: boolean
@@ -207,6 +206,8 @@ const props = withDefaults(defineProps(), {
const emit = defineEmits(['update:visible', 'success'])
const formRef = ref()
+const snmpOidEditorRef = ref>()
+const snmpOidEditorResetKey = ref(0)
const confirmLoading = ref(false)
const policyOptions = ref([])
const roomOptions = ref([])
@@ -309,6 +310,7 @@ watch(
collect_interval: props.record.collect_interval || 60,
policy_ids: props.record.policy_ids || [],
})
+ snmpOidEditorResetKey.value += 1
} else {
Object.assign(formData, {
name: '',
@@ -336,6 +338,7 @@ watch(
collect_interval: 60,
policy_ids: [],
})
+ snmpOidEditorResetKey.value += 1
}
}
}
@@ -370,13 +373,8 @@ const handleOk = async () => {
Message.warning('SNMP v2c 模式下请填写 community')
return
}
- if (formData.snmp_oids?.trim()) {
- try {
- JSON.parse(formData.snmp_oids)
- } catch {
- Message.warning('SNMP OID 配置必须是合法 JSON')
- return
- }
+ if (!snmpOidEditorRef.value?.validate()) {
+ return
}
}
diff --git a/src/views/ops/pages/dc/security/components/FormDialog.vue b/src/views/ops/pages/dc/security/components/FormDialog.vue
index 9524491..912ba8d 100644
--- a/src/views/ops/pages/dc/security/components/FormDialog.vue
+++ b/src/views/ops/pages/dc/security/components/FormDialog.vue
@@ -157,13 +157,11 @@
-
-
-
+
@@ -214,6 +212,7 @@ import type { FormInstance } from '@arco-design/web-vue'
import { createSecurityService, updateSecurityService, SECURITY_TYPE_OPTIONS, type SecurityServiceFormData } from '@/api/ops/security'
import { fetchPolicyOptions, type PolicyOptionItem } from '@/api/ops/alertPolicy'
import { fetchServerList, type ServerItem } from '@/api/ops/server'
+import SnmpOidEditor from '../../components/SnmpOidEditor.vue'
interface Props {
visible: boolean
@@ -227,6 +226,8 @@ const props = withDefaults(defineProps(), {
const emit = defineEmits(['update:visible', 'success'])
const formRef = ref()
+const snmpOidEditorRef = ref>()
+const snmpOidEditorResetKey = ref(0)
const confirmLoading = ref(false)
const policyOptions = ref([])
const serverOptions = ref([])
@@ -336,6 +337,7 @@ watch(
extra: props.record.extra || '',
policy_ids: props.record.policy_ids || [],
})
+ snmpOidEditorResetKey.value += 1
} else {
Object.assign(formData, {
service_identity: '',
@@ -368,6 +370,7 @@ watch(
extra: '',
policy_ids: [],
})
+ snmpOidEditorResetKey.value += 1
}
}
}
@@ -402,13 +405,8 @@ const handleOk = async () => {
Message.warning('SNMP v2c 模式下请填写 community')
return
}
- if (formData.snmp_oids?.trim()) {
- try {
- JSON.parse(formData.snmp_oids)
- } catch {
- Message.warning('SNMP OID配置必须是合法 JSON')
- return
- }
+ if (!snmpOidEditorRef.value?.validate()) {
+ return
}
}
diff --git a/src/views/ops/pages/dc/storage/components/StorageFormDialog.vue b/src/views/ops/pages/dc/storage/components/StorageFormDialog.vue
index 27dc1ed..fc90e7f 100644
--- a/src/views/ops/pages/dc/storage/components/StorageFormDialog.vue
+++ b/src/views/ops/pages/dc/storage/components/StorageFormDialog.vue
@@ -173,13 +173,11 @@
-
-
-
+
@@ -208,6 +206,7 @@ import type { FormInstance } from '@arco-design/web-vue'
import { createStorage, updateStorage } from '@/api/ops/storage'
import type { StorageCreateData, StorageItem } from '@/api/ops/storage'
import { fetchServerList, type ServerItem } from '@/api/ops/server'
+import SnmpOidEditor from '../../components/SnmpOidEditor.vue'
interface Props {
visible: boolean
@@ -221,6 +220,8 @@ const props = withDefaults(defineProps(), {
const emit = defineEmits(['update:visible', 'success'])
const formRef = ref()
+const snmpOidEditorRef = ref>()
+const snmpOidEditorResetKey = ref(0)
const confirmLoading = ref(false)
const serverOptions = ref([])
@@ -297,6 +298,7 @@ watch(
collect_args: props.record.collect_args || '',
collect_interval: props.record.collect_interval || 60,
})
+ snmpOidEditorResetKey.value += 1
} else {
Object.assign(formData, {
name: '',
@@ -328,6 +330,7 @@ watch(
collect_args: '',
collect_interval: 60,
})
+ snmpOidEditorResetKey.value += 1
}
}
}
@@ -362,13 +365,8 @@ const handleOk = async () => {
Message.warning('SNMP v2c 模式下请填写 community')
return
}
- if (formData.snmp_oids?.trim()) {
- try {
- JSON.parse(formData.snmp_oids)
- } catch {
- Message.warning('SNMP OID 配置必须是合法 JSON')
- return
- }
+ if (!snmpOidEditorRef.value?.validate()) {
+ return
}
}