feat: 网元服务操作局部状态刷新,补充提示信息

This commit is contained in:
TsMask
2025-04-29 10:34:09 +08:00
parent 5713916bc8
commit c571453983
4 changed files with 119 additions and 77 deletions

View File

@@ -479,11 +479,11 @@ export default {
normalcy: 'Normal',
exceptions: 'Abnormal',
restart: 'Restart',
restartTip: 'Are you sure you want to restart the network element service?',
restartTip: 'Are you sure you want to restart the [{ne}] NE Service?',
start: 'Start',
startTip: 'Are you sure you want to start the network element service?',
startTip: 'Are you sure you want to start the [{ne}] NE Service?',
stop: 'Stop',
stopTip: 'Are you sure you want to stop the network element service?',
stopTip: 'Are you sure you want to stop the [{ne}] NE Service?',
reload: 'Reload',
reloadTip: 'Confirm that you want to reload the network element configuration information?',
oam: 'OAM',

View File

@@ -479,11 +479,11 @@ export default {
normalcy: '正常',
exceptions: '异常',
restart: '重启',
restartTip: '确认要重新启动网元服务吗?',
restartTip: '确认要重新启动【{ne}】网元服务吗?',
start: '启动',
startTip: '确认要启动网元服务吗?',
startTip: '确认要启动【{ne}】网元服务吗?',
stop: '停止',
stopTip: '确认要停止网元服务吗?',
stopTip: '确认要停止【{ne}】网元服务吗?',
reload: '重载',
reloadTip: '确认要重载网元配置信息吗?',
oam: 'OAM',

View File

@@ -14,11 +14,12 @@ export default function useNeOptions() {
/**
* 网元启动
* @param row {neName,neType,neId}
* @param callback 回调函数,用于刷新表格数据
*/
function fnNeStart(row: Record<string, any>) {
function fnNeStart(row: Record<string, any>, callback?: () => void) {
Modal.confirm({
title: t('common.tipTitle'),
content: t('views.ne.common.startTip'),
content: t('views.ne.common.startTip', { ne: row.neName }),
onOk() {
const hide = message.loading(t('common.loading'), 0);
serviceNeAction({
@@ -28,10 +29,16 @@ export default function useNeOptions() {
})
.then(res => {
if (res.code === RESULT_CODE_SUCCESS) {
message.success(t('common.operateOk'), 3);
message.success(
`${t('views.ne.common.start')} ${row.neName} ${t(
'common.operateOk'
)}`,
3
);
} else {
message.error(`${res.msg}`, 3);
}
callback && callback();
})
.finally(() => {
hide();
@@ -43,11 +50,12 @@ export default function useNeOptions() {
/**
* 网元重启
* @param row {neName,neType,neId}
* @param callback 回调函数,用于刷新表格数据
*/
function fnNeRestart(row: Record<string, any>) {
function fnNeRestart(row: Record<string, any>, callback?: () => void) {
Modal.confirm({
title: t('common.tipTitle'),
content: t('views.ne.common.restartTip'),
content: t('views.ne.common.restartTip', { ne: row.neName }),
onOk() {
const hide = message.loading(t('common.loading'), 0);
serviceNeAction({
@@ -69,10 +77,16 @@ export default function useNeOptions() {
}
return;
}
message.success(t('common.operateOk'), 3);
message.success(
`${t('views.ne.common.restart')} ${row.neName} ${t(
'common.operateOk'
)}`,
3
);
} else {
message.error(`${res.msg}`, 3);
}
callback && callback();
})
.finally(() => {
hide();
@@ -84,11 +98,12 @@ export default function useNeOptions() {
/**
* 网元停止
* @param row {neName,neType,neId}
* @param callback 回调函数,用于刷新表格数据
*/
function fnNeStop(row: Record<string, any>) {
function fnNeStop(row: Record<string, any>, callback?: () => void) {
Modal.confirm({
title: t('common.tipTitle'),
content: t('views.ne.common.stopTip'),
content: t('views.ne.common.stopTip', { ne: row.neName }),
onOk() {
const hide = message.loading(t('common.loading'), 0);
serviceNeAction({
@@ -98,10 +113,16 @@ export default function useNeOptions() {
})
.then(res => {
if (res.code === RESULT_CODE_SUCCESS) {
message.success(t('common.operateOk'), 3);
message.success(
`${t('views.ne.common.stop')} ${row.neName} ${t(
'common.operateOk'
)}`,
3
);
} else {
message.error(`${res.msg}`, 3);
}
callback && callback();
})
.finally(() => {
hide();
@@ -149,5 +170,62 @@ export default function useNeOptions() {
});
}
return { fnNeStart, fnNeRestart, fnNeStop, fnNeReload, fnNeLogFile };
/**
* 解析网元状态携带的资源利用率
* @param neState {cpu,mem,disk}
*/
function parseResouresUsage(neState: Record<string, any>) {
let sysCpuUsage = 0;
let nfCpuUsage = 0;
if (neState.cpu) {
nfCpuUsage = neState.cpu.nfCpuUsage;
const nfCpu = +(nfCpuUsage / 100);
nfCpuUsage = +nfCpu.toFixed(2);
if (nfCpuUsage > 100) {
nfCpuUsage = 100;
}
sysCpuUsage = neState.cpu.sysCpuUsage;
const sysCpu = +(sysCpuUsage / 100);
sysCpuUsage = +sysCpu.toFixed(2);
if (sysCpuUsage > 100) {
sysCpuUsage = 100;
}
}
let sysMemUsage = 0;
if (neState.mem) {
const men = neState.mem.sysMemUsage;
sysMemUsage = +(men / 100).toFixed(2);
if (sysMemUsage > 100) {
sysMemUsage = 100;
}
}
let sysDiskUsage = 0;
if (neState.disk && Array.isArray(neState.disk.partitionInfo)) {
let disks: any[] = neState.disk.partitionInfo;
disks = disks.sort((a, b) => +b.used - +a.used);
if (disks.length > 0) {
const { total, used } = disks[0];
sysDiskUsage = +((used / total) * 100).toFixed(2);
}
}
return {
sysDiskUsage,
sysMemUsage,
sysCpuUsage,
nfCpuUsage,
};
}
return {
fnNeStart,
fnNeRestart,
fnNeStop,
fnNeReload,
fnNeLogFile,
parseResouresUsage,
};
}

View File

@@ -14,8 +14,14 @@ import useDictStore from '@/store/modules/dict';
import useNeOptions from './hooks/useNeOptions';
const { getDict } = useDictStore();
const { t } = useI18n();
const { fnNeStart, fnNeRestart, fnNeStop, fnNeReload, fnNeLogFile } =
useNeOptions();
const {
fnNeStart,
fnNeRestart,
fnNeStop,
fnNeReload,
fnNeLogFile,
parseResouresUsage,
} = useNeOptions();
// 异步加载组件
const EditModal = defineAsyncComponent(
() => import('./components/EditModal.vue')
@@ -226,17 +232,22 @@ function fnModalEditOk(from: Record<string, any>) {
return;
}
// 编辑时局部更新信息
stateNeInfo(from.neType, from.neId)
reloadRowInfo(from);
}
/**局部更新信息 */
function reloadRowInfo(row: Record<string, any>) {
stateNeInfo(row.neType, row.neId)
.then(res => {
// 找到编辑更新的网元
const item = tableState.data.find(s => s.id === from.id);
const item = tableState.data.find(s => s.id === row.id);
if (item && res.code === RESULT_CODE_SUCCESS) {
item.neType = from.neType;
item.neId = from.neId;
item.rmUid = from.rmUid;
item.neName = from.neName;
item.ip = from.ip;
item.port = from.port;
item.neType = row.neType;
item.neId = row.neId;
item.rmUid = row.rmUid;
item.neName = row.neName;
item.ip = row.ip;
item.port = row.port;
if (res.data.online) {
item.status = '1';
if (res.data.standby) {
@@ -290,7 +301,7 @@ function fnRecordDelete(id: string) {
message.success(t('common.operateOk'), 3);
// 过滤掉删除的id
tableState.data = tableState.data.filter(item => {
if (id.indexOf(',') > -1) {
if (tableState.selectedRowKeys.length > 0) {
return !tableState.selectedRowKeys.includes(item.id);
} else {
return item.id !== id;
@@ -322,13 +333,13 @@ function fnRecordMore(type: string | number, row: Record<string, any>) {
fnRecordDelete(row.id);
break;
case 'start':
fnNeStart(row);
fnNeStart(row, () => reloadRowInfo(row));
break;
case 'restart':
fnNeRestart(row);
fnNeRestart(row, () => reloadRowInfo(row));
break;
case 'stop':
fnNeStop(row);
fnNeStop(row, () => reloadRowInfo(row));
break;
case 'reload':
fnNeReload(row);
@@ -397,53 +408,6 @@ function fnGetList(pageNum?: number) {
});
}
/**解析网元状态携带的资源利用率 */
function parseResouresUsage(neState: Record<string, any>) {
let sysCpuUsage = 0;
let nfCpuUsage = 0;
if (neState.cpu) {
nfCpuUsage = neState.cpu.nfCpuUsage;
const nfCpu = +(nfCpuUsage / 100);
nfCpuUsage = +nfCpu.toFixed(2);
if (nfCpuUsage > 100) {
nfCpuUsage = 100;
}
sysCpuUsage = neState.cpu.sysCpuUsage;
const sysCpu = +(sysCpuUsage / 100);
sysCpuUsage = +sysCpu.toFixed(2);
if (sysCpuUsage > 100) {
sysCpuUsage = 100;
}
}
let sysMemUsage = 0;
if (neState.mem) {
const men = neState.mem.sysMemUsage;
sysMemUsage = +(men / 100).toFixed(2);
if (sysMemUsage > 100) {
sysMemUsage = 100;
}
}
let sysDiskUsage = 0;
if (neState.disk && Array.isArray(neState.disk.partitionInfo)) {
let disks: any[] = neState.disk.partitionInfo;
disks = disks.sort((a, b) => +b.used - +a.used);
if (disks.length > 0) {
const { total, used } = disks[0];
sysDiskUsage = +((used / total) * 100).toFixed(2);
}
}
return {
sysDiskUsage,
sysMemUsage,
sysCpuUsage,
nfCpuUsage,
};
}
onMounted(() => {
// 初始字典数据
Promise.allSettled([getDict('ne_info_status')]).then(resArr => {