236 lines
5.7 KiB
Vue
236 lines
5.7 KiB
Vue
<script setup lang="ts">
|
||
import { Modal, message } from 'ant-design-vue/es';
|
||
import { onMounted, reactive, toRaw } from 'vue';
|
||
import { fnToStepName } from '../hooks/useStep';
|
||
import useI18n from '@/hooks/useI18n';
|
||
import {
|
||
listNeInfo,
|
||
getPara5GFilee,
|
||
savePara5GFile,
|
||
updateNeInfo,
|
||
} from '@/api/ne/neInfo';
|
||
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
|
||
import Para5GForm from '@/views/ne/neQuickSetup/components/Para5GForm.vue';
|
||
const { t } = useI18n();
|
||
|
||
/**对象信息信息状态类型 */
|
||
type StateType = {
|
||
/**加载等待 */
|
||
loading: boolean;
|
||
/**保存文件标记 */
|
||
saveFile: boolean;
|
||
/**表单数据 */
|
||
from: Record<string, any>;
|
||
/**OMC信息,需修改当前的IP */
|
||
omcInfo: Record<string, any>;
|
||
/**根据网元显示配置项 */
|
||
hasNE: {
|
||
amf: boolean;
|
||
ausf: boolean;
|
||
upf: boolean;
|
||
ims: boolean;
|
||
mme: boolean;
|
||
};
|
||
/**确定按钮 loading */
|
||
confirmLoading: boolean;
|
||
};
|
||
|
||
/**对象信息状态 */
|
||
let state: StateType = reactive({
|
||
loading: false,
|
||
saveFile: false,
|
||
from: {},
|
||
omcInfo: {},
|
||
hasNE: {
|
||
amf: false,
|
||
ausf: false,
|
||
upf: false,
|
||
ims: false,
|
||
mme: false,
|
||
},
|
||
confirmLoading: false,
|
||
});
|
||
|
||
/**保存信息 */
|
||
function fnSave() {
|
||
if (state.confirmLoading) return;
|
||
state.confirmLoading = true;
|
||
savePara5GFile({
|
||
fileType: 'yaml',
|
||
content: toRaw(state.from),
|
||
syncNe: [],
|
||
})
|
||
.then(res => {
|
||
if (res.code === RESULT_CODE_SUCCESS) {
|
||
message.success(t('views.system.quickStart.savePara5GOk'));
|
||
state.saveFile = true;
|
||
// 更新omc_ip
|
||
state.omcInfo.ip = state.from.sbi.omc_ip;
|
||
updateNeInfo(toRaw(state.omcInfo));
|
||
} else {
|
||
message.warning(res.nsg);
|
||
}
|
||
})
|
||
.finally(() => {
|
||
state.confirmLoading = false;
|
||
});
|
||
}
|
||
|
||
/**获取网元列表填充IP */
|
||
function fnGetList() {
|
||
state.loading = true;
|
||
Promise.all([
|
||
getPara5GFilee(),
|
||
listNeInfo({
|
||
pageNum: 1,
|
||
pageSize: 20,
|
||
}),
|
||
]).then(resArr => {
|
||
// 已保存的配置
|
||
if (resArr[0].code === RESULT_CODE_SUCCESS) {
|
||
state.from = resArr[0].data;
|
||
}
|
||
// 填充固定网元类型的ip
|
||
if (
|
||
resArr[1].code === RESULT_CODE_SUCCESS &&
|
||
Array.isArray(resArr[1].rows)
|
||
) {
|
||
for (const item of resArr[1].rows) {
|
||
switch (item.neType) {
|
||
case 'OMC':
|
||
state.from.sbi.omc_ip = item.ip;
|
||
Object.assign(state.omcInfo, item);
|
||
break;
|
||
case 'IMS':
|
||
state.from.sbi.ims_ip = item.ip;
|
||
// state.from.external.ims_sip_ip = item.ip;
|
||
state.hasNE.ims = true;
|
||
break;
|
||
case 'AMF':
|
||
state.from.sbi.amf_ip = item.ip;
|
||
state.hasNE.amf = true;
|
||
break;
|
||
case 'AUSF':
|
||
state.from.sbi.ausf_ip = item.ip;
|
||
state.hasNE.ausf = true;
|
||
break;
|
||
case 'UDM':
|
||
state.from.sbi.udm_ip = item.ip;
|
||
state.from.sbi.db_ip = '0.0.0.0';
|
||
break;
|
||
case 'SMF':
|
||
state.from.sbi.smf_ip = item.ip;
|
||
break;
|
||
case 'PCF':
|
||
state.from.sbi.pcf_ip = item.ip;
|
||
break;
|
||
case 'NSSF':
|
||
state.from.sbi.nssf_ip = item.ip;
|
||
break;
|
||
case 'NRF':
|
||
state.from.sbi.nrf_ip = item.ip;
|
||
break;
|
||
case 'UPF':
|
||
state.from.sbi.upf_ip = item.ip;
|
||
state.hasNE.upf = true;
|
||
break;
|
||
case 'LMF':
|
||
state.from.sbi.lmf_ip = item.ip;
|
||
break;
|
||
case 'NEF':
|
||
state.from.sbi.nef_ip = item.ip;
|
||
break;
|
||
case 'MME':
|
||
state.from.sbi.mme_ip = item.ip;
|
||
if (item.ip.includes('.')) {
|
||
state.from.external.mmes11_ip = item.ip + '/24';
|
||
}
|
||
state.hasNE.mme = true;
|
||
break;
|
||
case 'N3IWF':
|
||
state.from.sbi.n3iwf_ip = item.ip;
|
||
break;
|
||
case 'SMSC':
|
||
state.from.sbi.smsc_ip = item.ip;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
state.loading = false;
|
||
});
|
||
}
|
||
|
||
/**返回上一步 */
|
||
function fnStepPrev() {
|
||
Modal.confirm({
|
||
title: t('common.tipTitle'),
|
||
content: t('views.system.quickStart.stepPara5GStepPrev'),
|
||
onOk() {
|
||
fnToStepName('NeInfoConfig');
|
||
},
|
||
});
|
||
}
|
||
|
||
/**下一步操作 */
|
||
function fnStepNext(stepName: 'NeInfoSoftwareInstall') {
|
||
if (stepName === 'NeInfoSoftwareInstall') {
|
||
Modal.confirm({
|
||
title: t('common.tipTitle'),
|
||
content: t('views.system.quickStart.stepPara5GStepNext'),
|
||
onOk() {
|
||
fnToStepName('NeInfoSoftwareInstall');
|
||
},
|
||
});
|
||
}
|
||
}
|
||
|
||
onMounted(() => {
|
||
fnGetList();
|
||
});
|
||
</script>
|
||
|
||
<template>
|
||
<div class="ne">
|
||
<a-spin tip="Loading..." style="width: 100%" :spinning="state.loading">
|
||
<!-- 公共参数表单 -->
|
||
<Para5GForm v-model:data="state.from" :ne="state.hasNE"></Para5GForm>
|
||
</a-spin>
|
||
|
||
<div class="ne-oper">
|
||
<a-space direction="horizontal" :size="18">
|
||
<a-button @click="fnStepPrev()">
|
||
{{ t('views.system.quickStart.stepPrev') }}
|
||
</a-button>
|
||
<a-button
|
||
type="primary"
|
||
ghost
|
||
:loading="state.confirmLoading"
|
||
@click="fnSave()"
|
||
>
|
||
{{ t('views.system.quickStart.save') }}
|
||
</a-button>
|
||
<a-button
|
||
type="primary"
|
||
@click="fnStepNext('NeInfoSoftwareInstall')"
|
||
:disabled="!state.saveFile"
|
||
>
|
||
{{ t('views.system.quickStart.stepNext') }}
|
||
</a-button>
|
||
</a-space>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<style lang="less" scoped>
|
||
.ne {
|
||
padding-top: 12px;
|
||
overflow-x: hidden;
|
||
overflow-y: auto;
|
||
|
||
&-oper {
|
||
padding-top: 24px;
|
||
text-align: end;
|
||
}
|
||
}
|
||
</style>
|