Compare commits

...

2 Commits

Author SHA1 Message Date
yangsy
cdf778df93 feat: 扩展交换机端口诊断信息 2025-12-26 15:32:09 +08:00
yangsy
8761b5e45e feat: 当下游设备不存在时自动解除关联
- 获取下游设备时,如果发现下游设备不存在,将静默解除关联
2025-12-26 15:32:08 +08:00
3 changed files with 51 additions and 8 deletions

View File

@@ -19,4 +19,12 @@ export interface NdmSwitchPortInfo {
outFlow: number; outFlow: number;
portName: string; portName: string;
upDown: number; upDown: number;
lastChangeTime: string;
opticalTemperature: number;
opticalVoltage: number;
opticalBiasCurrent: number;
opticalReceivePower: number;
opticalTransmitPower: number;
} }

View File

@@ -144,9 +144,24 @@ const getLowerDeviceByCircuitIndex = (circuitIndex: number) => {
const stationDevices = lineDevices.value[stationCode]; const stationDevices = lineDevices.value[stationCode];
if (!stationDevices) return null; if (!stationDevices) return null;
const devices = stationDevices[deviceType]; const devices = stationDevices[deviceType];
const device = devices.find((device) => device.id === deviceDbId); const lowerDevice = devices.find((device) => device.id === deviceDbId);
if (!device) return null; if (!lowerDevice) {
return device; // 下游设备不存在时解除关联
const modifiedUpperDevice = cloneDeep(ndmDevice.value);
const modifiedUpperLinkDescription = cloneDeep(upperDeviceLinkDescription.value);
delete modifiedUpperLinkDescription.downstream?.[circuitIndex];
modifiedUpperDevice.linkDescription = JSON.stringify(modifiedUpperLinkDescription);
// 不需要等待异步
const stationCode = station.value.code;
updateDeviceApi(modifiedUpperDevice, { stationCode }).then(() => {
detailDeviceApi(modifiedUpperDevice, { stationCode }).then((upperDevice) => {
if (!upperDevice) return;
deviceStore.patchDevice(stationCode, { ...upperDevice });
});
});
return null;
}
return lowerDevice;
}; };
// 获取从父组件注入的selectDevice函数 // 获取从父组件注入的selectDevice函数

View File

@@ -84,19 +84,33 @@ const upperDeviceLinkDescription = computed(() => {
}); });
const getLowerDeviceByPort = (port: NdmSwitchPortInfo) => { const getLowerDeviceByPort = (port: NdmSwitchPortInfo) => {
const portName = port.portName;
if (!upperDeviceLinkDescription.value) return null; if (!upperDeviceLinkDescription.value) return null;
const downstream = upperDeviceLinkDescription.value.downstream; const downstream = upperDeviceLinkDescription.value.downstream;
if (!downstream) return null; if (!downstream) return null;
const deviceStoreIndex = downstream[portName]; const deviceStoreIndex = downstream[port.portName];
if (!deviceStoreIndex) return null; if (!deviceStoreIndex) return null;
const { stationCode, deviceType, deviceDbId } = deviceStoreIndex; const { stationCode, deviceType, deviceDbId } = deviceStoreIndex;
const stationDevices = lineDevices.value[stationCode]; const stationDevices = lineDevices.value[stationCode];
if (!stationDevices) return null; if (!stationDevices) return null;
const devices = stationDevices[deviceType]; const devices = stationDevices[deviceType];
const device = devices.find((device) => device.id === deviceDbId); const lowerDevice = devices.find((device) => device.id === deviceDbId);
if (!device) return null; if (!lowerDevice) {
return device; // 下游设备不存在时解除关联
const modifiedUpperDevice = cloneDeep(ndmDevice.value);
const modifiedUpperLinkDescription = cloneDeep(upperDeviceLinkDescription.value);
delete modifiedUpperLinkDescription.downstream?.[port.portName];
modifiedUpperDevice.linkDescription = JSON.stringify(modifiedUpperLinkDescription);
// 不需要等待异步
const stationCode = station.value.code;
updateDeviceApi(modifiedUpperDevice, { stationCode }).then(() => {
detailDeviceApi(modifiedUpperDevice, { stationCode }).then((upperDevice) => {
if (!upperDevice) return;
deviceStore.patchDevice(stationCode, { ...upperDevice });
});
});
return null;
}
return lowerDevice;
}; };
// 获取从父组件注入的selectDevice函数 // 获取从父组件注入的selectDevice函数
@@ -263,9 +277,15 @@ onBeforeUnmount(() => {
<NDescriptions bordered size="small" label-placement="left" :column="1"> <NDescriptions bordered size="small" label-placement="left" :column="1">
<NDescriptionsItem label="端口名称">{{ port.portName }}</NDescriptionsItem> <NDescriptionsItem label="端口名称">{{ port.portName }}</NDescriptionsItem>
<NDescriptionsItem label="状态">{{ getPortStatusValue(port) }}</NDescriptionsItem> <NDescriptionsItem label="状态">{{ getPortStatusValue(port) }}</NDescriptionsItem>
<NDescriptionsItem label="状态变更时间">{{ port.lastChangeTime.replace('days', '天') }} </NDescriptionsItem>
<NDescriptionsItem label="上行速率">{{ transformPortSpeed(port, 'in') }}</NDescriptionsItem> <NDescriptionsItem label="上行速率">{{ transformPortSpeed(port, 'in') }}</NDescriptionsItem>
<NDescriptionsItem label="下行速率">{{ transformPortSpeed(port, 'out') }}</NDescriptionsItem> <NDescriptionsItem label="下行速率">{{ transformPortSpeed(port, 'out') }}</NDescriptionsItem>
<NDescriptionsItem label="总速率">{{ transformPortSpeed(port, 'total') }}</NDescriptionsItem> <NDescriptionsItem label="总速率">{{ transformPortSpeed(port, 'total') }}</NDescriptionsItem>
<NDescriptionsItem v-if="port.opticalTemperature >= 0" label="光模块温度">{{ port.opticalTemperature }} </NDescriptionsItem>
<NDescriptionsItem v-if="port.opticalVoltage >= 0" label="光模块电压">{{ port.opticalVoltage }} mV</NDescriptionsItem>
<NDescriptionsItem v-if="port.opticalBiasCurrent >= 0" label="光模块偏置电流">{{ port.opticalBiasCurrent }} μA</NDescriptionsItem>
<NDescriptionsItem v-if="port.opticalReceivePower >= 0" label="光模块接收功率">{{ port.opticalReceivePower / 100 }} dBm</NDescriptionsItem>
<NDescriptionsItem v-if="port.opticalTransmitPower >= 0" label="光模块发送功率">{{ port.opticalTransmitPower / 100 }} dBm</NDescriptionsItem>
<NDescriptionsItem label="关联设备"> <NDescriptionsItem label="关联设备">
<span v-if="getLowerDeviceByPort(port)" style="text-decoration: underline; cursor: pointer" @click="() => navigateToLowerDevice(port)"> <span v-if="getLowerDeviceByPort(port)" style="text-decoration: underline; cursor: pointer" @click="() => navigateToLowerDevice(port)">
{{ getLowerDeviceByPort(port)?.name || '-' }} {{ getLowerDeviceByPort(port)?.name || '-' }}