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 @@ + + + + + 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 } }