From 15ab2908be2562be622184a13a267354ed1d0604 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 30 Jan 2024 15:22:22 +0800 Subject: [PATCH 01/11] =?UTF-8?q?feat:=20=E7=9C=8B=E6=9D=BF=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=A1=8C=E4=B8=BA=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/locales/en-US.ts | 17 +- src/i18n/locales/zh-CN.ts | 17 +- .../overview/components/CDREvent/index.vue | 134 --------- .../overview/components/UEEvent/index.vue | 128 --------- .../components/UserActivity/index.vue | 264 ++++++++++++++++++ .../dashboard/overview/hooks/useCDREvent.ts | 33 --- .../dashboard/overview/hooks/useUEEvent.ts | 54 ---- .../overview/hooks/useUserActivity.ts | 66 +++++ src/views/dashboard/overview/hooks/useWS.ts | 62 ++-- src/views/dashboard/overview/index.vue | 44 ++- 10 files changed, 392 insertions(+), 427 deletions(-) delete mode 100644 src/views/dashboard/overview/components/CDREvent/index.vue delete mode 100644 src/views/dashboard/overview/components/UEEvent/index.vue create mode 100644 src/views/dashboard/overview/components/UserActivity/index.vue delete mode 100644 src/views/dashboard/overview/hooks/useCDREvent.ts delete mode 100644 src/views/dashboard/overview/hooks/useUEEvent.ts create mode 100644 src/views/dashboard/overview/hooks/useUserActivity.ts diff --git a/src/i18n/locales/en-US.ts b/src/i18n/locales/en-US.ts index 2d117895..6d983481 100644 --- a/src/i18n/locales/en-US.ts +++ b/src/i18n/locales/en-US.ts @@ -518,18 +518,15 @@ export default { topology: { title: "Network Topology", }, - cdrEvent: { - title: "CDR User Activity", - id: "Serial", + userActivity: { + title: "User Activity", type: "Type", - msg: "Info", + duration: "Duration", + caller: "Caller", + called: "Called", + result: "Result", + time: "Time", }, - ueEvent: { - title: "UE User Activity", - id: "IMSI", - type: "Type", - msg: "Info", - } }, }, neUser: { diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index ad1a21f2..9ecb864b 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -518,18 +518,15 @@ export default { topology: { title: "网络拓扑", }, - cdrEvent: { - title: "CDR用户活动", - id: "编号", + userActivity: { + title: "用户活动", type: "类型", - msg: "信息", + duration: "时长", + caller: "主叫", + called: "被叫", + result: "结果", + time: "时间", }, - ueEvent: { - title: "UE用户活动", - id: "IMSI", - type: "类型", - msg: "信息", - } } }, neUser: { diff --git a/src/views/dashboard/overview/components/CDREvent/index.vue b/src/views/dashboard/overview/components/CDREvent/index.vue deleted file mode 100644 index d53cf34c..00000000 --- a/src/views/dashboard/overview/components/CDREvent/index.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - - - diff --git a/src/views/dashboard/overview/components/UEEvent/index.vue b/src/views/dashboard/overview/components/UEEvent/index.vue deleted file mode 100644 index be9d59ba..00000000 --- a/src/views/dashboard/overview/components/UEEvent/index.vue +++ /dev/null @@ -1,128 +0,0 @@ - - - - - diff --git a/src/views/dashboard/overview/components/UserActivity/index.vue b/src/views/dashboard/overview/components/UserActivity/index.vue new file mode 100644 index 00000000..a1b610c7 --- /dev/null +++ b/src/views/dashboard/overview/components/UserActivity/index.vue @@ -0,0 +1,264 @@ + + + + + diff --git a/src/views/dashboard/overview/hooks/useCDREvent.ts b/src/views/dashboard/overview/hooks/useCDREvent.ts deleted file mode 100644 index bf516514..00000000 --- a/src/views/dashboard/overview/hooks/useCDREvent.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { ref } from 'vue'; - -/**事件数据 */ -export const cdrEventData = ref[]>([]); - -/**事件总量 */ -export const cdrEventTotal = ref(0); - -/**事件推送id */ -export const cdrEventId = ref(''); - -/**cdrEvent CDR会话事件 数据解析 */ -export function cdrEventParse(item: Record) { - let evData: Record = item.cdrJSON || item.CDR; - if (typeof evData === 'string') { - try { - evData = JSON.parse(evData); - } catch (error) { - console.error(error); - return false; - } - } - - if (evData.recordType === 'CALL') { - return { - id: item.id || item.timestamp, - type: evData.recordType, - time: evData.callDuration, - call: evData.callReference, - msg: `${evData.calledParty} -> ${evData.callerParty}`, - }; - } -} diff --git a/src/views/dashboard/overview/hooks/useUEEvent.ts b/src/views/dashboard/overview/hooks/useUEEvent.ts deleted file mode 100644 index 7bbe4862..00000000 --- a/src/views/dashboard/overview/hooks/useUEEvent.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { ref } from 'vue'; - -/**事件数据 */ -export const ueEventData = ref[]>([]); - -/**事件总量 */ -export const ueEventTotal = ref(0); - -/**事件推送id */ -export const ueEventId = ref(''); - -/**ueEvent UE会话事件 数据解析 */ -export function ueEventParse(item: Record) { - let evData: Record = item.eventJSON; - if (typeof evData === 'string') { - try { - evData = JSON.parse(evData); - } catch (error) { - console.error(error); - } - } - - if (item.eventType === 'auth-result') { - return { - id: item.id || item.timestamp, - type: item.eventType, - time: evData.authTime, - imsi: evData.imsi, - msg: `${evData.authMessage}`, - }; - } - - if (item.eventType === 'detach') { - return { - id: item.id || item.timestamp, - type: item.eventType, - time: evData.detachTime, - imsi: evData.imsi, - msg: `${evData.detachResult}`, - }; - } - - if (item.eventType === 'cm-state') { - return { - id: item.id || item.timestamp, - type: item.eventType, - time: evData.changeTime, - imsi: evData.imsi, - msg: `${evData.onlineNumber}`, - }; - } - - return false; -} diff --git a/src/views/dashboard/overview/hooks/useUserActivity.ts b/src/views/dashboard/overview/hooks/useUserActivity.ts new file mode 100644 index 00000000..3652edb4 --- /dev/null +++ b/src/views/dashboard/overview/hooks/useUserActivity.ts @@ -0,0 +1,66 @@ +import { ref } from 'vue'; + +/**UE事件数据 */ +export const ueEventData = ref[]>([]); + +/**UE事件总量 */ +export const ueEventTotal = ref(0); + +/**UE事件推送id */ +export const ueEventId = ref(''); + +/**ueEvent UE会话事件 数据解析 */ +export function ueEventParse(item: Record) { + let evData: Record = item.eventJSON; + if (typeof evData === 'string') { + try { + evData = JSON.parse(evData); + } catch (error) { + console.error(error); + } + } + + return { + eType: 'ue', + eId: `ue_${item.timestamp}`, + id: item.id, + type: item.eventType, + data: evData, + }; +} + +/**CDR事件数据 */ +export const cdrEventData = ref[]>([]); + +/**CDR事件总量 */ +export const cdrEventTotal = ref(0); + +/**CDR事件推送id */ +export const cdrEventId = ref(''); + +/**cdrEvent CDR会话事件 数据解析 */ +export function cdrEventParse(item: Record) { + let evData: Record = item.cdrJSON || item.CDR; + if (typeof evData === 'string') { + try { + evData = JSON.parse(evData); + } catch (error) { + console.error(error); + return false; + } + } + + return { + eType: 'cdr', + eId: `cdr_${item.timestamp}`, + id: item.id, + data: evData, + }; +} + +/**CDR+UE事件数据 */ +export const eventData = ref[]>([]); +/**CDR+UE事件总量 */ +export const eventTotal = ref(0); +/**CDR/UE事件推送id */ +export const eventId = ref(''); diff --git a/src/views/dashboard/overview/hooks/useWS.ts b/src/views/dashboard/overview/hooks/useWS.ts index a9deb43c..073594ee 100644 --- a/src/views/dashboard/overview/hooks/useWS.ts +++ b/src/views/dashboard/overview/hooks/useWS.ts @@ -2,17 +2,12 @@ import { RESULT_CODE_ERROR } from '@/constants/result-constants'; import { OptionsType, WS } from '@/plugins/ws-websocket'; import { onBeforeUnmount, onMounted } from 'vue'; import { - ueEventData, - ueEventId, - ueEventTotal, ueEventParse, -} from './useUEEvent'; -import { - cdrEventData, - cdrEventTotal, - cdrEventId, cdrEventParse, -} from './useCDREvent'; + eventData, + eventTotal, + eventId, +} from './useUserActivity'; import { upfTotalFlow, upfTFParse } from './useUPFTotalFlow'; import { neStateParse } from './useTopology'; @@ -28,21 +23,20 @@ export default function useWS() { /**接收数据后回调 */ function wsError(ev: any) { // 接收数据后回调 - console.log(ev); + console.error(ev); } /**接收数据后回调 */ function wsMessage(res: Record) { - console.log(res); + // console.log(res); const { code, requestId, data } = res; if (code === RESULT_CODE_ERROR) { console.warn(res.msg); return; } - if (!requestId) return; - + // 网元状态 - if (requestId.startsWith('neState')) { + if (requestId && requestId.startsWith('neState')) { const neType = requestId.split('_')[1]; neStateParse(neType, data); return; @@ -53,35 +47,27 @@ export default function useWS() { // ueEvent UE会话事件 case '1010': if (Array.isArray(data.rows)) { - ueEventTotal.value = data.total; - const evDataArr: Record[] = []; + eventTotal.value += data.total; for (const item of data.rows) { const v = ueEventParse(item); if (v) { - evDataArr.push(v); + eventData.value.push(v); } } - ueEventData.value = evDataArr; - if (evDataArr.length > 0) { - ueEventId.value = evDataArr[0].id; - } + eventId.value = eventData.value[0].eId; } break; //cdrEvent CDR会话事件 case '1005': if (Array.isArray(data.rows)) { - cdrEventTotal.value = data.total; - const evDataArr: Record[] = []; + eventTotal.value += data.total; for (const item of data.rows) { const v = cdrEventParse(item); if (v) { - evDataArr.push(v); + eventData.value.push(v); } } - cdrEventData.value = evDataArr; - if (evDataArr.length > 0) { - cdrEventId.value = evDataArr[0].id; - } + eventId.value = eventData.value[0].eId; } break; //UPF-总流量数 @@ -112,8 +98,12 @@ export default function useWS() { if (data.data) { const v = ueEventParse(data.data); if (v) { - ueEventData.value.unshift(v); - ueEventId.value = v.id; + eventData.value.unshift(v); + eventTotal.value += 1; + eventId.value = v.eId; + if (eventData.value.length > 50) { + eventData.value.pop(); + } } } break; @@ -122,8 +112,12 @@ export default function useWS() { if (data.data) { const v = cdrEventParse(data.data); if (v) { - cdrEventData.value.unshift(v); - cdrEventId.value = v.id; + eventData.value.unshift(v); + eventTotal.value += 1; + eventId.value = v.eId; + if (eventData.value.length > 50) { + eventData.value.pop(); + } } } break; @@ -154,7 +148,7 @@ export default function useWS() { sortField: 'timestamp', sortOrder: 'desc', pageNum: 1, - pageSize: 50, + pageSize: 25, }, }); } @@ -170,7 +164,7 @@ export default function useWS() { sortField: 'timestamp', sortOrder: 'desc', pageNum: 1, - pageSize: 50, + pageSize: 25, }, }); } diff --git a/src/views/dashboard/overview/index.vue b/src/views/dashboard/overview/index.vue index 910f68a2..e3bbb1fe 100644 --- a/src/views/dashboard/overview/index.vue +++ b/src/views/dashboard/overview/index.vue @@ -3,8 +3,7 @@ import { onBeforeUnmount, onMounted, reactive, ref } from 'vue'; import useI18n from '@/hooks/useI18n'; import Topology from './components/Topology/index.vue'; import NeResources from './components/NeResources/index.vue'; -import UEEvent from './components/UEEvent/index.vue'; -import CDREvent from './components/CDREvent/index.vue'; +import UserActivity from './components/UserActivity/index.vue'; import AlarnDayLine from './components/AlarnDayLine/index.vue'; import AlarnTypeBar from './components/AlarnTypeBar/index.vue'; import UPFFlow from './components/UPFFlow/index.vue'; @@ -75,6 +74,7 @@ async function fnGetState() { stateTimeout.value = setTimeout(() => fnGetState(), 5_000); } +/**初始数据函数 */ function InitData() { cdrEventSend(); ueEventSend(); @@ -188,32 +188,22 @@ onBeforeUnmount(() => {

{{ onlineInfo.nbNum }}

- + {{ t('views.dashboard.overview.skim.base') }}
- -
-
-

{{ t('views.dashboard.overview.alarmType.title') }}

-
- -
-
-
- - -
+ +

   - {{ t('views.dashboard.overview.cdrEvent.title') }} + {{ t('views.dashboard.overview.userActivity.title') }}

- +
@@ -305,15 +295,21 @@ onBeforeUnmount(() => {
- -
+ +
-

-    - {{ t('views.dashboard.overview.ueEvent.title') }} -

+

{{ t('views.dashboard.overview.alarmType.title') }}

- + +
+
+
+ +
+
+

{{ t('views.dashboard.overview.alarmType.title') }}

+
+
From 4d1b3d6a909f5f1390e1b8627d186fe7a00e84b4 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 30 Jan 2024 15:58:53 +0800 Subject: [PATCH 02/11] =?UTF-8?q?fix:=20=E6=8B=93=E6=89=91=E5=9B=BE?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=8E=92=E9=99=A4LAN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/overview/hooks/useTopology.ts | 15 +++++++++------ src/views/monitor/topologyArchitecture/index.vue | 15 +++++++++------ .../monitor/topologyBuild/hooks/registerEdge.ts | 16 +++++++--------- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/views/dashboard/overview/hooks/useTopology.ts b/src/views/dashboard/overview/hooks/useTopology.ts index 4e57723a..7610f561 100644 --- a/src/views/dashboard/overview/hooks/useTopology.ts +++ b/src/views/dashboard/overview/hooks/useTopology.ts @@ -15,6 +15,8 @@ export const notNeNodes = [ 'lan5', 'lan6', 'lan7', + 'LAN', + 'NR', ]; /**图状态 */ @@ -114,9 +116,10 @@ export function neStateParse(neType: string, data: Record) { const neS = nodes.find((n: any) => n.id === edgeSource); const neT = nodes.find((n: any) => n.id === edgeTarget); // console.log(neS, edgeSource, neT, edgeTarget); - // 通过 ID 查询节点实例 - const item = graphG6.value.findById(edge.id); - if (neS && neT && item) { + + if (neS && neT) { + // 通过 ID 查询节点实例 + // const item = graphG6.value.findById(edge.id); // console.log( // `${edgeSource} - ${edgeTarget}`, // neS.neState.online && neT.neState.online @@ -136,16 +139,16 @@ export function neStateParse(neType: string, data: Record) { // }); // 设置状态 graphG6.value.setItemState( - item, + edge.id, 'line-dash', neS.neState.online && neT.neState.online ); } if (neS && notNeNodes.includes(edgeTarget)) { - graphG6.value.setItemState(item, 'line-dash', neT.neState.online); + graphG6.value.setItemState(edge.id, 'line-path', neS.neState.online); } if (neT && notNeNodes.includes(edgeSource)) { - graphG6.value.setItemState(item, 'line-dash', neT.neState.online); + graphG6.value.setItemState(edge.id, 'line-path', neT.neState.online); } } } diff --git a/src/views/monitor/topologyArchitecture/index.vue b/src/views/monitor/topologyArchitecture/index.vue index d5e6f2cc..3ff3a6dc 100644 --- a/src/views/monitor/topologyArchitecture/index.vue +++ b/src/views/monitor/topologyArchitecture/index.vue @@ -57,6 +57,8 @@ const notNeNodes = [ 'lan5', 'lan6', 'lan7', + 'LAN', + 'NR', ]; /**图实例对象 */ @@ -419,9 +421,10 @@ function wsMessage(res: Record) { const neS = nodes.find((n: any) => n.id === edgeSource); const neT = nodes.find((n: any) => n.id === edgeTarget); // console.log(neS, edgeSource, neT, edgeTarget); - // 通过 ID 查询节点实例 - const item = graphG6.value.findById(edge.id); - if (neS && neT && item) { + + if (neS && neT) { + // 通过 ID 查询节点实例 + // const item = graphG6.value.findById(edge.id); // console.log( // `${edgeSource} - ${edgeTarget}`, // neS.neState.online && neT.neState.online @@ -441,16 +444,16 @@ function wsMessage(res: Record) { // }); // 设置状态 graphG6.value.setItemState( - item, + edge.id, 'line-dash', neS.neState.online && neT.neState.online ); } if (neS && notNeNodes.includes(edgeTarget)) { - graphG6.value.setItemState(item, 'line-dash', neT.neState.online); + graphG6.value.setItemState(edge.id, 'line-path', neS.neState.online); } if (neT && notNeNodes.includes(edgeSource)) { - graphG6.value.setItemState(item, 'line-dash', neT.neState.online); + graphG6.value.setItemState(edge.id, 'line-path', neT.neState.online); } } } diff --git a/src/views/monitor/topologyBuild/hooks/registerEdge.ts b/src/views/monitor/topologyBuild/hooks/registerEdge.ts index babe5a7f..8b9d1eb2 100644 --- a/src/views/monitor/topologyBuild/hooks/registerEdge.ts +++ b/src/views/monitor/topologyBuild/hooks/registerEdge.ts @@ -208,11 +208,15 @@ export function edgeLineAnimateState() { } return; } - + // line-dash 虚线运动 if (name === 'line-dash') { if (value) { - if (keyShape.cfg.animating) return; + keyShape.stopAnimate(); + keyShape.attr({ + lineDash: null, + lineDashOffset: null, + }); let index = 0; keyShape.animate( () => { @@ -221,7 +225,7 @@ export function edgeLineAnimateState() { index = 0; } return { - lineDash: [4, 2, 2, 2], + lineDash: [4, 2, 1, 2], lineDashOffset: -index, }; }, @@ -230,12 +234,6 @@ export function edgeLineAnimateState() { duration: 3000, // 执行一次的持续时间 } ); - } else { - keyShape.stopAnimate(); - keyShape.attr({ - lineDash: null, - lineDashOffset: null, - }); } return; } From 17bb4f173814da53b1adbd3fe2dcaa9bad5a1a5e Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 30 Jan 2024 16:31:32 +0800 Subject: [PATCH 03/11] =?UTF-8?q?fix:=20=E8=B5=84=E6=BA=90=E5=9B=BE?= =?UTF-8?q?=E8=87=AA=E9=80=82=E5=BA=94=E5=92=8C=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ChartLine/index.vue | 59 ++++++++++++++--------------- src/views/monitor/monitor/index.vue | 2 +- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/src/components/ChartLine/index.vue b/src/components/ChartLine/index.vue index 91c0a14a..1539da20 100644 --- a/src/components/ChartLine/index.vue +++ b/src/components/ChartLine/index.vue @@ -1,8 +1,5 @@ - + + diff --git a/src/views/monitor/monitor/index.vue b/src/views/monitor/monitor/index.vue index 2ecd8d9f..7383db93 100644 --- a/src/views/monitor/monitor/index.vue +++ b/src/views/monitor/monitor/index.vue @@ -164,7 +164,7 @@ function fnLoadChart(data: Record[]) { type: 'value', name: `${t('views.monitor.monitor.resourceUsage')} ( % )`, position: 'right', - alignTicks: true, + alignTicks: false }, ], grid: { left: '5%', right: '5%', bottom: '20%' }, From 35e8a727ee6443c6127ae5370a40962e368e39a6 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 30 Jan 2024 16:31:48 +0800 Subject: [PATCH 04/11] =?UTF-8?q?del:=20=E5=88=A0=E9=99=A4=E5=85=B3?= =?UTF-8?q?=E7=B3=BB=E5=9B=BE=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ChartGraphG6/index.vue | 392 -------------------------- 1 file changed, 392 deletions(-) delete mode 100644 src/components/ChartGraphG6/index.vue diff --git a/src/components/ChartGraphG6/index.vue b/src/components/ChartGraphG6/index.vue deleted file mode 100644 index 983d8181..00000000 --- a/src/components/ChartGraphG6/index.vue +++ /dev/null @@ -1,392 +0,0 @@ - - - - - From cc211f2dd9bb01eccc79e635c2ca5c5030ab7444 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 30 Jan 2024 16:32:04 +0800 Subject: [PATCH 05/11] =?UTF-8?q?style:=20=E7=9C=8B=E6=9D=BF=E5=A4=9A?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/locales/en-US.ts | 2 +- src/views/dashboard/overview/index.vue | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/i18n/locales/en-US.ts b/src/i18n/locales/en-US.ts index 6d983481..da1ccab7 100644 --- a/src/i18n/locales/en-US.ts +++ b/src/i18n/locales/en-US.ts @@ -510,7 +510,7 @@ export default { title: "Alarm Statistics", }, resources: { - title: "Resource Situation", + title: "Resource Summary", sysMem: "Memory", sysCpu: "CPU", neCpu: "NE CPU", diff --git a/src/views/dashboard/overview/index.vue b/src/views/dashboard/overview/index.vue index e3bbb1fe..8661b281 100644 --- a/src/views/dashboard/overview/index.vue +++ b/src/views/dashboard/overview/index.vue @@ -171,11 +171,18 @@ onBeforeUnmount(() => { {{ t('views.dashboard.overview.skim.users') }}
+
+

{{ onlineInfo.nbNum }}

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

{{ onlineInfo.ueNum }}

- {{ t('views.dashboard.overview.skim.session') }} + Data {{ t('views.dashboard.overview.skim.session') }}
@@ -185,13 +192,6 @@ onBeforeUnmount(() => { IMS {{ t('views.dashboard.overview.skim.session') }}
-
-

{{ onlineInfo.nbNum }}

- - - {{ t('views.dashboard.overview.skim.base') }} - -
From a654680192a5685e0db7fefa02329190807a4367 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 30 Jan 2024 17:02:07 +0800 Subject: [PATCH 06/11] =?UTF-8?q?style:=20=E7=9C=8B=E6=9D=BF=E5=A4=9A?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/locales/en-US.ts | 2 ++ src/i18n/locales/zh-CN.ts | 2 ++ src/views/dashboard/overview/index.vue | 6 +++--- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/i18n/locales/en-US.ts b/src/i18n/locales/en-US.ts index da1ccab7..109bd5ab 100644 --- a/src/i18n/locales/en-US.ts +++ b/src/i18n/locales/en-US.ts @@ -517,6 +517,8 @@ export default { }, topology: { title: "Network Topology", + normal: "Normal", + abnormal: "AbNormal", }, userActivity: { title: "User Activity", diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index 9ecb864b..692ed469 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -517,6 +517,8 @@ export default { }, topology: { title: "网络拓扑", + normal: "正常", + abnormal: "异常", }, userActivity: { title: "用户活动", diff --git a/src/views/dashboard/overview/index.vue b/src/views/dashboard/overview/index.vue index 8661b281..9f274680 100644 --- a/src/views/dashboard/overview/index.vue +++ b/src/views/dashboard/overview/index.vue @@ -186,7 +186,7 @@ onBeforeUnmount(() => {
-

1000

+

0

IMS {{ t('views.dashboard.overview.skim.session') }} @@ -227,9 +227,9 @@ onBeforeUnmount(() => { {{ t('views.dashboard.overview.topology.title') }} - normal: + {{ t('views.dashboard.overview.topology.normal') }}: {{ graphNodeStateNum[0] }} - abnormal: + {{ t('views.dashboard.overview.topology.abnormal') }}: {{ graphNodeStateNum[1] }} From 41335ae99cc39a51c1056589f1353afe95d5a3b2 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 30 Jan 2024 17:18:20 +0800 Subject: [PATCH 07/11] =?UTF-8?q?feat:=20=E7=9C=8B=E6=9D=BF=E9=80=9A?= =?UTF-8?q?=E8=AF=9D=E6=97=B6=E9=95=BF=E6=A0=BC=E5=BC=8F=E5=8C=96hms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/date-utils.ts | 23 +++++++++++++++++++ .../components/UserActivity/index.vue | 3 ++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/utils/date-utils.ts b/src/utils/date-utils.ts index f739569a..c82d78d4 100644 --- a/src/utils/date-utils.ts +++ b/src/utils/date-utils.ts @@ -73,6 +73,29 @@ export function diffValue( return value; } +/** + * 格式化秒值为 ?h?m?s + * @param seconds 2558 秒 + * @returns 1h42m38s + */ +export function parseDuration(seconds: number | string) { + seconds = Number(seconds) || 0; + const duration = dayjs().startOf('day').subtract(seconds, 'seconds'); + const secondsLeft = duration.format('s'); + const minutes = duration.format('m'); + const hours = duration.format('H'); + if (+hours > 0) { + return `${hours}h${minutes}m${secondsLeft}s`; + } + if (+minutes > 0) { + return `${minutes}m${secondsLeft}s`; + } + if (+secondsLeft > 0) { + return `${secondsLeft}s`; + } + return `${seconds}s`; +} + /** * 格式时间不带年份 * diff --git a/src/views/dashboard/overview/components/UserActivity/index.vue b/src/views/dashboard/overview/components/UserActivity/index.vue index a1b610c7..6e67b3cb 100644 --- a/src/views/dashboard/overview/components/UserActivity/index.vue +++ b/src/views/dashboard/overview/components/UserActivity/index.vue @@ -1,4 +1,5 @@