Merge branch 'main' of http://192.168.2.166:3180/OMC/ems_frontend_vue3
This commit is contained in:
@@ -7,7 +7,7 @@ import { parseObjLineToHump } from '@/utils/parse-utils';
|
||||
* @param query 查询参数
|
||||
* @returns object
|
||||
*/
|
||||
export async function listIMS(query: Record<string, any>) {
|
||||
export async function listUEInfoByIMS(query: Record<string, any>) {
|
||||
query.nbId = query.id;
|
||||
const result = await request({
|
||||
url: '/api/rest/ueManagement/v1/elementType/ims/objectType/ueInfo',
|
||||
@@ -40,3 +40,25 @@ export async function listIMS(query: Record<string, any>) {
|
||||
// ];
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 首页查询IMS在线用户数
|
||||
* @param query 查询参数
|
||||
* @returns neId
|
||||
*/
|
||||
export async function listUENumByIMS(neId: String) {
|
||||
const result = await request({
|
||||
url: `/api/rest/ueManagement/v1/elementType/ims/objectType/ueNum?neId=${neId}`,
|
||||
method: 'get',
|
||||
});
|
||||
if (result.code === RESULT_CODE_SUCCESS) {
|
||||
return Object.assign(result, {
|
||||
data: result.data['ueNum'],
|
||||
});
|
||||
}
|
||||
|
||||
// 模拟数据
|
||||
// { "ueNum": 0 }
|
||||
// result.data = 0
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import { parseObjLineToHump } from '@/utils/parse-utils';
|
||||
* @param query 查询参数
|
||||
* @returns object
|
||||
*/
|
||||
export async function listUE(query: Record<string, any>) {
|
||||
export async function listUEInfoBySMF(query: Record<string, any>) {
|
||||
query.nbId = query.id;
|
||||
const result = await request({
|
||||
url: '/api/rest/ueManagement/v1/elementType/smf/objectType/ueInfo',
|
||||
@@ -62,21 +62,24 @@ export async function listUE(query: Record<string, any>) {
|
||||
return data;
|
||||
}
|
||||
|
||||
//
|
||||
/**
|
||||
* 首页查询SMF在线用户数
|
||||
* @param query 查询参数
|
||||
* @returns neId
|
||||
*/
|
||||
export async function listUENum(neId: String) {
|
||||
export async function listUENumBySMF(neId: String) {
|
||||
const result = await request({
|
||||
url: `/api/rest/ueManagement/v1/elementType/smf/objectType/ueNum?neId=${neId}`,
|
||||
method: 'get',
|
||||
});
|
||||
if (result.code === RESULT_CODE_SUCCESS) {
|
||||
let data = result.data.data;
|
||||
return Object.assign(result, {
|
||||
data: parseObjLineToHump(data['ueNum']),
|
||||
data: result.data.data['ueNum'],
|
||||
});
|
||||
}
|
||||
|
||||
// 模拟数据
|
||||
// { "data": { "ueNum": 0 } }
|
||||
// result.data = 0
|
||||
return result;
|
||||
}
|
||||
@@ -64,6 +64,9 @@ export const graphNodeStateNum = computed(() => {
|
||||
return [normal, abnormal];
|
||||
});
|
||||
|
||||
/**网元状态请求标记 */
|
||||
export const neStateRequestMap = ref<Map<string, boolean>>(new Map());
|
||||
|
||||
/**neStateParse 网元状态 数据解析 */
|
||||
export function neStateParse(neType: string, data: Record<string, any>) {
|
||||
const { combos, edges, nodes } = graphState.data;
|
||||
@@ -151,4 +154,7 @@ export function neStateParse(neType: string, data: Record<string, any>) {
|
||||
graphG6.value.setItemState(edge.id, 'line-path', neT.neState.online);
|
||||
}
|
||||
}
|
||||
|
||||
// 请求标记复位
|
||||
neStateRequestMap.value.set(neType, false);
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ type TFType = {
|
||||
up: string;
|
||||
/**下行 N6 */
|
||||
down: string;
|
||||
/**请求标记 */
|
||||
requestFlag: boolean;
|
||||
};
|
||||
|
||||
/**UPF-总流量数 */
|
||||
@@ -14,14 +16,17 @@ export const upfTotalFlow = ref<TFType[]>([
|
||||
{
|
||||
up: '0 B',
|
||||
down: '0 B',
|
||||
requestFlag: false,
|
||||
},
|
||||
{
|
||||
up: '0 B',
|
||||
down: '0 B',
|
||||
requestFlag: false,
|
||||
},
|
||||
{
|
||||
up: '0 B',
|
||||
down: '0 B',
|
||||
requestFlag: false,
|
||||
},
|
||||
]);
|
||||
|
||||
|
||||
@@ -75,16 +75,19 @@ export default function useWS() {
|
||||
const v0 = upfTFParse(data);
|
||||
upfTotalFlow.value[0].up = v0.up;
|
||||
upfTotalFlow.value[0].down = v0.down;
|
||||
upfTotalFlow.value[0].requestFlag = false;
|
||||
break;
|
||||
case '1030_7':
|
||||
const v7 = upfTFParse(data);
|
||||
upfTotalFlow.value[1].up = v7.up;
|
||||
upfTotalFlow.value[1].down = v7.down;
|
||||
upfTotalFlow.value[1].requestFlag = false;
|
||||
break;
|
||||
case '1030_30':
|
||||
const v30 = upfTFParse(data);
|
||||
upfTotalFlow.value[2].up = v30.up;
|
||||
upfTotalFlow.value[2].down = v30.down;
|
||||
upfTotalFlow.value[2].requestFlag = false;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -126,6 +129,20 @@ export default function useWS() {
|
||||
|
||||
/**UPF-总流量数 发消息*/
|
||||
function upfTFSend(day: 0 | 7 | 30) {
|
||||
// 请求标记检查避免重复发送
|
||||
let index = 0;
|
||||
if (day === 0) {
|
||||
index = 0;
|
||||
} else if (day === 7) {
|
||||
index = 1;
|
||||
} else if (day === 30) {
|
||||
index = 2;
|
||||
}
|
||||
if (upfTotalFlow.value[index].requestFlag) {
|
||||
return;
|
||||
}
|
||||
upfTotalFlow.value[index].requestFlag = true;
|
||||
|
||||
ws.send({
|
||||
requestId: `1030_${day}`,
|
||||
type: 'upf_tf',
|
||||
|
||||
@@ -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,31 +16,36 @@ 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();
|
||||
|
||||
/**用户在线信息 */
|
||||
let onlineInfo: {
|
||||
/**签约用户数量 */
|
||||
subNum: number;
|
||||
/**在线用户数 */
|
||||
ueNum: any;
|
||||
/**概览状态类型 */
|
||||
type SkimStateType = {
|
||||
/**UDM签约用户数量 */
|
||||
udmSubNum: number;
|
||||
/**SMF在线用户数 */
|
||||
smfUeNum: number;
|
||||
/**IMS在线用户数 */
|
||||
imsUeNum: number;
|
||||
/**基站数量 */
|
||||
nbNum: number;
|
||||
/**原始严重程度 */
|
||||
activeAlarmSeverity: DictType[];
|
||||
} = reactive({
|
||||
subNum: 0,
|
||||
ueNum: 0,
|
||||
};
|
||||
|
||||
/**概览状态信息 */
|
||||
let skimState: SkimStateType = reactive({
|
||||
udmSubNum: 0,
|
||||
smfUeNum: 0,
|
||||
imsUeNum: 0,
|
||||
nbNum: 0,
|
||||
activeAlarmSeverity: [],
|
||||
});
|
||||
|
||||
/**总览节点 */
|
||||
@@ -53,13 +59,17 @@ const stateInterval = ref<any>(null);
|
||||
const stateTimeout = ref<any>(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);
|
||||
}
|
||||
|
||||
/**初始数据函数 */
|
||||
@@ -97,11 +107,9 @@ function InitData() {
|
||||
onMounted(() => {
|
||||
Promise.allSettled([
|
||||
listSub({
|
||||
neid: '003',
|
||||
sortField: 'imsi',
|
||||
sortOrder: 'asc',
|
||||
pageNum: '1',
|
||||
pageSize: '20',
|
||||
neid: '001',
|
||||
pageNum: 1,
|
||||
pageSize: 1,
|
||||
}),
|
||||
listBase5G({
|
||||
//
|
||||
@@ -112,11 +120,15 @@ onMounted(() => {
|
||||
/**每页条数 */
|
||||
pageSize: 20,
|
||||
}),
|
||||
listUENum('001'),
|
||||
listUENumBySMF('001'),
|
||||
listUENumByIMS('001'),
|
||||
])
|
||||
.then(resArr => {
|
||||
if (resArr[0].status === 'fulfilled') {
|
||||
onlineInfo.subNum = resArr[0].value.total;
|
||||
const res = resArr[0].value;
|
||||
if (res.code === RESULT_CODE_SUCCESS) {
|
||||
skimState.udmSubNum = res.total;
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
@@ -124,14 +136,21 @@ onMounted(() => {
|
||||
resArr[1].value.code === RESULT_CODE_SUCCESS &&
|
||||
Array.isArray(resArr[1].value.rows)
|
||||
) {
|
||||
onlineInfo.nbNum = resArr[1].value.rows.length;
|
||||
skimState.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) {
|
||||
skimState.smfUeNum = res.data;
|
||||
}
|
||||
}
|
||||
|
||||
if (resArr[3].status === 'fulfilled') {
|
||||
const res = resArr[3].value;
|
||||
if (res.code === RESULT_CODE_SUCCESS) {
|
||||
skimState.imsUeNum = res.data;
|
||||
}
|
||||
}
|
||||
})
|
||||
.finally(() => {
|
||||
@@ -165,33 +184,33 @@ onBeforeUnmount(() => {
|
||||
<div class="skim panel">
|
||||
<div class="inner">
|
||||
<div class="item">
|
||||
<h4>{{ onlineInfo.subNum }}</h4>
|
||||
<h4>{{ skimState.udmSubNum }}</h4>
|
||||
<span>
|
||||
<UserOutlined style="color: #006cff" />
|
||||
{{ t('views.dashboard.overview.skim.users') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
<h4>{{ onlineInfo.nbNum }}</h4>
|
||||
<h4>{{ skimState.nbNum }}</h4>
|
||||
<span>
|
||||
<GlobalOutlined style="color: #edcb35" />
|
||||
{{ t('views.dashboard.overview.skim.base') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
<h4>{{ onlineInfo.ueNum }}</h4>
|
||||
<span>
|
||||
<UserSwitchOutlined style="color: #6acca3" />
|
||||
Data {{ t('views.dashboard.overview.skim.session') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
<h4>0</h4>
|
||||
<h4>{{ skimState.imsUeNum }}</h4>
|
||||
<span>
|
||||
<UserSwitchOutlined style="color: #6acca3" />
|
||||
IMS {{ t('views.dashboard.overview.skim.session') }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
<h4>{{ skimState.smfUeNum }}</h4>
|
||||
<span>
|
||||
<UserSwitchOutlined style="color: #6acca3" />
|
||||
Data {{ t('views.dashboard.overview.skim.session') }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import { message } from 'ant-design-vue/lib';
|
||||
import { SizeType } from 'ant-design-vue/lib/config-provider';
|
||||
import { MenuInfo } from 'ant-design-vue/lib/menu/src/interface';
|
||||
import { ColumnsType } from 'ant-design-vue/lib/table';
|
||||
import { listIMS } from '@/api/neUser/ims';
|
||||
import { listUEInfoByIMS } from '@/api/neUser/ims';
|
||||
import useNeInfoStore from '@/store/modules/neinfo';
|
||||
import useI18n from '@/hooks/useI18n';
|
||||
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
|
||||
@@ -154,7 +154,7 @@ function fnGetList(pageNum?: number) {
|
||||
if (pageNum) {
|
||||
queryParams.pageNum = pageNum;
|
||||
}
|
||||
listIMS(toRaw(queryParams)).then(res => {
|
||||
listUEInfoByIMS(toRaw(queryParams)).then(res => {
|
||||
if (res.code === RESULT_CODE_SUCCESS && Array.isArray(res.rows)) {
|
||||
// 取消勾选
|
||||
if (tableState.selectedRowKeys.length > 0) {
|
||||
@@ -162,7 +162,11 @@ function fnGetList(pageNum?: number) {
|
||||
}
|
||||
tablePagination.total = res.total;
|
||||
tableState.data = res.rows;
|
||||
if (tablePagination.total <=(queryParams.pageNum - 1) * tablePagination.pageSize &&queryParams.pageNum !== 1) {
|
||||
if (
|
||||
tablePagination.total <=
|
||||
(queryParams.pageNum - 1) * tablePagination.pageSize &&
|
||||
queryParams.pageNum !== 1
|
||||
) {
|
||||
tableState.loading = false;
|
||||
fnGetList(queryParams.pageNum - 1);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import { message } from 'ant-design-vue/lib';
|
||||
import { SizeType } from 'ant-design-vue/lib/config-provider';
|
||||
import { MenuInfo } from 'ant-design-vue/lib/menu/src/interface';
|
||||
import { ColumnsType } from 'ant-design-vue/lib/table';
|
||||
import { listUE } from '@/api/neUser/ue';
|
||||
import { listUEInfoBySMF } from '@/api/neUser/smf';
|
||||
import useNeInfoStore from '@/store/modules/neinfo';
|
||||
import useI18n from '@/hooks/useI18n';
|
||||
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
|
||||
@@ -82,7 +82,6 @@ let tableColumns: ColumnsType = [
|
||||
return opt.value;
|
||||
},
|
||||
width: 150,
|
||||
|
||||
},
|
||||
{
|
||||
title: 'MSISDN',
|
||||
@@ -233,7 +232,7 @@ function fnGetList(pageNum?: number) {
|
||||
if (pageNum) {
|
||||
queryParams.pageNum = pageNum;
|
||||
}
|
||||
listUE(toRaw(queryParams)).then(res => {
|
||||
listUEInfoBySMF(toRaw(queryParams)).then(res => {
|
||||
if (res.code === RESULT_CODE_SUCCESS && Array.isArray(res.rows)) {
|
||||
// 取消勾选
|
||||
if (tableState.selectedRowKeys.length > 0) {
|
||||
@@ -241,7 +240,11 @@ function fnGetList(pageNum?: number) {
|
||||
}
|
||||
tablePagination.total = res.total;
|
||||
tableState.data = res.rows;
|
||||
if (tablePagination.total <=(queryParams.pageNum - 1) * tablePagination.pageSize &&queryParams.pageNum !== 1) {
|
||||
if (
|
||||
tablePagination.total <=
|
||||
(queryParams.pageNum - 1) * tablePagination.pageSize &&
|
||||
queryParams.pageNum !== 1
|
||||
) {
|
||||
tableState.loading = false;
|
||||
fnGetList(queryParams.pageNum - 1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user