From d3b9f21511abb6137cb0dcae978268d5b77cf9df Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 30 Apr 2025 16:55:16 +0800 Subject: [PATCH 01/11] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96PCF=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=AD=96=E7=95=A5=E9=A1=B5=E9=9D=A2=E5=8F=8A=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/configManage/configParam.ts | 50 -- src/api/ne/neConfig.ts | 51 ++ src/api/neData/pcf.ts | 82 ++++ src/api/neUser/pcf.ts | 233 ---------- src/views/neData/pcf-sub/index.vue | 698 ++++++++++++++-------------- 5 files changed, 488 insertions(+), 626 deletions(-) create mode 100644 src/api/neData/pcf.ts delete mode 100644 src/api/neUser/pcf.ts diff --git a/src/api/configManage/configParam.ts b/src/api/configManage/configParam.ts index 537b8190..494176cb 100644 --- a/src/api/configManage/configParam.ts +++ b/src/api/configManage/configParam.ts @@ -33,53 +33,3 @@ export async function updateNeConfigReload(neType: string, neId: string) { } return result; } - -/** - * 从参数配置PCF中获取对应信息提供给PCC用户策略输入框 - * @param neId - * @returns object {pccRules,sessionRules,qosTemplate,headerEnrichTemplate,serviceAreaRestriction} - */ -export async function getPCCRule(neId: any) { - const paramNameArr = [ - 'pccRules', - 'sessionRules', - 'qosTemplate', - 'headerEnrichTemplate', - 'serviceAreaRestriction', - ]; - const reqArr = []; - for (const paramName of paramNameArr) { - reqArr.push( - request({ - url: `/ne/config/data`, - params: { neType: 'PCF', neId, paramName }, - method: 'GET', - }) - ); - } - return await Promise.allSettled(reqArr).then(resArr => { - // 规则数据 - const obj: any = {}; - resArr.forEach((item, i: number) => { - if (item.status === 'fulfilled') { - const res = item.value; - if (res.code === RESULT_CODE_SUCCESS) { - const key = paramNameArr[i]; - obj[key] = res.data.map((item: any) => { - if ('qosTemplate' === key) { - return { value: item.qosId, label: item.qosId }; - } - if ('headerEnrichTemplate' === key) { - return { value: item.templateName, label: item.templateName }; - } - if ('serviceAreaRestriction' === key) { - return { value: item.name, label: item.name }; - } - return { value: item.ruleId, label: item.ruleId }; - }); - } - } - }); - return obj; - }); -} diff --git a/src/api/ne/neConfig.ts b/src/api/ne/neConfig.ts index c6b657d9..6631562f 100644 --- a/src/api/ne/neConfig.ts +++ b/src/api/ne/neConfig.ts @@ -1,3 +1,4 @@ +import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { request } from '@/plugins/http-fetch'; /** @@ -64,3 +65,53 @@ export function delNeConfigData(params: Record) { params, }); } + +/** + * 从参数配置PCF中获取对应信息提供给PCF用户策略输入框 + * @param neId + * @returns object {pccRules,sessionRules,qosTemplate,headerEnrichTemplate,serviceAreaRestriction} + */ +export async function getPCFRule(neId: any) { + const paramNameArr = [ + 'pccRules', + 'sessionRules', + 'qosTemplate', + 'headerEnrichTemplate', + 'serviceAreaRestriction', + ]; + const reqArr = []; + for (const paramName of paramNameArr) { + reqArr.push( + request({ + url: `/ne/config/data`, + params: { neType: 'PCF', neId, paramName }, + method: 'GET', + }) + ); + } + return await Promise.allSettled(reqArr).then(resArr => { + // 规则数据 + const obj: any = {}; + resArr.forEach((item, i: number) => { + if (item.status === 'fulfilled') { + const res = item.value; + if (res.code === RESULT_CODE_SUCCESS) { + const key = paramNameArr[i]; + obj[key] = res.data.map((item: any) => { + if ('qosTemplate' === key) { + return { value: item.qosId, label: item.qosId }; + } + if ('headerEnrichTemplate' === key) { + return { value: item.templateName, label: item.templateName }; + } + if ('serviceAreaRestriction' === key) { + return { value: item.name, label: item.name }; + } + return { value: item.ruleId, label: item.ruleId }; + }); + } + } + }); + return obj; + }); +} diff --git a/src/api/neData/pcf.ts b/src/api/neData/pcf.ts new file mode 100644 index 00000000..96a9e3b6 --- /dev/null +++ b/src/api/neData/pcf.ts @@ -0,0 +1,82 @@ +import { request } from '@/plugins/http-fetch'; + +/** + * PCF-策略配置列表 + * @param query 查询参数 + * @returns object + */ +export function listPCFRule(query: Record) { + return request({ + url: '/neData/pcf/rule/list', + method: 'GET', + params: query, + timeout: 60_000, + }); +} + +/** + * PCF-策略配置添加 + * @param data 参数 + * @returns object + */ +export function addPCFRule(data: Record) { + return request({ + url: `/neData/pcf/rule`, + method: 'POST', + data, + }); +} + +/** + * PCF-策略配置更新 + * @param data 参数 + * @returns object + */ +export function editPCFRule(data: Record) { + return request({ + url: `/neData/pcf/rule`, + method: 'PUT', + data, + }); +} + +/** + * PCF-策略配置删除 + *@param data 参数 + * @returns object + */ +export function delPCFRule(data: Record) { + return request({ + url: `/neData/pcf/rule`, + method: 'DELETE', + params: data, + }); +} + +/** + * PCF-策略配置导出 + * @param data 参数{ neId, fileType } + * @returns object + */ +export function exportPCFRule(data: Record) { + return request({ + url: '/neData/pcf/rule/export', + method: 'GET', + params: data, + responseType: 'blob', + timeout: 60_000, + }); +} + +/** + * PCF-策略配置导入 + * @param data 参数 + * @returns object + */ +export function importPCFRule(data: Record) { + return request({ + url: '/neData/pcf/rule/import', + method: 'PUT', + data, + }); +} diff --git a/src/api/neUser/pcf.ts b/src/api/neUser/pcf.ts deleted file mode 100644 index 2495c373..00000000 --- a/src/api/neUser/pcf.ts +++ /dev/null @@ -1,233 +0,0 @@ -import { - RESULT_CODE_ERROR, - RESULT_CODE_SUCCESS, -} from '@/constants/result-constants'; -import { request } from '@/plugins/http-fetch'; -import { parseObjLineToHump } from '@/utils/parse-utils'; - -/** - * 规则导出 - * @param data 表单数据对象 - * @returns bolb - */ -export function exportRule(data: Record) { - return request({ - url: `/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/file/export`, - method: 'GET', - params: data, - responseType: 'blob', - timeout: 180_000, - }); -} - -/** - * 导入规则数据 - * @param data 表单数据对象 - * @returns object - */ -export function importRuleData(data: Record) { - return request({ - url: `/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/file/import?neId=${data.neId}&filePath=${data.filePath}&fileType=${data.fileType}`, - method: 'PUT', - data, - timeout: 60_000, - }); -} - -/** - * 查询规则列表 - * @param query 查询参数 - * @returns object - */ -export async function listRules(query: Record) { - const result = await request({ - url: '/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo', - method: 'GET', - params: query, - }); - const data = { - data: { total: 0, rows: [] } as any, - code: result.code, - msg: result.msg, - }; - - // 解析数据 - if (result.code === RESULT_CODE_SUCCESS) { - if (result.data?.status) { - return { - code: RESULT_CODE_ERROR, - msg: result.data?.cause, - data: result.data, - }; - } - if (Array.isArray(result.data.data)) { - const rows = parseObjLineToHump(result.data.data); - data.data.total = rows.length; - data.data.rows = rows; - } - } - - // 模拟数据 - // data.rows = [ - // { - // "hdrEnrich": "dnn", - // "imsi": "160990100000003", - // "msisdn": "86755900011", - // "pccRules": "internet|ims_sig", - // "qosAudio": "qos_audio", - // "qosVideo": "qos_video", - // "rfsp": 0, - // "sar": "def_sar", - // "sessRules": "internet|ims_sig", - // "uePolicy": "uep_001" - // } - // ] - - return data; -} - -/** - * 查询规则详细 - * @param neId 网元ID - * @returns object - */ -export async function getRule(neId: string, imsi: string) { - const result = await request({ - url: `/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo?neId=${neId}&imsi=${imsi}`, - method: 'GET', - }); - // 解析数据 - if (result.code === RESULT_CODE_SUCCESS && Array.isArray(result.data.data)) { - result.data = result.data.data[0]; - } - return result; -} - -/** - * 修改规则 - * @param data 规则对象 - * @returns object - */ -export async function updateRule(data: Record) { - const result = await request({ - url: `/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo?neId=${data.neId}`, - method: 'PUT', - data: data, - }); - // 解析数据 - if (result.code === RESULT_CODE_SUCCESS && result.data?.status) { - return { - code: RESULT_CODE_ERROR, - msg: result.data?.cause, - data: result.data, - }; - } - return result; -} - -/** - * 批量修改规则 - * @param data 规则对象 - * @returns object - */ -export async function batchUpdateRule(data: Record) { - const result = await request({ - url: `/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/batch/${data.num}?neId=${data.neId}`, - method: 'PUT', - data: data, - timeout: 60_000, - }); - // 解析数据 - if (result.code === RESULT_CODE_SUCCESS) { - if (result.data?.status) { - return { - code: RESULT_CODE_ERROR, - msg: result.data?.cause, - data: result.data, - }; - } - if (result.data?.data) { - result.data = result.data.data; - return result; - } - } - return result; -} - -/** - * 新增规则 - * @param data 规则对象 - * @returns object - */ -export async function addRule(data: Record) { - const result = await request({ - url: `/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo?neId=${data.neId}`, - method: 'POST', - data: data, - timeout: 60_000, - }); - // 解析数据 - if (result.code === RESULT_CODE_SUCCESS && result.data?.status) { - return { - code: RESULT_CODE_ERROR, - msg: result.data?.cause, - data: result.data, - }; - } - return result; -} - -/** - * 批量新增规则 - * @param data 规则对象 - * @returns object - */ -export async function batchAddRule(data: Record) { - const result = await request({ - url: `/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/batch/${data.num}?neId=${data.neId}`, - method: 'POST', - data: data, - timeout: 60_000, - }); - // 解析数据 - if (result.code === RESULT_CODE_SUCCESS) { - if (result.data?.status) { - return { - code: RESULT_CODE_ERROR, - msg: result.data?.cause, - data: result.data, - }; - } - if (result.data?.data) { - result.data = result.data.data; - return result; - } - } - return result; -} - -/** - * 删除规则 - * @param data 规则对象 - * @returns object - */ -export function delRule(neId: string, imsi: string) { - return request({ - url: `/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo?neId=${neId}&imsi=${imsi}`, - method: 'DELETE', - timeout: 60_000, - }); -} - -/** - * 批量删除规则 - * @param data 规则对象 - * @returns object - */ -export async function batchDelRule(data: Record) { - return request({ - url: `/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/batch/${data.num}?neId=${data.neId}&imsi=${data.imsi}`, - method: 'DELETE', - timeout: 60_000, - }); -} diff --git a/src/views/neData/pcf-sub/index.vue b/src/views/neData/pcf-sub/index.vue index 638b18ec..66e96587 100644 --- a/src/views/neData/pcf-sub/index.vue +++ b/src/views/neData/pcf-sub/index.vue @@ -6,24 +6,20 @@ import { message, Modal, Form, TableColumnsType } from 'ant-design-vue/es'; import { SizeType } from 'ant-design-vue/es/config-provider'; import { MenuInfo } from 'ant-design-vue/es/menu/src/interface'; import UploadModal from '@/components/UploadModal/index.vue'; -import { - listRules, - getRule, - updateRule, - addRule, - delRule, - exportRule, - importRuleData, - batchAddRule, - batchDelRule, - batchUpdateRule, -} from '@/api/neUser/pcf'; -import { getPCCRule } from '@/api/configManage/configParam'; import useNeInfoStore from '@/store/modules/neinfo'; import useI18n from '@/hooks/useI18n'; +import { + addPCFRule, + delPCFRule, + editPCFRule, + exportPCFRule, + importPCFRule, + listPCFRule, +} from '@/api/neData/pcf'; +import { getPCFRule } from '@/api/ne/neConfig'; +import { uploadFileToNE } from '@/api/tool/file'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { saveAs } from 'file-saver'; -import { uploadFileToNE } from '@/api/tool/file'; const { t } = useI18n(); /**网元参数 */ @@ -149,7 +145,7 @@ let tableColumns = ref([ dataIndex: 'pccRules', align: 'left', resizable: true, - width: 150, + width: 200, minWidth: 100, maxWidth: 300, }, @@ -157,7 +153,10 @@ let tableColumns = ref([ title: 'SESS Rules', dataIndex: 'sessRules', align: 'left', - width: 150, + resizable: true, + width: 200, + minWidth: 100, + maxWidth: 300, }, { title: 'HDR Enrich', @@ -169,13 +168,13 @@ let tableColumns = ref([ title: 'UE Policy', dataIndex: 'uePolicy', align: 'left', - width: 150, }, { title: t('common.operate'), key: 'imsi', align: 'left', - width: 100, + width: 150, + fixed: 'right', }, ]); @@ -241,7 +240,7 @@ let modalState: ModalStateType = reactive({ openByEdit: false, title: '用户策略', from: { - num: 1, + num: undefined, imsi: '', msisdn: '', qosAudio: '', @@ -265,11 +264,13 @@ const modalStateFrom = Form.useForm( num: [ { required: true, - message: t('views.neUser.pcf.batchNum') + t('common.unableNull'), + message: t('views.neData.common.batchNum'), }, ], - imsi: [{ required: true, message: `IMSI ${t('common.unableNull')}` }], - msisdn: [{ required: true, message: `MSISDN ${t('common.unableNull')}` }], + imsi: [{ required: true, message: t('views.neData.common.imsiPlease') }], + msisdn: [ + { required: true, message: t('views.neData.common.msisdnPlease') }, + ], }) ); @@ -278,7 +279,7 @@ const modalStateFrom = Form.useForm( * @param noticeId 网元id, 不传为新增 */ function fnModalVisibleByEdit(row?: Record) { - getPCCRule(queryParams.neId) + getPCFRule(queryParams.neId) .then((data: any) => { pcfRuleOption.value = data; }) @@ -286,51 +287,39 @@ function fnModalVisibleByEdit(row?: Record) { modalState.isBatch = false; if (!row) { modalStateFrom.resetFields(); //重置表单 - modalState.title = t('views.neUser.pcf.addTitle'); + modalState.title = t('views.neData.pcfSub.addTitle'); modalState.openByEdit = true; modalState.type = 'add'; } else { - if (modalState.confirmLoading) return; - const hide = message.loading(t('common.loading'), 0); - modalState.confirmLoading = true; - const neID = queryParams.neId || '-'; - getRule(neID, row.imsi) - .then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - Object.assign(modalState.from, res.data); + Object.assign(modalState.from, row); - let pccRules = res.data.pccRules; - if (!pccRules) { - pccRules = []; - } else if (pccRules.includes('|')) { - pccRules = pccRules.split('|'); - } else { - pccRules = [pccRules]; - } - modalState.from.pccRules = pccRules; - let sessRules = res.data.sessRules; - if (!sessRules) { - sessRules = []; - } else if (sessRules.includes('|')) { - sessRules = sessRules.split('|'); - } else { - sessRules = [sessRules]; - } - modalState.from.sessRules = sessRules; + // 处理多选框数据 + let pccRules = row.pccRules; + if (!pccRules) { + pccRules = []; + } else if (pccRules.includes('|')) { + pccRules = pccRules.split('|'); + } else { + pccRules = [pccRules]; + } + modalState.from.pccRules = pccRules; + // 处理多选框数据 + let sessRules = row.sessRules; + if (!sessRules) { + sessRules = []; + } else if (sessRules.includes('|')) { + sessRules = sessRules.split('|'); + } else { + sessRules = [sessRules]; + } + modalState.from.sessRules = sessRules; - modalState.title = t('views.neUser.pcf.updateTitle', { - imsi: row.imsi, - }); - modalState.openByEdit = true; - modalState.type = 'update'; - } else { - message.error(t('common.getInfoFail'), 2); - } - }) - .finally(() => { - hide(); - modalState.confirmLoading = false; - }); + // 打开对话框 + modalState.title = t('views.neData.pcfSub.updateTitle', { + imsi: row.imsi, + }); + modalState.openByEdit = true; + modalState.type = 'update'; } }); } @@ -341,8 +330,9 @@ function fnModalVisibleByEdit(row?: Record) { */ function fnModalOk() { const from = JSON.parse(JSON.stringify(modalState.from)); - from.neId = queryParams.neId || '-'; + const neId = queryParams.neId || '-'; from.rfsp = Number(from.rfsp) || 0; + // 处理多选框数据 let pccRules = modalState.from.pccRules; if (Array.isArray(pccRules)) { pccRules = pccRules.join('|'); @@ -350,7 +340,7 @@ function fnModalOk() { pccRules = ''; } from.pccRules = pccRules; - + // 处理多选框数据 let sessRules = modalState.from.sessRules; if (Array.isArray(sessRules)) { sessRules = sessRules.join('|'); @@ -359,6 +349,7 @@ function fnModalOk() { } from.sessRules = sessRules; + // 必要字段校验 let validateArr = ['imsi', 'msisdn']; if (modalState.isBatch) { validateArr.push('num'); @@ -377,20 +368,40 @@ function fnModalOk() { let result: any = null; if (modalState.isBatch) { if (modalState.type === 'add') { - result = batchAddRule(from); + result = addPCFRule({ + neId: neId, + num: from.num, + paramData: from, + }); } if (modalState.type === 'update') { - result = batchUpdateRule(from); + result = editPCFRule({ + neId: neId, + num: from.num, + paramData: from, + }); } if (modalState.type === 'delete') { - result = batchDelRule(from); + result = delPCFRule({ + neId: neId, + num: from.num, + imsi: from.imsi, + }); } } else { if (modalState.type === 'add') { - result = addRule(from); + result = addPCFRule({ + neId: neId, + num: 0, + paramData: from, + }); } if (modalState.type === 'update') { - result = updateRule(from); + result = editPCFRule({ + neId: neId, + num: 0, + paramData: from, + }); } } @@ -454,7 +465,7 @@ function fnModalCancel() { * @param type 类型 */ function fnModalVisibleByBatch(type: 'delete' | 'add' | 'update') { - getPCCRule(queryParams.neId) + getPCFRule(queryParams.neId) .then((data: any) => { pcfRuleOption.value = data; console.log(data); @@ -462,17 +473,18 @@ function fnModalVisibleByBatch(type: 'delete' | 'add' | 'update') { .finally(() => { modalStateFrom.resetFields(); //重置表单 modalState.isBatch = true; + modalState.from.num = 1; modalState.type = type; if (type === 'add') { - modalState.title = t('views.neUser.pcf.batchAddText'); + modalState.title = t('views.neData.common.batchAddText'); modalState.openByEdit = true; } if (type === 'update') { - modalState.title = t('views.neUser.pcf.batchUpdateText'); + modalState.title = t('views.neData.common.batchUpdateText'); modalState.openByEdit = true; } if (type === 'delete') { - modalState.title = t('views.neUser.pcf.batchDelText'); + modalState.title = t('views.neData.common.batchDelText'); modalState.openByEdit = true; } }); @@ -483,8 +495,8 @@ function fnModalVisibleByBatch(type: 'delete' | 'add' | 'update') { * @param imsi 网元编号ID */ function fnRecordDelete(imsi: string) { - const neID = queryParams.neId; - if (!neID) return; + const neId = queryParams.neId; + if (!neId) return; let imsiMsg = imsi; if (imsi === '0') { imsiMsg = `${tableState.selectedRowKeys[0]}... ${tableState.selectedRowKeys.length}`; @@ -493,55 +505,60 @@ function fnRecordDelete(imsi: string) { Modal.confirm({ title: t('common.tipTitle'), - content: t('views.neUser.pcf.delSure', { imsi: imsiMsg }), + content: t('views.neData.pcfSub.delSure', { imsi: imsiMsg }), onOk() { - const key = 'delRule'; - message.loading({ content: t('common.loading'), key }); - delRule(neID, imsi).then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - message.success({ - content: `${res.msg}`, - key, - duration: 3, - }); + const hide = message.loading(t('common.loading'), 0); + delPCFRule({ + neId: neId, + imsi: imsi, + }) + .then(res => { + if (res.code === RESULT_CODE_SUCCESS) { + message.success({ + content: `${t('common.operateOk')}`, + duration: 3, + }); + } else { + message.error({ + content: `${res.msg}`, + duration: 3, + }); + } + }) + .finally(() => { + hide(); fnGetList(); - } else { - message.error({ - content: `${res.msg}`, - key: key, - duration: 3, - }); - } - }); + }); }, }); } /**列表导出 */ function fnExportList(type: string) { - const neID = queryParams.neId; - if (!neID) return; - const key = 'exportRule'; - message.loading({ content: t('common.loading'), key }); - exportRule({ - neId: neID, + const neId = queryParams.neId; + if (!neId) return; + const hide = message.loading(t('common.loading'), 0); + exportPCFRule({ + neId: neId, fileType: type, - }).then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - message.success({ - content: t('common.msgSuccess', { msg: t('common.export') }), - key, - duration: 2, - }); - saveAs(res.data, `PCF_${neID}_${Date.now()}.${type}`); - } else { - message.error({ - content: `${res.msg}`, - key, - duration: 2, - }); - } - }); + }) + .then(res => { + if (res.code === RESULT_CODE_SUCCESS) { + message.success({ + content: t('common.msgSuccess', { msg: t('common.export') }), + duration: 3, + }); + saveAs(res.data, `PCFRlue_${neId}_${Date.now()}.${type}`); + } else { + message.error({ + content: `${res.msg}`, + duration: 3, + }); + } + }) + .finally(() => { + hide(); + }); } /**查询列表, pageNum初始页数 */ @@ -552,15 +569,14 @@ function fnGetList(pageNum?: number) { queryParams.pageNum = pageNum; tablePagination.current = pageNum; } - listRules(toRaw(queryParams)).then(res => { + listPCFRule(toRaw(queryParams)).then(res => { if (res.code === RESULT_CODE_SUCCESS) { // 取消勾选 if (tableState.selectedRowKeys.length > 0) { tableState.selectedRowKeys = []; } - const { total, rows } = res.data; - tablePagination.total = total; - tableState.data = rows; + tablePagination.total = res.data.length; + tableState.data = res.data; } else { tableState.data = []; } @@ -578,6 +594,8 @@ type ModalUploadImportStateType = { loading: boolean; /**上传结果信息 */ msg: string; + /**含失败信息 */ + hasFail: boolean; }; /**对话框表格信息导入对象信息状态 */ @@ -586,6 +604,7 @@ let uploadImportState: ModalUploadImportStateType = reactive({ title: t('components.UploadModal.uploadTitle'), loading: false, msg: '', + hasFail: false, }); /**对话框表格信息导入弹出窗口 */ @@ -603,31 +622,42 @@ function fnModalUploadImportClose() { /**对话框表格信息导入上传 */ function fnModalUploadImportUpload(file: File) { - const neID = queryParams.neId; - if (!neID) { + const neId = queryParams.neId; + if (!neId) { return Promise.reject('Unknown network element'); } const hide = message.loading(t('common.loading'), 0); uploadImportState.loading = true; - uploadFileToNE('PCF', neID, file, 5) + // 上传文件 + uploadFileToNE('PCF', neId, file, 3) .then(res => { if (res.code === RESULT_CODE_SUCCESS) { - return importRuleData({ - neId: neID, - filePath: res.data, - fileType: 'txt', - }); + return res.data; + } else { + uploadImportState.msg = res.msg; + uploadImportState.loading = false; + return ''; } - return res; + }) + .then((filePath: string) => { + if (!filePath) return; + // 文件导入 + return importPCFRule({ + neId: neId, + fileType: 'txt', + filePath: filePath, + }); }) .then(res => { - if (res.code === RESULT_CODE_SUCCESS && res.data?.data) { - uploadImportState.msg = res.data?.data; - // uploadImportState.msg = t('views.neUser.pcf.uploadFileOk'); - } else if (res.code === RESULT_CODE_SUCCESS && res.data?.detail) { - uploadImportState.msg = res.data?.detail; + if (!res) return; + uploadImportState.msg = res.msg; + const regex = /fail num: (\d+)/; + const match = res.msg.match(regex); + if (match) { + const failNum = Number(match[1]); + uploadImportState.hasFail = failNum > 0; } else { - uploadImportState.msg = t('views.neUser.pcf.uploadFileErr'); + uploadImportState.hasFail = false; } }) .finally(() => { @@ -704,7 +734,7 @@ onMounted(() => { - + { @click.prevent="fnRecordDelete('0')" > - {{ t('views.neUser.pcf.checkDel') }} + {{ t('views.neData.common.checkDel') }} - {{ t('views.neUser.pcf.batchOper') }} + {{ t('views.neData.common.batchOper') }} @@ -800,18 +830,18 @@ onMounted(() => { - {{ t('views.neUser.pcf.import') }} + {{ t('common.import') }} - {{ t('views.neUser.pcf.export') }} + {{ t('common.export') }} @@ -882,7 +912,7 @@ onMounted(() => { :data-source="tableState.data" :size="tableState.size" :pagination="tablePagination" - :scroll="{ y: 'calc(100vh - 480px)' }" + :scroll="{ x: tableColumns.length * 150, y: 'calc(100vh - 480px)' }" @resizeColumn="(w:number, col:any) => (col.width = w)" :row-selection="{ type: 'checkbox', @@ -924,12 +954,13 @@ onMounted(() => { { @@ -447,7 +448,7 @@ onMounted(() => { - + diff --git a/src/views/ne/neQuickSetup/hooks/usePara5G.ts b/src/views/ne/neQuickSetup/hooks/usePara5G.ts index fb296f48..4abcbefb 100644 --- a/src/views/ne/neQuickSetup/hooks/usePara5G.ts +++ b/src/views/ne/neQuickSetup/hooks/usePara5G.ts @@ -1,7 +1,8 @@ import { reactive, toRaw } from 'vue'; import { getPara5GFilee, savePara5GFile, updateNeInfo } from '@/api/ne/neInfo'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; +const neListStore = useNeListStore(); /**对象信息信息状态类型 */ type StateType = { @@ -37,7 +38,7 @@ export function usePara5G() { /**载入数据*/ function fnReloadData() { state.confirmLoading = true; - Promise.all([getPara5GFilee(), useNeInfoStore().fnRefreshNelist()]).then( + Promise.all([getPara5GFilee(), neListStore.fnNelistRefresh()]).then( resArr => { // 已保存的配置 if (resArr[0].code === RESULT_CODE_SUCCESS) { diff --git a/src/views/ne/neSoftware/index.vue b/src/views/ne/neSoftware/index.vue index 6c3ee20a..d7020a29 100644 --- a/src/views/ne/neSoftware/index.vue +++ b/src/views/ne/neSoftware/index.vue @@ -4,14 +4,14 @@ import { PageContainer } from 'antdv-pro-layout'; import { Modal, TableColumnsType, message } from 'ant-design-vue/es'; import { SizeType } from 'ant-design-vue/es/config-provider'; import { MenuInfo } from 'ant-design-vue/es/menu/src/interface'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import useI18n from '@/hooks/useI18n'; -import { NE_TYPE_LIST } from '@/constants/ne-constants'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { listNeSoftware, delNeSoftware } from '@/api/ne/neSoftware'; import { parseDateToStr } from '@/utils/date-utils'; import { downloadFile } from '@/api/tool/file'; import { saveAs } from 'file-saver'; +const neListStore = useNeListStore(); const { t } = useI18n(); // 异步加载组件 @@ -22,9 +22,6 @@ const UploadMoreFile = defineAsyncComponent( () => import('./components/UploadMoreFile.vue') ); -/**网元参数 */ -let neOtions = ref[]>([]); - /**查询参数 */ let queryParams = reactive({ /**网元类型 */ @@ -127,7 +124,7 @@ let tableColumns = ref([ if (!opt.value) return ''; return parseDateToStr(opt.value); }, - width: 150, + width: 200, }, { title: t('common.operate'), @@ -191,7 +188,7 @@ function fnGetList(pageNum?: number) { queryParams.pageNum = pageNum; } listNeSoftware(toRaw(queryParams)).then(res => { - if (res.code === RESULT_CODE_SUCCESS) { + if (res.code === RESULT_CODE_SUCCESS) { const { total, rows } = res.data; tablePagination.total = total; tableState.data = rows; @@ -335,23 +332,8 @@ function fnRecordMore(type: string | number, row: Record) { } onMounted(() => { - // 获取网元网元列表 - useNeInfoStore() - .fnNelist() - .then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - neOtions.value = useNeInfoStore().getNeSelectOtions; - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } - }) - .finally(() => { - // 获取列表数据 - fnGetList(); - }); + // 获取列表数据 + fnGetList(); }); @@ -369,7 +351,7 @@ onMounted(() => { @@ -505,7 +487,7 @@ onMounted(() => { :data-source="tableState.data" :size="tableState.size" :pagination="tablePagination" - :scroll="{ x: tableColumns.length * 150 }" + :scroll="{ x: tableColumns.length * 180 }" @resizeColumn="(w:number, col:any) => (col.width = w)" :row-selection="{ type: 'checkbox', diff --git a/src/views/ne/neVersion/index.vue b/src/views/ne/neVersion/index.vue index ebc7ea8b..8242cf65 100644 --- a/src/views/ne/neVersion/index.vue +++ b/src/views/ne/neVersion/index.vue @@ -10,8 +10,7 @@ import { } from 'ant-design-vue/es'; import { SizeType } from 'ant-design-vue/es/config-provider'; import { MenuInfo } from 'ant-design-vue/es/menu/src/interface'; -import useNeInfoStore from '@/store/modules/neinfo'; -import { NE_TYPE_LIST } from '@/constants/ne-constants'; +import useNeListStore from '@/store/modules/ne_list'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { listNeVersion, operateNeVersion } from '@/api/ne/neVersion'; import { parseDateToStr } from '@/utils/date-utils'; @@ -19,6 +18,7 @@ import useI18n from '@/hooks/useI18n'; import useDictStore from '@/store/modules/dict'; import useMaskStore from '@/store/modules/mask'; const maskStore = useMaskStore(); +const neListStore = useNeListStore(); const { t } = useI18n(); const { getDict } = useDictStore(); @@ -33,9 +33,6 @@ const UploadMoreFile = defineAsyncComponent( /**字典数据-状态 */ let dictStatus = ref([]); -/**网元参数 */ -let neOtions = ref[]>([]); - /**查询参数 */ let queryParams = reactive({ /**网元类型 */ @@ -151,7 +148,7 @@ let tableColumns = ref([ if (!opt.value) return ''; return parseDateToStr(opt.value); }, - width: 150, + width: 200, }, { title: t('common.operate'), @@ -441,21 +438,9 @@ async function fnRecordUpgrade() { onMounted(() => { // 初始字典数据 - getDict('ne_version_status').then(res => { - dictStatus.value = res; - }); - // 获取网元网元列表 - useNeInfoStore() - .fnNelist() + getDict('ne_version_status') .then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - neOtions.value = useNeInfoStore().getNeSelectOtions; - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } + dictStatus.value = res; }) .finally(() => { // 获取列表数据 @@ -478,7 +463,7 @@ onMounted(() => { @@ -607,7 +592,7 @@ onMounted(() => { :data-source="tableState.data" :size="tableState.size" :pagination="tablePagination" - :scroll="{ x: tableColumns.length * 120 }" + :scroll="{ x: tableColumns.length * 150 }" @resizeColumn="(w:number, col:any) => (col.width = w)" :row-selection="{ type: 'checkbox', diff --git a/src/views/neData/base-online/index.vue b/src/views/neData/base-online/index.vue index 9843b1f5..10bc0152 100644 --- a/src/views/neData/base-online/index.vue +++ b/src/views/neData/base-online/index.vue @@ -6,11 +6,11 @@ import { SizeType } from 'ant-design-vue/es/config-provider'; import { MenuInfo } from 'ant-design-vue/es/menu/src/interface'; import useI18n from '@/hooks/useI18n'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import { useRoute } from 'vue-router'; import { listAMFNblist } from '@/api/neData/amf'; import { listMMENblist } from '@/api/neData/mme'; -const neInfoStore = useNeInfoStore(); +const neListStore = useNeListStore(); const route = useRoute(); const { t } = useI18n(); @@ -264,57 +264,40 @@ function fnGetList(pageNum?: number) { onMounted(() => { // 获取网元网元列表 - neInfoStore - .fnNelist() - .then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - if (res.data.length > 0) { - // 过滤不可用的网元 - for (const item of neInfoStore.getNeCascaderOptions) { - if (!['AMF', 'MME'].includes(item.value)) continue; - const v = JSON.parse(JSON.stringify(item)); + for (const item of neListStore.getNeCascaderOptions) { + // 过滤不可用的网元 + if (!['AMF', 'MME'].includes(item.value)) continue; + const v = JSON.parse(JSON.stringify(item)); - if (v.label === 'AMF') { - v.label = '5G'; - } - if (v.label === 'MME') { - v.label = '4G'; - } - neCascaderOptions.value.push(v); - } - - if (neCascaderOptions.value.length === 0) { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - return; - } - - // 无查询参数neType时 默认选择AMF - const queryNeType = (route.query.neType as string) || '5G'; - const item = neCascaderOptions.value.find( - s => s.value === queryNeType - ); - if (item && item.children) { - const info = item.children[0]; - queryParams.neType = [info.neType, info.neId]; - } else { - const info = neCascaderOptions.value[0].children[0]; - queryParams.neType = [info.neType, info.neId]; - } - } - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } - }) - .finally(() => { - // 获取列表数据 - fnGetList(); + if (v.label === 'AMF') { + v.label = '5G'; + } + if (v.label === 'MME') { + v.label = '4G'; + } + neCascaderOptions.value.push(v); + } + if (neCascaderOptions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 2, }); + return; + } + + // 无查询参数neType时 默认选择AMF + const queryNeType = (route.query.neType as string) || '5G'; + const item = neCascaderOptions.value.find(s => s.value === queryNeType); + if (item && item.children) { + const info = item.children[0]; + queryParams.neType = [info.neType, info.neId]; + } else { + const info = neCascaderOptions.value[0].children[0]; + queryParams.neType = [info.neType, info.neId]; + } + + // 获取列表数据 + fnGetList(); }); diff --git a/src/views/neData/base-station/list.vue b/src/views/neData/base-station/list.vue index 4a233e76..abd347fd 100644 --- a/src/views/neData/base-station/list.vue +++ b/src/views/neData/base-station/list.vue @@ -12,7 +12,7 @@ import { SizeType } from 'ant-design-vue/es/config-provider'; import { ColumnsType } from 'ant-design-vue/es/table'; import { ProModal } from 'antdv-pro-modal'; import UploadModal from '@/components/UploadModal/index.vue'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import useI18n from '@/hooks/useI18n'; const { t, currentLocale } = useI18n(); import { @@ -32,6 +32,8 @@ import saveAs from 'file-saver'; import { readSheet, writeSheet } from '@/utils/execl-utils'; import { useRoute } from 'vue-router'; const route = useRoute(); +const neListStore = useNeListStore(); + // 异步加载组件 const HistoryModal = defineAsyncComponent( () => import('./components/history.vue') @@ -655,40 +657,32 @@ async function fnModalImportTemplate() { onMounted(() => { // 获取网元网元列表 - useNeInfoStore() - .fnNelist() - .then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - if (res.data.length > 0) { - let arr: Record[] = []; - useNeInfoStore().neCascaderOptions.forEach(item => { - if (['AMF', 'MME'].includes(item.value)) { - arr.push(JSON.parse(JSON.stringify(item))); - } - }); - neCascaderOptions.value = arr; - // 无查询参数neType时 默认选择AMF - const queryNeType = (route.query.neType as string) || 'AMF'; - const item = arr.find(s => s.value === queryNeType); - if (item && item.children) { - const info = item.children[0]; - neTypeAndId.value = [info.neType, info.neId]; - } else { - const info = neCascaderOptions.value[0].children[0]; - neTypeAndId.value = [info.neType, info.neId]; - } - } - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } - }) - .finally(() => { - // 获取列表数据 - fnGetList(); + neListStore.neCascaderOptions.forEach(item => { + if (['AMF', 'MME'].includes(item.value)) { + neCascaderOptions.value.push(JSON.parse(JSON.stringify(item))); + } + }); + if (neCascaderOptions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 2, }); + return; + } + + // 无查询参数neType时 默认选择AMF + const queryNeType = (route.query.neType as string) || 'AMF'; + const item = neCascaderOptions.value.find(s => s.value === queryNeType); + if (item && item.children) { + const info = item.children[0]; + neTypeAndId.value = [info.neType, info.neId]; + } else { + const info = neCascaderOptions.value[0].children[0]; + neTypeAndId.value = [info.neType, info.neId]; + } + + // 获取列表数据 + fnGetList(); }); diff --git a/src/views/neData/base-station/topology.vue b/src/views/neData/base-station/topology.vue index 6c83a55d..617b889a 100644 --- a/src/views/neData/base-station/topology.vue +++ b/src/views/neData/base-station/topology.vue @@ -5,7 +5,7 @@ import { listAMFNbStatelist } from '@/api/neData/amf'; import { parseBasePath } from '@/plugins/file-static-url'; import { edgeLineAnimateState } from '@/views/monitor/topologyBuild/hooks/registerEdge'; import { nodeImageAnimateState } from '@/views/monitor/topologyBuild/hooks/registerNode'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import useI18n from '@/hooks/useI18n'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { stateNeInfo } from '@/api/ne/neInfo'; @@ -13,6 +13,7 @@ import { parseDateToStr } from '@/utils/date-utils'; import { useFullscreen } from '@vueuse/core'; import { listMMENbStatelist } from '@/api/neData/mme'; const { t } = useI18n(); +const neListStore = useNeListStore(); /**图DOM节点实例对象 */ const graphG6Dom = useTemplateRef('graphG6Dom'); @@ -358,9 +359,7 @@ function handleRanderGraph(container: HTMLElement | null, data: GraphData) { /** * 获取图组数据渲染到画布 */ -async function fnGraphDataLoad() { - // 加载基础网元 - await useNeInfoStore().fnNelist(); +async function fnGraphDataLoad() { const dataNe = await fnGraphDataBase(); Object.assign(graphData, dataNe); graphG6.value = handleRanderGraph(graphG6Dom.value, dataNe); @@ -381,7 +380,7 @@ async function fnGraphDataBase() { edges: [], }; // 添加基础网元 - for (const item of useNeInfoStore().getNeSelectOtions) { + for (const item of neListStore.getNeSelectOtions) { if ('OMC' === item.value) { if (item.children?.length === 0) continue; // 是否存在OMC保证唯一 diff --git a/src/views/neData/ims-sub/index.vue b/src/views/neData/ims-sub/index.vue index 535e3353..7280b693 100644 --- a/src/views/neData/ims-sub/index.vue +++ b/src/views/neData/ims-sub/index.vue @@ -5,11 +5,12 @@ import { message } from 'ant-design-vue/es'; import { SizeType } from 'ant-design-vue/es/config-provider'; import { MenuInfo } from 'ant-design-vue/es/menu/src/interface'; import { ColumnsType } from 'ant-design-vue/es/table'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import useI18n from '@/hooks/useI18n'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { listIMSSessionList } from '@/api/neData/ims'; const { t } = useI18n(); +const neListStore = useNeListStore(); /**网元参数 */ let neOtions = ref[]>([]); @@ -147,13 +148,13 @@ function fnGetList(pageNum?: number) { queryParams.pageNum = pageNum; } listIMSSessionList(toRaw(queryParams)).then(res => { - if (res.code === RESULT_CODE_SUCCESS && Array.isArray(res.data)) { + if (res.code === RESULT_CODE_SUCCESS && Array.isArray(res.data)) { // 取消勾选 if (tableState.selectedRowKeys.length > 0) { tableState.selectedRowKeys = []; } - tablePagination.total = res.data.length; - tableState.data = res.data; + tablePagination.total = res.data.length; + tableState.data = res.data; if ( tablePagination.total <= (queryParams.pageNum - 1) * tablePagination.pageSize && @@ -172,33 +173,24 @@ function fnGetList(pageNum?: number) { onMounted(() => { // 获取网元网元列表 - useNeInfoStore() - .fnNelist() - .then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - if (res.data.length > 0) { - let arr: Record[] = []; - res.data.forEach((v: any) => { - if (v.neType === 'IMS') { - arr.push({ value: v.neId, label: v.neName }); - } - }); - neOtions.value = arr; - if (arr.length > 0) { - queryParams.neId = arr[0].value; - } - } - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } - }) - .finally(() => { - // 获取列表数据 - fnGetList(); + neListStore.neCascaderOptions.forEach(item => { + if (item.value === 'IMS') { + neOtions.value = JSON.parse(JSON.stringify(item.children)); + } + }); + if (neOtions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 2, }); + return; + } + if (neOtions.value.length > 0) { + queryParams.neId = neOtions.value[0].value; + } + + // 获取列表数据 + fnGetList(); }); @@ -223,7 +215,11 @@ onMounted(() => { - + diff --git a/src/views/neData/pcf-sub/index.vue b/src/views/neData/pcf-sub/index.vue index 66e96587..3ab67cd7 100644 --- a/src/views/neData/pcf-sub/index.vue +++ b/src/views/neData/pcf-sub/index.vue @@ -6,7 +6,7 @@ import { message, Modal, Form, TableColumnsType } from 'ant-design-vue/es'; import { SizeType } from 'ant-design-vue/es/config-provider'; import { MenuInfo } from 'ant-design-vue/es/menu/src/interface'; import UploadModal from '@/components/UploadModal/index.vue'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import useI18n from '@/hooks/useI18n'; import { addPCFRule, @@ -21,7 +21,7 @@ import { uploadFileToNE } from '@/api/tool/file'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { saveAs } from 'file-saver'; const { t } = useI18n(); - +const neListStore = useNeListStore(); /**网元参数 */ let neOtions = ref[]>([]); @@ -693,33 +693,24 @@ function fnModalDownloadImportTemplate() { onMounted(() => { // 获取网元网元列表 - useNeInfoStore() - .fnNelist() - .then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - if (res.data.length > 0) { - let arr: Record[] = []; - res.data.forEach((v: any) => { - if (v.neType === 'PCF') { - arr.push({ value: v.neId, label: v.neName }); - } - }); - neOtions.value = arr; - if (arr.length > 0) { - queryParams.neId = arr[0].value; - } - } - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } - }) - .finally(() => { - // 获取列表数据 - fnGetList(); + neListStore.neCascaderOptions.forEach(item => { + if (item.value === 'PCF') { + neOtions.value = JSON.parse(JSON.stringify(item.children)); + } + }); + if (neOtions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 2, }); + return; + } + if (neOtions.value.length > 0) { + queryParams.neId = neOtions.value[0].value; + } + + // 获取列表数据 + fnGetList(); }); diff --git a/src/views/neData/smf-sub/index.vue b/src/views/neData/smf-sub/index.vue index 00e81220..f85baf68 100644 --- a/src/views/neData/smf-sub/index.vue +++ b/src/views/neData/smf-sub/index.vue @@ -7,11 +7,11 @@ import { SizeType } from 'ant-design-vue/es/config-provider'; import { MenuInfo } from 'ant-design-vue/es/menu/src/interface'; import { ColumnsType } from 'ant-design-vue/es/table'; import { listSMFSubList } from '@/api/neData/smf'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import useI18n from '@/hooks/useI18n'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; const { t } = useI18n(); - +const neListStore = useNeListStore(); /**网元参数 */ let neOtions = ref[]>([]); @@ -225,7 +225,7 @@ function fnGetList(pageNum?: number) { queryParams.pageNum = pageNum; } listSMFSubList(toRaw(queryParams)).then(res => { - if (res.code === RESULT_CODE_SUCCESS) { + if (res.code === RESULT_CODE_SUCCESS) { const { total, rows } = res.data; tablePagination.total = total; tableState.data = rows; @@ -247,33 +247,24 @@ function fnGetList(pageNum?: number) { onMounted(() => { // 获取网元网元列表 - useNeInfoStore() - .fnNelist() - .then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - if (res.data.length > 0) { - let arr: Record[] = []; - res.data.forEach((v: any) => { - if (v.neType === 'SMF') { - arr.push({ value: v.neId, label: v.neName }); - } - }); - neOtions.value = arr; - if (arr.length > 0) { - queryParams.neId = arr[0].value; - } - } - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } - }) - .finally(() => { - // 获取列表数据 - fnGetList(); + neListStore.neCascaderOptions.forEach(item => { + if (item.value === 'SMF') { + neOtions.value = JSON.parse(JSON.stringify(item.children)); + } + }); + if (neOtions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 2, }); + return; + } + if (neOtions.value.length > 0) { + queryParams.neId = neOtions.value[0].value; + } + + // 获取列表数据 + fnGetList(); }); diff --git a/src/views/neData/udm-auth/index.vue b/src/views/neData/udm-auth/index.vue index 4b759502..7d3fac51 100644 --- a/src/views/neData/udm-auth/index.vue +++ b/src/views/neData/udm-auth/index.vue @@ -8,7 +8,7 @@ import { MenuInfo } from 'ant-design-vue/es/menu/src/interface'; import { ColumnsType } from 'ant-design-vue/es/table'; import UploadModal from '@/components/UploadModal/index.vue'; import TableColumnsDnd from '@/components/TableColumnsDnd/index.vue'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import useI18n from '@/hooks/useI18n'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { saveAs } from 'file-saver'; @@ -27,7 +27,7 @@ import { import { uploadFile } from '@/api/tool/file'; import { getNeViewFile } from '@/api/tool/neFile'; const { t } = useI18n(); - +const neListStore = useNeListStore(); /**网元参数 */ let neOtions = ref[]>([]); @@ -739,33 +739,24 @@ function fnModalDownloadImportTemplate() { onMounted(() => { // 获取网元网元列表 - useNeInfoStore() - .fnNelist() - .then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - if (res.data.length > 0) { - let arr: Record[] = []; - res.data.forEach((v: any) => { - if (v.neType === 'UDM') { - arr.push({ value: v.neId, label: v.neName }); - } - }); - neOtions.value = arr; - if (arr.length > 0) { - queryParams.neId = arr[0].value; - } - } - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } - }) - .finally(() => { - // 获取列表数据 - fnGetList(); + neListStore.neCascaderOptions.forEach(item => { + if (item.value === 'UDM') { + neOtions.value = JSON.parse(JSON.stringify(item.children)); + } + }); + if (neOtions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 2, }); + return; + } + if (neOtions.value.length > 0) { + queryParams.neId = neOtions.value[0].value; + } + + // 获取列表数据 + fnGetList(); }); diff --git a/src/views/neData/udm-sub/index.vue b/src/views/neData/udm-sub/index.vue index 8ef6cd0c..0eb3a9ea 100644 --- a/src/views/neData/udm-sub/index.vue +++ b/src/views/neData/udm-sub/index.vue @@ -8,7 +8,7 @@ import { MenuInfo } from 'ant-design-vue/es/menu/src/interface'; import { ColumnsType } from 'ant-design-vue/es/table'; import UploadModal from '@/components/UploadModal/index.vue'; import TableColumnsDnd from '@/components/TableColumnsDnd/index.vue'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import useI18n from '@/hooks/useI18n'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import saveAs from 'file-saver'; @@ -27,7 +27,7 @@ import { import { uploadFile } from '@/api/tool/file'; import { getNeViewFile } from '@/api/tool/neFile'; const { t } = useI18n(); - +const neListStore = useNeListStore(); /**网元参数 */ let neOtions = ref[]>([]); @@ -1130,33 +1130,24 @@ async function fnModalDownloadImportTemplate() { onMounted(() => { // 获取网元网元列表 - useNeInfoStore() - .fnNelist() - .then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - if (res.data.length > 0) { - let arr: Record[] = []; - res.data.forEach((v: any) => { - if (v.neType === 'UDM') { - arr.push({ value: v.neId, label: v.neName }); - } - }); - neOtions.value = arr; - if (arr.length > 0) { - queryParams.neId = arr[0].value; - } - } - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } - }) - .finally(() => { - // 获取列表数据 - fnGetList(); + neListStore.neCascaderOptions.forEach(item => { + if (item.value === 'UDM') { + neOtions.value = JSON.parse(JSON.stringify(item.children)); + } + }); + if (neOtions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 2, }); + return; + } + if (neOtions.value.length > 0) { + queryParams.neId = neOtions.value[0].value; + } + + // 获取列表数据 + fnGetList(); }); diff --git a/src/views/neData/udm-voip/index.vue b/src/views/neData/udm-voip/index.vue index 6d2288b6..115cc618 100644 --- a/src/views/neData/udm-voip/index.vue +++ b/src/views/neData/udm-voip/index.vue @@ -22,14 +22,13 @@ import { listUDMVOIP, resetUDMVOIP, } from '@/api/neData/udm_voip'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import useI18n from '@/hooks/useI18n'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { saveAs } from 'file-saver'; import { uploadFileToNE } from '@/api/tool/file'; - const { t } = useI18n(); - +const neListStore = useNeListStore(); /**网元参数 */ let neOtions = ref[]>([]); @@ -540,31 +539,24 @@ function fnModalDownloadImportTemplate() { onMounted(() => { // 获取网元网元列表 - useNeInfoStore() - .fnNelist() - .then(res => { - if (res.code === RESULT_CODE_SUCCESS && res.data?.length > 0) { - let arr: Record[] = []; - res.data.forEach((v: any) => { - if (v.neType === 'UDM') { - arr.push({ value: v.neId, label: v.neName }); - } - }); - neOtions.value = arr; - if (arr.length > 0) { - queryParams.neId = arr[0].value; - } - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } - }) - .finally(() => { - // 获取列表数据 - fnGetList(); + neListStore.neCascaderOptions.forEach(item => { + if (item.value === 'UDM') { + neOtions.value = JSON.parse(JSON.stringify(item.children)); + } + }); + if (neOtions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 2, }); + return; + } + if (neOtions.value.length > 0) { + queryParams.neId = neOtions.value[0].value; + } + + // 获取列表数据 + fnGetList(); }); diff --git a/src/views/neData/udm-volte/index.vue b/src/views/neData/udm-volte/index.vue index c96b44ae..296591d2 100644 --- a/src/views/neData/udm-volte/index.vue +++ b/src/views/neData/udm-volte/index.vue @@ -12,17 +12,7 @@ import { import { SizeType } from 'ant-design-vue/es/config-provider'; import { MenuInfo } from 'ant-design-vue/es/menu/src/interface'; import UploadModal from '@/components/UploadModal/index.vue'; -import { - addUDMVOIP, - batchAddUDMVOIP, - batchDelUDMVOIP, - delUDMVOIP, - exportUDMVOIP, - importUDMVOIP, - listUDMVOIP, - resetUDMVOIP, -} from '@/api/neData/udm_voip'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import useI18n from '@/hooks/useI18n'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { saveAs } from 'file-saver'; @@ -33,12 +23,12 @@ import { batchDelUDMVolteIMS, delUDMVolteIMS, exportUDMVolteIMS, + importUDMVolteIMS, listUDMVolteIMS, resetUDMVolteIMS, } from '@/api/neData/udm_volte_ims'; - const { t } = useI18n(); - +const neListStore = useNeListStore(); /**字典数据 */ let dict: { /**Tag标签类型 0=VoIP, 1=VoLTE */ @@ -554,7 +544,7 @@ function fnModalUploadImportUpload(file: File) { uploadFileToNE('UDM', neID, file, 5) .then(res => { if (res.code === RESULT_CODE_SUCCESS) { - return importUDMVOIP({ + return importUDMVolteIMS({ neId: neID, uploadPath: res.data, }); @@ -601,31 +591,24 @@ function fnModalDownloadImportTemplate() { onMounted(() => { // 获取网元网元列表 - useNeInfoStore() - .fnNelist() - .then(res => { - if (res.code === RESULT_CODE_SUCCESS && res.data?.length > 0) { - let arr: Record[] = []; - res.data.forEach((v: any) => { - if (v.neType === 'UDM') { - arr.push({ value: v.neId, label: v.neName }); - } - }); - neOtions.value = arr; - if (arr.length > 0) { - queryParams.neId = arr[0].value; - } - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } - }) - .finally(() => { - // 获取列表数据 - fnGetList(); + neListStore.neCascaderOptions.forEach(item => { + if (item.value === 'UDM') { + neOtions.value = JSON.parse(JSON.stringify(item.children)); + } + }); + if (neOtions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 2, }); + return; + } + if (neOtions.value.length > 0) { + queryParams.neId = neOtions.value[0].value; + } + + // 获取列表数据 + fnGetList(); }); diff --git a/src/views/neUser/n3iwf/index.vue b/src/views/neUser/n3iwf/index.vue index 513bf7e9..e4116adc 100644 --- a/src/views/neUser/n3iwf/index.vue +++ b/src/views/neUser/n3iwf/index.vue @@ -6,11 +6,11 @@ import { SizeType } from 'ant-design-vue/es/config-provider'; import { MenuInfo } from 'ant-design-vue/es/menu/src/interface'; import { ColumnsType } from 'ant-design-vue/es/table'; import { listN3iwf } from '@/api/neUser/n3iwf'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import useI18n from '@/hooks/useI18n'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; const { t } = useI18n(); - +const neListStore = useNeListStore(); /**网元参数 */ let neOtions = ref[]>([]); @@ -104,33 +104,24 @@ function fnGetList() { onMounted(() => { // 获取网元网元列表 - useNeInfoStore() - .fnNelist() - .then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - if (res.data.length > 0) { - let arr: Record[] = []; - res.data.forEach((v: any) => { - if (v.neType === 'N3IWF') { - arr.push({ value: v.neId, label: v.neName }); - } - }); - neOtions.value = arr; - if (arr.length > 0) { - queryParams.neId = arr[0].value; - } - } - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } - }) - .finally(() => { - // 获取列表数据 - fnGetList(); + neListStore.neCascaderOptions.forEach(item => { + if (item.value === 'N3IWF') { + neOtions.value = JSON.parse(JSON.stringify(item.children)); + } + }); + if (neOtions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 2, }); + return; + } + if (neOtions.value.length > 0) { + queryParams.neId = neOtions.value[0].value; + } + + // 获取列表数据 + fnGetList(); }); diff --git a/src/views/neUser/nssf/index.vue b/src/views/neUser/nssf/index.vue index f1a738af..b92b1e52 100644 --- a/src/views/neUser/nssf/index.vue +++ b/src/views/neUser/nssf/index.vue @@ -1,19 +1,14 @@ @@ -727,7 +719,7 @@ onMounted(() => { @@ -890,7 +882,7 @@ onMounted(() => { @@ -1007,7 +999,7 @@ onMounted(() => { > ) { /**钩子函数,界面打开初始化*/ onMounted(() => { // 获取网元网元列表 - neInfoStore.fnNelist().then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - if (res.data.length > 0) { - // 过滤不可用的网元 - for (const item of neInfoStore.getNeCascaderOptions) { - neCascaderOptions.value.push(item); - } - - if (neCascaderOptions.value.length === 0) { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - return; - } - } - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } - }); + for (const item of neListStore.getNeCascaderOptions) { + neCascaderOptions.value.push(item); // 过滤不可用的网元 + } + if (neCascaderOptions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 2, + }); + return; + } }); /**钩子函数,界面关闭*/ diff --git a/src/views/tool/ping/index.vue b/src/views/tool/ping/index.vue index 9190eb17..b3b1882e 100644 --- a/src/views/tool/ping/index.vue +++ b/src/views/tool/ping/index.vue @@ -8,9 +8,9 @@ import { RESULT_CODE_SUCCESS, } from '@/constants/result-constants'; import TerminalSSHView from '@/components/TerminalSSHView/index.vue'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import { pingV } from '@/api/tool/ping'; -const neInfoStore = useNeInfoStore(); +const neListStore = useNeListStore(); const { t } = useI18n(); /**网元参数 */ @@ -187,29 +187,16 @@ function fnMessage(res: Record) { /**钩子函数,界面打开初始化*/ onMounted(() => { // 获取网元网元列表 - neInfoStore.fnNelist().then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - if (res.data.length > 0) { - // 过滤不可用的网元 - for (const item of neInfoStore.getNeCascaderOptions) { - neCascaderOptions.value.push(item); - } - - if (neCascaderOptions.value.length === 0) { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - return; - } - } - } else { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } - }); + for (const item of neListStore.getNeCascaderOptions) { + neCascaderOptions.value.push(item); // 过滤不可用的网元 + } + if (neCascaderOptions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 2, + }); + return; + } }); /**钩子函数,界面关闭*/ diff --git a/src/views/tool/terminal/components/hostList.vue b/src/views/tool/terminal/components/hostList.vue index 2b014e67..de413ab7 100644 --- a/src/views/tool/terminal/components/hostList.vue +++ b/src/views/tool/terminal/components/hostList.vue @@ -5,14 +5,16 @@ import { ColumnsType } from 'ant-design-vue/es/table'; import { Modal, message } from 'ant-design-vue/es'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { delNeHost, listNeHost } from '@/api/ne/neHost'; +import useNeListStore from '@/store/modules/ne_list'; import useDictStore from '@/store/modules/dict'; import useI18n from '@/hooks/useI18n'; +const neListStore = useNeListStore(); const { getDict } = useDictStore(); const { t } = useI18n(); const EditModal = defineAsyncComponent( () => import('@/views/ne/neHost/components/EditModal.vue') ); -const emit = defineEmits(['modal','link']); +const emit = defineEmits(['modal', 'link']); /**字典数据 */ let dict: { @@ -35,7 +37,7 @@ let queryParams = reactive({ /**分组 */ groupId: undefined, /**名称 */ - title: '', + title: 'OMC', /**当前页数 */ pageNum: 1, /**每页条数 */ @@ -144,7 +146,7 @@ function fnGetList(pageNum?: number) { queryParams.pageNum = pageNum; } listNeHost(toRaw(queryParams)).then(res => { - if (res.code === RESULT_CODE_SUCCESS) { + if (res.code === RESULT_CODE_SUCCESS) { const { total, rows } = res.data; tablePagination.total = total; tableState.data = rows; @@ -185,7 +187,7 @@ let modalState: ModalStateType = reactive({ function fnModalVisibleByEdit(roleId?: undefined) { modalState.id = roleId; modalState.openByEdit = true; - emit('modal'); + emit('modal'); } /** @@ -286,7 +288,17 @@ onMounted(() => { - + { - + diff --git a/src/views/traceManage/pcap/file.vue b/src/views/traceManage/pcap/file.vue index c250c630..c52bfbb3 100644 --- a/src/views/traceManage/pcap/file.vue +++ b/src/views/traceManage/pcap/file.vue @@ -8,13 +8,13 @@ import { parseDateToStr } from '@/utils/date-utils'; import { getNeDirZip, getNeFile, listNeFiles } from '@/api/tool/neFile'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import ViewDrawer from '@/views/ne/neFile/components/ViewDrawer.vue'; -import useNeInfoStore from '@/store/modules/neinfo'; +import useNeListStore from '@/store/modules/ne_list'; import useTabsStore from '@/store/modules/tabs'; import useI18n from '@/hooks/useI18n'; import saveAs from 'file-saver'; import { useRoute, useRouter } from 'vue-router'; const tabsStore = useTabsStore(); -const neInfoStore = useNeInfoStore(); +const neListStore = useNeListStore(); const { t } = useI18n(); const route = useRoute(); const router = useRouter(); @@ -333,20 +333,10 @@ function fnDrawerOpen(row: Record) { } onMounted(() => { - // 获取网元网元列表 - neInfoStore.fnNelist().then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - if (res.data.length === 0) { - message.warning({ - content: t('common.noData'), - duration: 2, - }); - } else if (routeParams.neType && routeParams.neId) { - neTypeSelect.value = [routeParams.neType, routeParams.neId]; - fnNeChange(neTypeSelect.value, undefined); - } - } - }); + if (routeParams.neType && routeParams.neId) { + neTypeSelect.value = [routeParams.neType, routeParams.neId]; + fnNeChange(neTypeSelect.value, undefined); + } }); @@ -366,7 +356,7 @@ onMounted(() => { {{ t('views.logManage.neFile.neType') }}:  { {{ t('common.downloadText') }} - + { ); // 获取网元网元列表 - useNeInfoStore() - .fnNelist() - .then(res => { - if (res.code === RESULT_CODE_SUCCESS) { - if (res.data.length > 0) { - // 过滤不可用的网元 - neCascaderOptions.value = neInfoStore.getNeSelectOtions.filter( - (item: any) => { - return ['AMF', 'AUSF', 'SMF', 'UDM', 'PCF'].includes(item.value); - } - ); - if (neCascaderOptions.value.length === 0) { - message.warning({ - content: t('common.noData'), - duration: 3, - }); - return; - } - } - } else { - message.warning({ - content: t('common.noData'), - duration: 3, - }); - } - }) - .finally(() => { - // 获取列表数据 - fnGetList(); + neCascaderOptions.value = neListStore.getNeSelectOtions.filter( + (item: any) => { + return ['AMF', 'AUSF', 'SMF', 'UDM', 'PCF'].includes(item.value); // 过滤不可用的网元 + } + ); + if (neCascaderOptions.value.length === 0) { + message.warning({ + content: t('common.noData'), + duration: 3, }); + return; + } + // 获取列表数据 + fnGetList(); }); From 75a8b35226e48e731a907e71994aa41eeab0f6fa Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 7 May 2025 16:09:36 +0800 Subject: [PATCH 07/11] =?UTF-8?q?feat:=20=E7=9C=8B=E6=9D=BF=E5=90=AB?= =?UTF-8?q?=E6=9C=89=E7=BD=91=E5=85=83=E6=98=BE=E7=A4=BA=E5=8C=BA=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/modules/ne_list.ts | 10 +++++++--- .../overview/components/Topology/index.vue | 6 +++--- src/views/dashboard/overview/index.vue | 15 +++++++++++++-- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/store/modules/ne_list.ts b/src/store/modules/ne_list.ts index f16a9f18..4e31bb7a 100644 --- a/src/store/modules/ne_list.ts +++ b/src/store/modules/ne_list.ts @@ -91,7 +91,11 @@ const useNeListStore = defineStore('ne_list', { } return res; }, - // 含有网元 + /** + * 含有网元 + * @param metaNeType udm|ims|udm+ims + * @returns boolean + */ fnHasNe(metaNeType: string[]) { if (this.neList.length > 0) { const neTypes = this.neSelectOtions.map(item => item.value); @@ -106,10 +110,10 @@ const useNeListStore = defineStore('ne_list', { if (match) { // 同时匹配 - return metaNeType.every(item => neTypes.includes(item)); + return metaNeType.every(item => neTypes.includes(item.toUpperCase())); } // 有一种 - return metaNeType.some(item => neTypes.includes(item)); + return metaNeType.some(item => neTypes.includes(item.toUpperCase())); } return false; }, diff --git a/src/views/dashboard/overview/components/Topology/index.vue b/src/views/dashboard/overview/components/Topology/index.vue index 29fcde82..2f23218b 100644 --- a/src/views/dashboard/overview/components/Topology/index.vue +++ b/src/views/dashboard/overview/components/Topology/index.vue @@ -103,9 +103,9 @@ function handleRanderGraph( fitView: true, fitViewPadding: [20], autoPaint: true, - modes: { - default: ['drag-canvas', 'zoom-canvas'], - }, + // modes: { + // default: ['drag-canvas', 'zoom-canvas'], + // }, groupByTypes: false, nodeStateStyles: { selected: { diff --git a/src/views/dashboard/overview/index.vue b/src/views/dashboard/overview/index.vue index 2acdb29a..07fba887 100644 --- a/src/views/dashboard/overview/index.vue +++ b/src/views/dashboard/overview/index.vue @@ -360,6 +360,7 @@ onBeforeUnmount(() => {
{ :title="t('views.dashboard.overview.toRouter')" style="margin: 0 12px" v-perms:has="['dashboard:overview:imsUeNum']" + v-if="neListStore.fnHasNe(['ims'])" >
@@ -407,6 +409,7 @@ onBeforeUnmount(() => { @click="fnToRouter('SmfSub_2005')" :title="t('views.dashboard.overview.toRouter')" v-perms:has="['dashboard:overview:smfUeNum']" + v-if="neListStore.fnHasNe(['smf'])" >
@@ -419,7 +422,11 @@ onBeforeUnmount(() => {
-
+

   5G @@ -456,7 +463,11 @@ onBeforeUnmount(() => {

-
+

   4G From 583be8c8fe8d68023429592fb0cfeaff7ef33b9d Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 7 May 2025 16:56:14 +0800 Subject: [PATCH 08/11] =?UTF-8?q?fix:=20=E4=BB=AA=E8=A1=A8=E7=9B=98?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=95=B0=E6=8D=AE=E5=88=B7=E6=96=B0=E6=97=B6?= =?UTF-8?q?=E6=98=BE=E7=A4=BA0=E9=97=AA=E7=83=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/dashboard/overview/index.vue | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/views/dashboard/overview/index.vue b/src/views/dashboard/overview/index.vue index 07fba887..740ac8d2 100644 --- a/src/views/dashboard/overview/index.vue +++ b/src/views/dashboard/overview/index.vue @@ -192,18 +192,20 @@ async function fnGetSkim() { const results = await Promise.allSettled(requests.map(r => r.promise)); // 重置 - Object.assign(skimState, { - udmSubNum: 0, - smfUeNum: 0, - imsUeNum: 0, - gnbNum: 0, - gnbUeNum: 0, - enbNum: 0, - enbUeNum: 0, - }); + // Object.assign(skimState, { + // udmSubNum: 0, + // smfUeNum: 0, + // imsUeNum: 0, + // gnbNum: 0, + // gnbUeNum: 0, + // enbNum: 0, + // enbUeNum: 0, + // }); results.forEach((result, index) => { if (result.status === 'fulfilled') { requests[index].process(result.value); + } else { + requests[index].process(0); } }); From f3c75b99926f389e2c665ab0fad97c6616517b29 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 9 May 2025 12:03:34 +0800 Subject: [PATCH 09/11] =?UTF-8?q?fix:=20OAM=E8=AF=BB=E5=8F=96=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/ne/neInfo/components/OAMModal.vue | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/views/ne/neInfo/components/OAMModal.vue b/src/views/ne/neInfo/components/OAMModal.vue index dd770814..f2f8365a 100644 --- a/src/views/ne/neInfo/components/OAMModal.vue +++ b/src/views/ne/neInfo/components/OAMModal.vue @@ -78,14 +78,19 @@ function fnModalVisibleByTypeAndId(neType: string, neId: string) { .then(res => { if (res.code === RESULT_CODE_SUCCESS) { const data = res.data; + const ipType = data?.oamConfig?.ipType || 'ipv4'; + let omcIP = '127.0.0.1'; + if (data.oamConfig && Reflect.has(data.oamConfig, ipType)) { + omcIP = data?.oamConfig[ipType]; + } Object.assign(modalState.from, { - omcIP: data.oamConfig[data.oamConfig.ipType], - oamEnable: data.oamConfig.enable, - oamPort: data.oamConfig.port, - snmpEnable: data.snmpConfig.enable, - snmpPort: data.snmpConfig.port, - kpiEnable: data.kpiConfig.enable, - kpiTimer: data.kpiConfig.timer, + omcIP: omcIP, + oamEnable: data?.oamConfig?.enable || false, + oamPort: data?.oamConfig?.port || 33030, + snmpEnable: data?.snmpConfig?.enable || false, + snmpPort: data?.snmpConfig?.port || 4957, + kpiEnable: data?.kpiConfig?.enable || false, + kpiTimer: data?.kpiConfig?.timer || 60, }); modalState.title = t('views.ne.neInfo.oam.title'); modalState.openByEdit = true; From 602381b6a9e394c4305b840756ab625e32a6f8a3 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 9 May 2025 12:04:14 +0800 Subject: [PATCH 10/11] =?UTF-8?q?feat:=20=E7=BD=91=E5=85=83=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7=E5=AE=B9=E9=87=8F?= =?UTF-8?q?=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/locales/en-US.ts | 12 +++++++----- src/i18n/locales/zh-CN.ts | 4 +++- src/views/ne/neLicense/index.vue | 6 ++++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/i18n/locales/en-US.ts b/src/i18n/locales/en-US.ts index 76034127..96ae7b3b 100644 --- a/src/i18n/locales/en-US.ts +++ b/src/i18n/locales/en-US.ts @@ -474,6 +474,7 @@ export default { ipAddrTip: "Support IPV4/IPV6, synchronized change of configuration address", port: 'Port', portTip: "Network element port default:33030", + capability: 'Capability', serialNum: 'Serial Number', expiryDate: 'Expiry Date', normalcy: 'Normal', @@ -1252,11 +1253,12 @@ export default { downTipErr: "Failed to get file", deleteTip: "Confirm the delete file name is [{fileName}] File?", deleteTipErr: "Failed to delete file", - operateLog:'Operation Log', - cdrIMS:'Voice CDR', - cdrSMF:'Data CDR', - cdrSMSC:'SMS CDR', - cdrSGWC:'Roaming Data CDR', + sysloginLog:'System Login Log', + sysOperateLog:'System Operation Log', + cdrIMS:'CDR Voice', + cdrSMF:'CDR Data', + cdrSMSC:'CDR SMS', + cdrSGWC:'CDR Roaming Data', } }, monitor: { diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index 593d21c1..f7440396 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -474,6 +474,7 @@ export default { ipAddrTip: "支持IPV4/IPV6,同步变更配置地址", port: '服务端口', portTip: "网元服务端口,默认:33030", + capability: '用户容量', serialNum: '序列号', expiryDate: '许可证到期日期', normalcy: '正常', @@ -1252,7 +1253,8 @@ export default { downTipErr: "文件获取失败", deleteTip: "确认删除文件名为 【{fileName}】 文件?", deleteTipErr: "文件删除失败", - operateLog:'操作日志', + sysloginLog:'系统登录日志', + sysOperateLog:'系统操作日志', cdrIMS:'语音话单', cdrSMF:'数据话单', cdrSMSC:'短信话单', diff --git a/src/views/ne/neLicense/index.vue b/src/views/ne/neLicense/index.vue index 30d1a439..bb8f6fde 100644 --- a/src/views/ne/neLicense/index.vue +++ b/src/views/ne/neLicense/index.vue @@ -110,6 +110,12 @@ let tableColumns = ref([ align: 'left', width: 120, }, + { + title: t('views.ne.common.capability'), + dataIndex: 'capability', + align: 'left', + width: 100, + }, { title: t('common.remark'), dataIndex: 'remark', From ef084b4287f748eaffa87202108b1fb3531a6108 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 9 May 2025 14:22:01 +0800 Subject: [PATCH 11/11] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=96=87=E4=BB=B6=E5=AF=BC=E5=87=BA=E5=88=97=E8=A1=A8?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E7=B3=BB=E7=BB=9F=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E5=92=8C=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/logManage/exportFile/index.vue | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/views/logManage/exportFile/index.vue b/src/views/logManage/exportFile/index.vue index d7a2ba2a..6016e2b6 100644 --- a/src/views/logManage/exportFile/index.vue +++ b/src/views/logManage/exportFile/index.vue @@ -19,27 +19,32 @@ let sourceState = reactive({ /**文件列表 */ list: [ { - value: '/log/operate_log', - label: t('views.logManage.exportFile.operateLog'), + value: '/log/sys_log_login', + label: t('views.logManage.exportFile.sysloginLog'), path: '/usr/local/omc/backup', }, { - value: '/cdr/ims_cdr', + value: '/log/sys_log_operate', + label: t('views.logManage.exportFile.sysOperateLog'), + path: '/usr/local/omc/backup', + }, + { + value: '/cdr/ims_cdr_event', label: t('views.logManage.exportFile.cdrIMS'), path: '/usr/local/omc/backup', }, { - value: '/cdr/smf_cdr', + value: '/cdr/smf_cdr_event', label: t('views.logManage.exportFile.cdrSMF'), path: '/usr/local/omc/backup', }, { - value: '/cdr/smsc_cdr', + value: '/cdr/smsc_cdr_event', label: t('views.logManage.exportFile.cdrSMSC'), path: '/usr/local/omc/backup', }, { - value: '/cdr/sgwc_cdr', + value: '/cdr/sgwc_cdr_event', label: t('views.logManage.exportFile.cdrSGWC'), path: '/usr/local/omc/backup', },