From f8e6d6060c186b57559012a3f015f89f89c901cf Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 31 Jan 2024 12:11:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=9C=8B=E6=9D=BFIMS=E4=BC=9A=E8=AF=9D?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/overview/hooks/useTopology.ts | 6 ++ src/views/dashboard/overview/index.vue | 58 ++++++++++++------- 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/src/views/dashboard/overview/hooks/useTopology.ts b/src/views/dashboard/overview/hooks/useTopology.ts index 7610f561..63a5ffd4 100644 --- a/src/views/dashboard/overview/hooks/useTopology.ts +++ b/src/views/dashboard/overview/hooks/useTopology.ts @@ -64,6 +64,9 @@ export const graphNodeStateNum = computed(() => { return [normal, abnormal]; }); +/**网元状态请求标记 */ +export const neStateRequestMap = ref>(new Map()); + /**neStateParse 网元状态 数据解析 */ export function neStateParse(neType: string, data: Record) { const { combos, edges, nodes } = graphState.data; @@ -151,4 +154,7 @@ export function neStateParse(neType: string, data: Record) { graphG6.value.setItemState(edge.id, 'line-path', neT.neState.online); } } + + // 请求标记复位 + neStateRequestMap.value.set(neType, false); } diff --git a/src/views/dashboard/overview/index.vue b/src/views/dashboard/overview/index.vue index 555f998f..474a2d65 100644 --- a/src/views/dashboard/overview/index.vue +++ b/src/views/dashboard/overview/index.vue @@ -7,7 +7,8 @@ import UserActivity from './components/UserActivity/index.vue'; import AlarnTypeBar from './components/AlarnTypeBar/index.vue'; import UPFFlow from './components/UPFFlow/index.vue'; import { listSub } from '@/api/neUser/sub'; -import { listUENum } from '@/api/neUser/ue'; +import { listUENumBySMF } from '@/api/neUser/smf'; +import { listUENumByIMS } from '@/api/neUser/ims'; import { listBase5G } from '@/api/neUser/base5G'; import { @@ -15,12 +16,14 @@ import { graphState, notNeNodes, graphNodeStateNum, + neStateRequestMap, } from './hooks/useTopology'; import { upfTotalFlow, upfTFActive } from './hooks/useUPFTotalFlow'; import { useFullscreen } from '@vueuse/core'; import useWS from './hooks/useWS'; import useAppStore from '@/store/modules/app'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; + const appStore = useAppStore(); const { t } = useI18n(); const { wsSend, cdrEventSend, ueEventSend, upfTFSend } = useWS(); @@ -29,15 +32,18 @@ const { wsSend, cdrEventSend, ueEventSend, upfTFSend } = useWS(); let onlineInfo: { /**签约用户数量 */ subNum: number; - /**在线用户数 */ - ueNum: any; + /**SMF在线用户数 */ + smfUeNum: number; + /**IMS在线用户数 */ + imsUeNum: number; /**基站数量 */ nbNum: number; /**原始严重程度 */ activeAlarmSeverity: DictType[]; } = reactive({ subNum: 0, - ueNum: 0, + smfUeNum: 0, + imsUeNum: 0, nbNum: 0, activeAlarmSeverity: [], }); @@ -53,13 +59,17 @@ const stateInterval = ref(null); const stateTimeout = ref(null); /**查询网元状态 */ -async function fnGetState() { +function fnGetState() { clearTimeout(stateTimeout.value); // 获取节点状态 for (const node of graphState.data.nodes) { if (notNeNodes.includes(node.id)) continue; const { neType, neId } = node.neInfo; if (!neType || !neId) continue; + // 请求标记检查避免重复发送 + if (neStateRequestMap.value.get(neType)) continue; + neStateRequestMap.value.set(neType, true); + wsSend({ requestId: `neState_${neType}_${neId}`, type: 'ne_state', @@ -70,7 +80,7 @@ async function fnGetState() { }); } - // stateTimeout.value = setTimeout(() => fnGetState(), 5_000); + stateTimeout.value = setTimeout(() => fnGetState(), 5_000); } /**初始数据函数 */ @@ -110,7 +120,8 @@ onMounted(() => { /**每页条数 */ pageSize: 20, }), - listUENum('001'), + listUENumBySMF('001'), + listUENumByIMS('001'), ]) .then(resArr => { if (resArr[0].status === 'fulfilled') { @@ -125,11 +136,18 @@ onMounted(() => { onlineInfo.nbNum = resArr[1].value.rows.length; } - if ( - resArr[2].status === 'fulfilled' && - resArr[2].value?.code === RESULT_CODE_SUCCESS - ) { - onlineInfo.ueNum = resArr[2].value?.data; + if (resArr[2].status === 'fulfilled') { + const res = resArr[2].value; + if (res.code === RESULT_CODE_SUCCESS) { + onlineInfo.smfUeNum = res.data; + } + } + + if (resArr[3].status === 'fulfilled') { + const res = resArr[3].value; + if (res.code === RESULT_CODE_SUCCESS) { + onlineInfo.imsUeNum = res.data; + } } }) .finally(() => { @@ -177,19 +195,19 @@ onBeforeUnmount(() => {
-

{{ onlineInfo.ueNum }}

- - - Data {{ t('views.dashboard.overview.skim.session') }} - -
-
-

0

+

{{ onlineInfo.imsUeNum }}

IMS {{ t('views.dashboard.overview.skim.session') }}
+
+

{{ onlineInfo.smfUeNum }}

+ + + Data {{ t('views.dashboard.overview.skim.session') }} + +