feat: add snmp oid editor state helpers
This commit is contained in:
@@ -211,6 +211,18 @@ const confirmLoading = ref(false)
|
|||||||
const policyOptions = ref<PolicyOptionItem[]>([])
|
const policyOptions = ref<PolicyOptionItem[]>([])
|
||||||
const roomOptions = ref<RoomOptionItem[]>([])
|
const roomOptions = ref<RoomOptionItem[]>([])
|
||||||
|
|
||||||
|
type SnmpOidEditMode = 'table' | 'json'
|
||||||
|
|
||||||
|
interface SnmpOidRow {
|
||||||
|
oid: string
|
||||||
|
metric_name: string
|
||||||
|
metric_unit: string
|
||||||
|
type: string
|
||||||
|
}
|
||||||
|
|
||||||
|
const snmpOidEditMode = ref<SnmpOidEditMode>('table')
|
||||||
|
const snmpOidRows = ref<SnmpOidRow[]>([])
|
||||||
|
|
||||||
const isEdit = computed(() => !!props.record?.id)
|
const isEdit = computed(() => !!props.record?.id)
|
||||||
|
|
||||||
const formData = reactive({
|
const formData = reactive({
|
||||||
@@ -246,6 +258,53 @@ const rules = {
|
|||||||
device_category: [{ required: true, message: '请选择设备分类' }],
|
device_category: [{ required: true, message: '请选择设备分类' }],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const createEmptySnmpOidRow = (): SnmpOidRow => ({
|
||||||
|
oid: '',
|
||||||
|
metric_name: '',
|
||||||
|
metric_unit: '',
|
||||||
|
type: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
const normalizeSnmpOidRows = (rows: SnmpOidRow[]) =>
|
||||||
|
rows
|
||||||
|
.map((row) => ({
|
||||||
|
oid: row.oid.trim(),
|
||||||
|
metric_name: row.metric_name.trim(),
|
||||||
|
metric_unit: row.metric_unit.trim(),
|
||||||
|
type: row.type.trim(),
|
||||||
|
}))
|
||||||
|
.filter((row) => row.oid || row.metric_name || row.metric_unit || row.type)
|
||||||
|
|
||||||
|
const stringifySnmpOidRows = (rows: SnmpOidRow[]) => {
|
||||||
|
const normalizedRows = normalizeSnmpOidRows(rows)
|
||||||
|
return normalizedRows.length ? JSON.stringify(normalizedRows, null, 2) : ''
|
||||||
|
}
|
||||||
|
|
||||||
|
const parseSnmpOidRows = (raw: string): SnmpOidRow[] => {
|
||||||
|
const text = raw.trim()
|
||||||
|
if (!text) {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
const parsed = JSON.parse(text)
|
||||||
|
if (!Array.isArray(parsed)) {
|
||||||
|
throw new Error('SNMP OID 配置必须是 JSON 数组')
|
||||||
|
}
|
||||||
|
return parsed.map((item) => ({
|
||||||
|
oid: String(item?.oid ?? ''),
|
||||||
|
metric_name: String(item?.metric_name ?? ''),
|
||||||
|
metric_unit: String(item?.metric_unit ?? ''),
|
||||||
|
type: String(item?.type ?? ''),
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
const syncSnmpOidRowsFromJson = () => {
|
||||||
|
snmpOidRows.value = parseSnmpOidRows(formData.snmp_oids || '')
|
||||||
|
}
|
||||||
|
|
||||||
|
const syncSnmpOidJsonFromRows = () => {
|
||||||
|
formData.snmp_oids = stringifySnmpOidRows(snmpOidRows.value)
|
||||||
|
}
|
||||||
|
|
||||||
const loadPolicyOptions = async () => {
|
const loadPolicyOptions = async () => {
|
||||||
try {
|
try {
|
||||||
const response: any = await fetchPolicyOptions({ enabled: true })
|
const response: any = await fetchPolicyOptions({ enabled: true })
|
||||||
|
|||||||
Reference in New Issue
Block a user