diff --git a/.env.development b/.env.development index bc2a1e8c..dd1252ea 100644 --- a/.env.development +++ b/.env.development @@ -11,7 +11,7 @@ VITE_APP_NAME = "Core Network EMS" VITE_APP_CODE = "CN EMS" # 应用版本 -VITE_APP_VERSION = "2.240530.1" +VITE_APP_VERSION = "2.240627" # 接口基础URL地址-不带/后缀 VITE_API_BASE_URL = "/omc-api" diff --git a/.env.production b/.env.production index bd9d43f4..ab00a551 100644 --- a/.env.production +++ b/.env.production @@ -11,7 +11,7 @@ VITE_APP_NAME = "Core Network EMS" VITE_APP_CODE = "CN EMS" # 应用版本 -VITE_APP_VERSION = "2.240530.1" +VITE_APP_VERSION = "2.240627" # 接口基础URL地址-不带/后缀 VITE_API_BASE_URL = "/omc-api" diff --git a/README.md b/README.md index 4801b1a2..7c385343 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ ## 简介 -- 系统布局使用 [@ant-design-vue/pro-layout](https://github.com/vueComponent/pro-components) - 图标来源 [@ant-design/icons-vue](https://ant.design/components/icon) - 菜单图标使用自定义 iconfont `font_8d5l8fzk5b87iudi.js`图标文件 @@ -11,7 +10,7 @@ ```text Jenkins: http://192.168.2.166:3185/ Nginx: http://192.168.2.166:3188/#/index -后端暴露端口: http://192.168.2.166:3186 \ http://192.168.2.166:3187 +后端暴露端口: http://192.168.2.166:33030 新网管:192.168.5.13 @@ -73,10 +72,3 @@ https://192.168.5.27:31325/#/workloads?namespace=default ```text eyJhbGciOiJSUzI1NiIsImtpZCI6ImZFVUhIb1puLW04M1dfSUYyRU8zWlZueXBpNUh4T0hTRVlzU19jNlVGQ0kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLW44ZzRtIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI2M2NmYjAyNS01ZmQ0LTQ0ZTgtOTdiNC0yYWRiYWIxNzc5M2MiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.R3GRygFOjngTj-mEMBAHDeBxm3lpsXZYvC6cdTxByONtLrcMXDebwNVeKtAZ1V9qh2OrjD8n9CIygjULGPdfV6S520vjMh7Oa2q68nOyW49DNWQyYD8xLo-dQ6sX07fI7X_I3H35YUWW80jJAXjJawqIGXBSMG5intlo4tLTUSXmjCfhoQvFsgeRWu0j76pDvhMAvLPcgEXfTCi9tyL3yqJBIKONcKwmMlJeaKSR3pQk3KiibqrBO0MZclRozpke6J0ulfzTemwDDyCqBZmLsRPZ2yDd5hVBIJ9bHEcK0a25NmSFFzmd8XWQPZwg3Y4IbbY-8UhByGq0p9xS-7pGCQ ``` - -```ssh -# https://blog.csdn.net/m0_54706625/article/details/129721121 -sudo chmod 700 -/.ssh/ -sudo chmod 700 /home/mask/.ssh #这个尤其容易忽视掉,我就是从这个坑里爬出来。有木有很高兴呀! -sudo chmod 600 ~/.ssh/authorized_keys -``` diff --git a/package.json b/package.json index abca6f41..42b62bbf 100644 --- a/package.json +++ b/package.json @@ -14,21 +14,22 @@ "dependencies": { "@ant-design/icons-vue": "^7.0.1", "@antv/g6": "~4.8.24", - "@codemirror/lang-javascript": "^6.2.1", + "@codemirror/lang-javascript": "^6.2.2", "@codemirror/lang-yaml": "^6.1.1", - "@codemirror/merge": "^6.6.2", + "@codemirror/merge": "^6.6.3", "@codemirror/theme-one-dark": "^6.1.2", "@tato30/vue-pdf": "~1.9.7", - "@vueuse/core": "~10.10.0", - "@xterm/xterm": "^5.5.0", + "@vueuse/core": "~10.10.1", "@xterm/addon-fit": "^0.10.0", + "@xterm/xterm": "^5.5.0", "ant-design-vue": "^3.2.20", "antdv-pro-layout": "~3.3.5", + "antdv-pro-modal": "^3.1.0", "codemirror": "^6.0.1", "dayjs": "^1.11.11", "echarts": "~5.5.0", "file-saver": "^2.0.5", - "intl-tel-input": "~23.0.10", + "intl-tel-input": "~23.0.12", "js-base64": "^3.7.7", "js-cookie": "^3.0.5", "localforage": "^1.10.0", @@ -37,7 +38,7 @@ "pinia": "^2.1.7", "vue": "~3.3.13", "vue-i18n": "^9.13.1", - "vue-router": "^4.3.2", + "vue-router": "^4.4.0", "vue3-smooth-dnd": "^0.0.6", "xlsx": "~0.18.5" }, @@ -50,8 +51,8 @@ "less": "^4.2.0", "typescript": "~5.4.5", "unplugin-vue-components": "~0.26.0", - "vite": "~5.2.12", + "vite": "~5.3.1", "vite-plugin-compression": "~0.5.1", - "vue-tsc": "~2.0.19" + "vue-tsc": "~2.0.22" } } diff --git a/src/api/configManage/configParam.ts b/src/api/configManage/configParam.ts index 54101596..fd29a4b1 100644 --- a/src/api/configManage/configParam.ts +++ b/src/api/configManage/configParam.ts @@ -18,7 +18,7 @@ export async function getParamConfigTopTab(neType: string) { url: `/api/rest/databaseManagement/v1/elementType/omc_db/objectType/param_config`, method: 'get', params: { - SQL: `SELECT top_display,top_tag,method FROM param_config WHERE ne_type = '${neType}'`, + SQL: `SELECT id,top_display,top_tag,method FROM param_config WHERE ne_type = '${neType}' ORDER BY id ASC`, }, }); // 解析数据 diff --git a/src/api/ne/neInfo.ts b/src/api/ne/neInfo.ts index eaf01ba8..49156044 100644 --- a/src/api/ne/neInfo.ts +++ b/src/api/ne/neInfo.ts @@ -134,6 +134,7 @@ export function saveOAMFile(data: Record) { url: `/ne/info/oamFile`, method: 'put', data: data, + timeout: 60_000, }); } @@ -173,5 +174,6 @@ export function serviceNeAction(data: Record) { url: `/ne/action/service`, method: 'put', data: data, + timeout: 60_000, }); } diff --git a/src/api/neData/amf.ts b/src/api/neData/amf.ts index 97568b1d..2059e260 100644 --- a/src/api/neData/amf.ts +++ b/src/api/neData/amf.ts @@ -19,10 +19,24 @@ export function listAMFDataUE(query: Record) { * @returns object */ export function delAMFDataUE(ueIds: string | number) { - return request({ - url: `/neData/amf/ue/${ueIds}`, - method: 'delete', - timeout: 60_000, - }); - } - \ No newline at end of file + return request({ + url: `/neData/amf/ue/${ueIds}`, + method: 'delete', + timeout: 60_000, + }); +} + +/** + * AMF-UE会话列表导出 + * @param data 查询列表条件 + * @returns object + */ +export function exportAMFDataUE(data: Record) { + return request({ + url: '/neData/amf/ue/export', + method: 'post', + data, + responseType: 'blob', + timeout: 60_000, + }); +} diff --git a/src/api/neData/ims.ts b/src/api/neData/ims.ts index 9dea3073..1f1d67bc 100644 --- a/src/api/neData/ims.ts +++ b/src/api/neData/ims.ts @@ -19,10 +19,24 @@ export function listIMSDataCDR(query: Record) { * @returns object */ export function delIMSDataCDR(cdrIds: string | number) { - return request({ - url: `/neData/ims/cdr/${cdrIds}`, - method: 'delete', - timeout: 60_000, - }); - } - \ No newline at end of file + return request({ + url: `/neData/ims/cdr/${cdrIds}`, + method: 'delete', + timeout: 60_000, + }); +} + +/** + * IMS-CDR会话列表导出 + * @param data 查询列表条件 + * @returns object + */ +export function exportIMSDataCDR(data: Record) { + return request({ + url: '/neData/ims/cdr/export', + method: 'post', + data, + responseType: 'blob', + timeout: 60_000, + }); +} diff --git a/src/api/neData/mme.ts b/src/api/neData/mme.ts new file mode 100644 index 00000000..766431ca --- /dev/null +++ b/src/api/neData/mme.ts @@ -0,0 +1,42 @@ +import { request } from '@/plugins/http-fetch'; + +/** + * 查询MME-UE会话事件列表 + * @param query 查询参数 + * @returns object + */ +export function listMMEDataUE(query: Record) { + return request({ + url: '/neData/mme/ue/list', + method: 'get', + params: query, + }); +} + +/** + * MME-UE会话删除 + * @param id 信息ID + * @returns object + */ +export function delMMEDataUE(ueIds: string | number) { + return request({ + url: `/neData/mme/ue/${ueIds}`, + method: 'delete', + timeout: 60_000, + }); +} + +/** + * MME-UE会话列表导出 + * @param data 查询列表条件 + * @returns object + */ +export function exportMMEDataUE(data: Record) { + return request({ + url: '/neData/mme/ue/export', + method: 'post', + data, + responseType: 'blob', + timeout: 60_000, + }); +} diff --git a/src/api/neData/smf.ts b/src/api/neData/smf.ts new file mode 100644 index 00000000..4139c3ed --- /dev/null +++ b/src/api/neData/smf.ts @@ -0,0 +1,42 @@ +import { request } from '@/plugins/http-fetch'; + +/** + * 查询SMF-CDR会话事件 + * @param query 查询参数 + * @returns object + */ +export function listSMFDataCDR(query: Record) { + return request({ + url: '/neData/smf/cdr/list', + method: 'get', + params: query, + }); +} + +/** + * SMF-CDR会话删除 + * @param id 信息ID + * @returns object + */ +export function delSMFDataCDR(cdrIds: string | number) { + return request({ + url: `/neData/smf/cdr/${cdrIds}`, + method: 'delete', + timeout: 60_000, + }); +} + +/** + * SMF-CDR会话列表导出 + * @param data 查询列表条件 + * @returns object + */ +export function exportSMFDataCDR(data: Record) { + return request({ + url: '/neData/smf/cdr/export', + method: 'post', + data, + responseType: 'blob', + timeout: 60_000, + }); +} diff --git a/src/api/neData/udm_auth.ts b/src/api/neData/udm_auth.ts new file mode 100644 index 00000000..0af15c84 --- /dev/null +++ b/src/api/neData/udm_auth.ts @@ -0,0 +1,142 @@ +import { request } from '@/plugins/http-fetch'; + +/** + * UDM鉴权用户重载数据 + * @param neId 网元ID + * @returns object + */ +export function resetUDMAuth(neId: string) { + return request({ + url: `/neData/udm/auth/resetData/${neId}`, + method: 'put', + timeout: 180_000, + }); +} + +/** + * UDM鉴权用户列表 + * @param query 查询参数 + * @returns object + */ +export function listUDMAuth(query: Record) { + return request({ + url: '/neData/udm/auth/list', + method: 'get', + params: query, + }); +} + +/** + * UDM鉴权用户信息 + * @param neId 网元ID + * @param imsi IMSI + * @returns object + */ +export function getUDMAuth(neId: string, imsi: string) { + return request({ + url: `/neData/udm/auth/${neId}/${imsi}`, + method: 'get', + }); +} + +/** + * UDM鉴权用户新增 + * @param data 鉴权对象 + * @returns object + */ +export function addUDMAuth(data: Record) { + return request({ + url: `/neData/udm/auth/${data.neId}`, + method: 'post', + data: data, + timeout: 180_000, + }); +} + +/** + * UDM鉴权用户批量新增 + * @param data 鉴权对象 + * @param num 数量 + * @returns object + */ +export function batchAddUDMAuth(data: Record, num: number) { + return request({ + url: `/neData/udm/auth/${data.neId}/${num}`, + method: 'post', + data: data, + timeout: 180_000, + }); +} + +/** + * UDM鉴权用户修改 + * @param data 鉴权对象 + * @returns object + */ +export function updateUDMAuth(data: Record) { + return request({ + url: `/neData/udm/auth/${data.neId}`, + method: 'put', + data: data, + timeout: 180_000, + }); +} + +/** + * UDM鉴权用户删除 + * @param neId 网元ID + * @param imsi IMSI + * @returns object + */ +export function delUDMAuth(neId: string, imsi: string) { + return request({ + url: `/neData/udm/auth/${neId}/${imsi}`, + method: 'delete', + timeout: 180_000, + }); +} + +/** + * UDM鉴权用户批量删除 + * @param neId 网元ID + * @param imsi IMSI + * @param num 数量 + * @returns object + */ +export function batchDelUDMAuth(neId: string, imsi: string, num: number) { + return request({ + url: `/neData/udm/auth/${neId}/${imsi}/${num}`, + method: 'delete', + timeout: 180_000, + }); +} + +/** + * UDM鉴权用户导入 + * @param neId 网元ID + * @param data 表单数据对象 + * @returns object + */ +export function importUDMAuth(data: Record) { + return request({ + url: `/neData/udm/auth/import`, + method: 'post', + data, + timeout: 180_000, + }); +} + +/** + * UDM鉴权用户导出 + * @param data 数据参数 + * @returns bolb + */ +export function exportUDMAuth(data: Record) { + return request({ + url: '/neData/udm/auth/export', + method: 'post', + data, + responseType: 'blob', + timeout: 180_000, + }); +} diff --git a/src/api/neData/udm_sub.ts b/src/api/neData/udm_sub.ts new file mode 100644 index 00000000..b554c22d --- /dev/null +++ b/src/api/neData/udm_sub.ts @@ -0,0 +1,140 @@ +import { request } from '@/plugins/http-fetch'; + +/** + * UDM签约用户重载数据 + * @param neId 网元ID + * @returns object + */ +export function resetUDMSub(neId: string) { + return request({ + url: `/neData/udm/sub/resetData/${neId}`, + method: 'put', + timeout: 180_000, + }); +} + +/** + * UDM签约用户列表 + * @param query 查询参数 + * @returns object + */ +export function listUDMSub(query: Record) { + return request({ + url: '/neData/udm/sub/list', + method: 'get', + params: query, + }); +} + +/** + * UDM签约用户信息 + * @param neId 网元ID + * @param imsi IMSI + * @returns object + */ +export function getUDMSub(neId: string, imsi: string) { + return request({ + url: `/neData/udm/sub/${neId}/${imsi}`, + method: 'get', + }); +} + +/** + * UDM签约用户新增 + * @param data 签约对象 + * @returns object + */ +export function addUDMSub(data: Record) { + return request({ + url: `/neData/udm/sub/${data.neId}`, + method: 'post', + data: data, + timeout: 180_000, + }); +} + +/** + * UDM签约用户批量新增 + * @param data 签约对象 + * @param num 数量 + * @returns object + */ +export function batchAddUDMSub(data: Record, num: number) { + return request({ + url: `/neData/udm/sub/${data.neId}/${num}`, + method: 'post', + data: data, + timeout: 180_000, + }); +} + +/** + * UDM签约用户修改 + * @param data 签约对象 + * @returns object + */ +export function updateUDMSub(data: Record) { + return request({ + url: `/neData/udm/sub/${data.neId}`, + method: 'put', + data: data, + timeout: 180_000, + }); +} + +/** + * UDM签约用户删除 + * @param data 签约对象 + * @returns object + */ +export function delUDMSub(neId: string, imsi: string) { + return request({ + url: `/neData/udm/sub/${neId}/${imsi}`, + method: 'delete', + timeout: 180_000, + }); +} + +/** + * UDM签约用户批量删除 + * @param neId 网元ID + * @param imsi IMSI + * @param num 数量 + * @returns object + */ +export function batchDelUDMSub(neId: string, imsi: string, num: number) { + return request({ + url: `/neData/udm/sub/${neId}/${imsi}/${num}`, + method: 'delete', + timeout: 180_000, + }); +} + +/** + * UDM签约用户导出 + * @param data 数据参数 + * @returns bolb + */ +export function exportUDMSub(data: Record) { + return request({ + url: '/neData/udm/sub/export', + method: 'post', + data, + responseType: 'blob', + timeout: 180_000, + }); +} + +/** + * UDM签约用户导入 + * @param data 表单数据对象 + * @returns object + */ +export function importUDMSub(data: Record) { + return request({ + url: `/neData/udm/sub/import`, + method: 'post', + data, + timeout: 180_000, + }); +} diff --git a/src/api/neUser/auth.ts b/src/api/neUser/auth.ts deleted file mode 100644 index 57dc28d6..00000000 --- a/src/api/neUser/auth.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { request } from '@/plugins/http-fetch'; - -/** - * 签约鉴权导出 - * @param query 查询参数 - * @returns bolb - */ -export function exportAuth(query: Record) { - return request({ - url: '/ne/udm/auth/export', - method: 'post', - data: query, - responseType: 'blob', - timeout: 180_000, - }); -} - -/** - * 导入鉴权数据 - * @param neId 网元ID - * @param data 表单数据对象 - * @returns object - */ -export function importAuthData(data: FormData) { - return request({ - url: `/ne/udm/auth/import`, - method: 'post', - data, - dataType: 'form-data', - timeout: 180_000, - }); -} - -/** - * 查询鉴权列表 - * @param query 查询参数 - * @returns object - */ -export function listAuth(query: Record) { - return request({ - url: '/ne/udm/auth/list', - method: 'get', - params: query, - }); -} - -/** - * 查询重新更新加载全部 - * @param neId 网元ID - * @returns object - */ -export function loadAuth(neId: string) { - return request({ - url: `/ne/udm/auth/resetData/${neId}`, - method: 'put', - timeout: 180_000, - }); -} - -/** - * 查询鉴权详细 - * @param neId 网元ID - * @returns object - */ -export function getAuth(neId: string, imsi: string) { - return request({ - url: `/ne/udm/auth/${neId}/${imsi}`, - method: 'get', - }); -} - -/** - * 修改鉴权 - * @param data 鉴权对象 - * @returns object - */ -export function updateAuth(data: Record) { - return request({ - url: `/ne/udm/auth/${data.neId}`, - method: 'put', - data: data, - timeout: 180_000, - }); -} - -/** - * 新增鉴权 - * @param data 鉴权对象 - * @returns object - */ -export function addAuth(data: Record) { - return request({ - url: `/ne/udm/auth/${data.neId}`, - method: 'post', - data: data, - timeout: 180_000, - }); -} - -/** - * 批量新增鉴权 - * @param data 鉴权对象 - * @returns object - */ -export function batchAuth(data: Record) { - return request({ - url: `/ne/udm/auth/${data.neID}/${data.num}`, - method: 'post', - data: data, - timeout: 180_000, - }); -} - -/** - * 删除鉴权 - * @param data 鉴权对象 - * @returns object - */ -export function delAuth(neId: string, imsi: string) { - return request({ - url: `/ne/udm/auth/${neId}/${imsi}`, - method: 'delete', - timeout: 180_000, - }); -} - -/** - * 批量删除鉴权 - * @param data 鉴权对象 - * @returns object - */ -export function batchDelAuth(data: Record) { - return request({ - url: `/ne/udm/auth/${data.neID}/${data.imsi}/${data.num}`, - method: 'delete', - timeout: 180_000, - }); -} diff --git a/src/api/neUser/base5G.ts b/src/api/neUser/base5G.ts index b1769c44..2621ed53 100644 --- a/src/api/neUser/base5G.ts +++ b/src/api/neUser/base5G.ts @@ -25,8 +25,10 @@ export async function listBase5G(query: Record) { data.total = rows.length; data.rows = rows; } + // 模拟数据 - // data.rows =[{"address":"192.168.1.137:38412","id":"217","name":"attach-enb-100000-20","ueNum":0}] + // data.rows = [{"address":"192.168.1.137:38412","id":"217","name":"attach-enb-100000-20","ueNum":0}] + // data.rows = [{address: "192.168.8.223", id: 257, name: "SmallCell", ueNum: 0}] return data; } diff --git a/src/api/neUser/smf.ts b/src/api/neUser/smf.ts index a1221024..3a848850 100644 --- a/src/api/neUser/smf.ts +++ b/src/api/neUser/smf.ts @@ -1,6 +1,5 @@ import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { request } from '@/plugins/http-fetch'; -import { parseObjLineToHump } from '@/utils/parse-utils'; /** * 查询列表 @@ -21,46 +20,70 @@ export async function listUEInfoBySMF(query: Record) { msg: result.msg, }; // 解析数据 - if (result.code === RESULT_CODE_SUCCESS && Array.isArray(result.data.data)) { - const rows = parseObjLineToHump(result.data.data); - data.total = rows.length; - data.rows = rows; + if (result.code === RESULT_CODE_SUCCESS && result.data) { + if (Array.isArray(result.data.data)) { + const rows = result.data.data; + data.total = rows.length; + data.rows = rows; + } else { + Object.assign(data, result.data); + } } // 模拟数据 // data.code = RESULT_CODE_SUCCESS; + // data.total = 2; // data.rows = [ // { - // imsi: 'imsi-460002082101038', - // msisdn: 'msisdn-12307550000', + // imsi: 'imsi-460000100000090', + // msisdn: 'msisdn-12307550090', // pduSessionInfo: [ // { - // activeTime: '2024-05-08 11:08:22', + // activeTime: '2024-06-19 14:35:26', // dnn: 'ims', - // ipv4: '10.10.86.2', - // ipv6: '', - // pduSessionID: 5, - // ranN3IP: '192.168.5.100', - // sstSD: '1-000001', - // tai: '46000-001124', - // upState: 'Active', - // upfN3IP: '192.168.14.201', - // }, - // { - // activeTime: '2024-05-08 11:08:23', - // dnn: 'cmnet', - // ipv4: '10.10.86.201', + // ipv4: '10.10.48.8', // ipv6: '', // pduSessionID: 6, - // ranN3IP: '192.168.5.100', + // ranN3IP: '192.168.1.137', // sstSD: '1-000001', // tai: '46000-001124', // upState: 'Active', - // upfN3IP: '192.168.14.201', + // upfN3IP: '192.168.1.161', + // }, + // { + // activeTime: '2024-06-19 14:35:26', + // dnn: 'cmnet', + // ipv4: '10.10.48.9', + // ipv6: '2001:4860:4860::/64', + // pduSessionID: 7, + // ranN3IP: '192.168.1.137', + // sstSD: '1-000001', + // tai: '46000-001124', + // upState: 'Active', + // upfN3IP: '192.168.1.161', // }, // ], // ratType: 'NR', // }, + // { + // imsi: 'imsi-460602072701180', + // msisdn: 'msisdn-123460600080', + // pduSessionInfo: [ + // { + // activeTime: '2024-06-19 14:31:09', + // dnn: 'cmnet', + // ipv4: '10.10.48.4', + // ipv6: '', + // pduSessionID: 5, + // ranN3IP: '192.168.8.223', + // sstSD: '1-000001', + // tai: '46060-0001', + // upState: 'Active', + // upfN3IP: '192.168.1.161', + // }, + // ], + // ratType: 'EUTRAN', + // }, // ]; return data; } diff --git a/src/api/neUser/sub.ts b/src/api/neUser/sub.ts deleted file mode 100644 index 0eff71be..00000000 --- a/src/api/neUser/sub.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { request } from '@/plugins/http-fetch'; - -/** - * 签约列表导出 - * @param query 查询参数 - * @returns bolb - */ -export function exportSub(query: Record) { - return request({ - url: '/ne/udm/sub/export', - method: 'post', - data: query, - responseType: 'blob', - timeout: 180_000, - }); -} - -/** - * 导入签约数据 - * @param neId 网元ID - * @param data 表单数据对象 - * @returns object - */ -export function importSubData(data: FormData) { - return request({ - url: `/ne/udm/sub/import`, - method: 'post', - data, - dataType: 'form-data', - timeout: 180_000, - }); -} - -/** - * 查询重新更新加载全部 - * @param neId 网元ID - * @returns object - */ -export function loadSub(neId: string) { - return request({ - url: `/ne/udm/sub/resetData/${neId}`, - method: 'put', - timeout: 180_000, - }); -} - -/** - * 查询签约列表 - * @param query 查询参数 - * @returns object - */ -export function listSub(query: Record) { - return request({ - url: '/ne/udm/sub/list', - method: 'get', - params: query, - }); -} - -/** - * 查询签约详细 - * @param neId 网元ID - * @returns object - */ -export function getSub(neId: string, imsi: string) { - return request({ - url: `/ne/udm/sub/${neId}/${imsi}`, - method: 'get', - }); -} - -/** - * 修改签约 - * @param data 签约对象 - * @param neId 网元ID - * @returns object - */ -export function updateSub(neId: string, data: Record) { - return request({ - url: `/ne/udm/sub/${neId}`, - method: 'put', - data: data, - timeout: 180_000, - }); -} - -/** - * 新增签约 - * @param data 签约对象 - * @returns object - */ -export function addSub(neID: string, data: Record) { - return request({ - url: `/ne/udm/sub/${neID}`, - method: 'post', - data: data, - timeout: 180_000, - }); -} - -/** - * 批量新增新增签约 - * @param data 签约对象 - * @returns object - */ -export function batchAddSub(data: Record) { - return request({ - url: `/ne/udm/sub/${data.neID}/${data.num}`, - method: 'post', - data: data, - timeout: 180_000, - }); -} - -/** - * 删除签约 - * @param data 签约对象 - * @returns object - */ -export function delSub(neId: string, imsi: string) { - return request({ - url: `/ne/udm/sub/${neId}/${imsi}`, - method: 'delete', - timeout: 180_000, - }); -} - -/** - * 批量删除签约 - * @param data 签约对象 - * @returns object - */ -export function batchDelSub(data: Record) { - return request({ - url: `/ne/udm/sub/${data.neID}/${data.imsi}/${data.num}`, - method: 'delete', - timeout: 180_000, - }); -} diff --git a/src/api/traceManage/pcap.ts b/src/api/traceManage/pcap.ts index ed82aecb..1090ebbd 100644 --- a/src/api/traceManage/pcap.ts +++ b/src/api/traceManage/pcap.ts @@ -3,7 +3,7 @@ import { request } from '@/plugins/http-fetch'; // 网元抓包PACP 开始 export function dumpStart(data: Record) { return request({ - url: '/tcpdump/start', + url: '/trace/tcpdump/start', method: 'post', data: data, }); @@ -12,7 +12,7 @@ export function dumpStart(data: Record) { // 网元抓包PACP 结束 export function dumpStop(data: Record) { return request({ - url: '/tcpdump/stop', + url: '/trace/tcpdump/stop', method: 'post', data: data, }); @@ -21,7 +21,7 @@ export function dumpStop(data: Record) { // UPF标准版内部抓包 export function traceUPF(data: Record) { return request({ - url: '/tcpdump/traceUPF', + url: '/trace/tcpdump/traceUPF', method: 'post', data: data, }); diff --git a/src/components/CronModal/index.vue b/src/components/CronModal/index.vue index 5129a023..abd76ff7 100644 --- a/src/components/CronModal/index.vue +++ b/src/components/CronModal/index.vue @@ -1,9 +1,10 @@ - - - - diff --git a/src/components/GlobalMask/index.vue b/src/components/GlobalMask/index.vue new file mode 100644 index 00000000..9948332d --- /dev/null +++ b/src/components/GlobalMask/index.vue @@ -0,0 +1,138 @@ + + + + + + diff --git a/src/components/LockScreen/index.vue b/src/components/LockScreen/index.vue deleted file mode 100644 index 078b01a5..00000000 --- a/src/components/LockScreen/index.vue +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - diff --git a/src/components/TerminalTelnet/index.vue b/src/components/TerminalTelnet/index.vue index 34adf7e0..114bc14b 100644 --- a/src/components/TerminalTelnet/index.vue +++ b/src/components/TerminalTelnet/index.vue @@ -22,7 +22,7 @@ const props = defineProps({ /**窗口单行字符数 */ cols: { type: Number, - default: 100, + default: 120, }, /**窗口行数 */ rows: { diff --git a/src/components/UploadModal/index.vue b/src/components/UploadModal/index.vue index f8ad80f9..662927d9 100644 --- a/src/components/UploadModal/index.vue +++ b/src/components/UploadModal/index.vue @@ -35,19 +35,22 @@ const props = defineProps({ /**弹框关闭事件 */ function fnModalClose() { - if(props.loading) return + if (props.loading) return; emit('close'); } /**上传前检查或转换压缩 */ function fnBeforeUpload(file: FileType) { if (props.loading) return false; - // 检查文件大小 - if (props.size > 0) { + // 检查文件大小 + if (props.size > 0) { const fileSize = file.size; const isLtM = fileSize / 1024 / 1024 < props.size; if (!isLtM) { - message.error(`${t('components.UploadModal.allowFilter')} ${props.size}MB`, 3); + message.error( + `${t('components.UploadModal.allowFilter')} ${props.size}MB`, + 3 + ); return false; } } @@ -56,7 +59,10 @@ function fnBeforeUpload(file: FileType) { const fileName = file.name; const isAllowType = props.ext.some(v => fileName.endsWith(v)); if (!isAllowType) { - message.error(`${t('components.UploadModal.onlyAllow')} ${props.ext.join('、')}`, 3); + message.error( + `${t('components.UploadModal.onlyAllow')} ${props.ext.join('、')}`, + 3 + ); return false; } } @@ -65,19 +71,20 @@ function fnBeforeUpload(file: FileType) { /**上传请求发出 */ function fnUpload(up: UploadRequestOption) { - emit('upload', up.file) + emit('upload', up.file); } diff --git a/src/constants/cache-keys-constants.ts b/src/constants/cache-keys-constants.ts index e1e8393d..94e02304 100644 --- a/src/constants/cache-keys-constants.ts +++ b/src/constants/cache-keys-constants.ts @@ -10,8 +10,11 @@ export const CACHE_LOCAL_PRIMARY_COLOR = 'cache:local:primaryColor'; /**本地缓存-多语言 */ export const CACHE_LOCAL_I18N = 'cache:local:i18n'; -/**本地缓存-锁屏设置 */ -export const CACHE_LOCAL_LOCK = 'cache:local:Lock'; +/**本地缓存-遮罩设置 */ +export const CACHE_LOCAL_MASK = 'cache:local:mask'; + +/**本地缓存-锁屏密码 */ +export const CACHE_LOCAL_LOCK_PASSWD = 'cache:local:lock:passwd'; /**数据缓存表-表格排序 */ export const CACHE_DB_TABLE_DND = 'tbl_dnd'; diff --git a/src/i18n/locales/en-US.ts b/src/i18n/locales/en-US.ts index 1317170b..616bc8e8 100644 --- a/src/i18n/locales/en-US.ts +++ b/src/i18n/locales/en-US.ts @@ -130,7 +130,7 @@ export default { onlyAllow:'Only supports upload file formats', }, LockScreen: { - inputPlacePwd:'Please enter login password', + inputPlacePwd:'Lock Screen Password', validSucc:'Validation Passed', validError:'Validation Failure', backLogin:'Logout to Relogin', @@ -149,6 +149,7 @@ export default { page403: 'No Access', page404: 'Match Page Not Found', helpDoc: 'System User Documentation', + lockScreen: 'Lock Screen', account: { index: "Personal Center", profile: "Personal Info", @@ -185,7 +186,9 @@ export default { }, rightContent: { lock: "Lock Screen", - lockTip: "Confirmed to perform a lock screen?", + lockTip: "Confirmation of the lock screen?", + lockPasswd: "Unlock Password", + lockPasswdTip: "No password can be set", helpDoc: "System User Documentation", fullscreen: "Full Screen", logout: "Logout", @@ -559,8 +562,6 @@ export default { realTimeDataStart: "Turn on real-time data", realTimeDataStop: "Turn off real-time data", cdrInfo: "CDR Info", - neName: "NE name", - rmUID: "UID", time: "Time", rowInfo: "Info", type: "Type", @@ -570,19 +571,27 @@ export default { result: "Result", delTip: "Confirm deletion of the data item numbered [{msg}]?", tenantName: "Tenant Name", + exportTip: "Do you confirm to export the current query conditions of the CDR data? (Maximum 10,000 items can be exported.)", + smfChargingID: 'Charging ID', + smfSubscriptionIDData: 'Subscription ID Data', + smfSubscriptionIDType: 'Subscription ID Type', + smfDataVolumeUplink: 'Data Volume Uplink', + smfDataVolumeDownlink: 'Data Volume Downlink', + smfDataTotalVolume: 'Data Total Volume', + smfDuration: 'Duration', + smfInvocationTime: 'Invocation Time', }, ue: { eventType: "Event Type", realTimeDataStart: "Turn on real-time data", realTimeDataStop: "Turn off real-time data", ueInfo: "UE Info", - neName: "NE name", - rmUID: "UID", time: "Time", rowInfo: "Info", result: "Result", resultOk: "Successes", delTip: "Confirm deletion of the data item numbered [{msg}]?", + exportTip: "Do you confirm to export the event data of the current query condition? (Maximum 10,000 items can be exported.)", }, }, ne: { @@ -705,7 +714,7 @@ export default { uploadTitle: "Update Software", upload: "Upload", uploadNotFile: "No software files uploaded", - uploadBatch: "Update Softwares", + uploadBatch: "Batch Upload", uploadBatchMax: "Multiple packages can be uploaded, with up to {txt} selected at the same time.", uploadFileName: "Parses file names in the format of: amf-r2.240x.xx-xxx", name: "File Name", @@ -740,8 +749,9 @@ export default { upgradeBatch: "Batch Upgrade", upgradeBatchTip: "Do you perform new version upgrades on checked records?", upgradeNotNewVer: 'No new version found', + upgradeOMCVer: 'Rejection of batch operation upgrades OMC', upgradeDone: 'Update complete, service being reloaded', - upgradeFail: 'The update failed, check if the service terminal environment is available!', + upgradeFail: 'The update fails, please check whether the software file exists and whether the service terminal environment is available!', upgradeModal: 'Network Element Version Updates', }, neLicense: { @@ -1602,7 +1612,7 @@ export default { loginIp: 'Login Address', loginTime: 'Login Time', status: 'Status', - userNameTip:'The account cannot start with a number and can contain uppercase and lowercase letters, numbers, and no less than 5 digits', + userNameTip:'The account number can only contain strings of uppercase letters, lowercase letters and numbers with a minimum length of 6 digits', passwdTip:'The password should contain at least uppercase and lowercase letters, numbers, special symbols, and no less than 6 digits', nickNameTip:'Nicknames no less than 2 digits', emailTip:'Please enter the correct email address', @@ -1763,12 +1773,11 @@ export default { batchCancel:'Batch cancellation of authorization', }, dept:{ - classInfo:' Tenant Information', - className:'Name', - classId:'Number', - classSort:'Sorting', - status:'Status', - type:' Tenancy Asset', + classInfo:' Department Information', + className:'Department Name', + classId:'Department Number', + classSort:'Department Sorting', + status:'Department Status', createTime:'Creation Time', highClass:'Root Level', key:'Asset Key', @@ -1809,7 +1818,7 @@ export default { requestMe:'Request Method', host:'Request Host', operStatus:'Status', - operDate:'Time Stamp', + operDate:'Time', useTime:'Time Lap', logInfo:'Operation Log Information', delSure:'Are you sure to delete the data item with access number [{ids}]?', diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index 1f47f1c3..d6355204 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -57,7 +57,7 @@ export default { updateTime: '更新时间', remark: '备注', description: '说明', - operate: '操作', + operate: '更多操作', operateOk: '操作成功!', operateErr: '操作失败!', copyText: "复制", @@ -130,7 +130,7 @@ export default { onlyAllow:'只支持上传文件格式', }, LockScreen: { - inputPlacePwd:'请输入登录密码', + inputPlacePwd:'请输入锁屏密码', validSucc:'校验通过', validError:'校验失败', backLogin:'退出并重新登录', @@ -149,6 +149,7 @@ export default { page403: '没有访问权限', page404: '找不到匹配页面', helpDoc: '系统使用文档', + lockScreen: '锁屏', account: { index: "个人中心", profile: "个人信息", @@ -186,6 +187,8 @@ export default { rightContent: { lock: "锁屏", lockTip: "确认要进行锁屏吗?", + lockPasswd: "解锁密码", + lockPasswdTip: "可不设置密码", helpDoc: "系统使用文档", fullscreen: "全屏显示", logout: "退出登录", @@ -559,8 +562,6 @@ export default { realTimeDataStart: "开启实时数据", realTimeDataStop: "关闭实时数据", cdrInfo: "CDR信息", - neName: "网元名称", - rmUID: "资源标识", time: "记录时间", rowInfo: "记录信息", type: "记录类型", @@ -570,19 +571,27 @@ export default { result: "结果", delTip: "确认删除编号为【{msg}】的数据项?", tenantName: "租户名称", + exportTip: "确认导出当前查询条件的话单数据吗?(导出最大支持一万条)", + smfChargingID: '计费ID', + smfSubscriptionIDData: '订阅 ID 数据', + smfSubscriptionIDType: '订阅 ID 类型', + smfDataVolumeUplink: '数据量上行链路', + smfDataVolumeDownlink: '数据量下行链路', + smfDataTotalVolume: '数据总量', + smfDuration: '持续时间', + smfInvocationTime: '调用时间', }, ue: { eventType: "事件类型", realTimeDataStart: "开启实时数据", realTimeDataStop: "关闭实时数据", ueInfo: "UE信息", - neName: "网元名称", - rmUID: "资源标识", rowInfo: "记录信息", time: "记录时间", result: "结果", resultOk: "成功", delTip: "确认删除编号为【{msg}】的数据项?", + exportTip: "确认导出当前查询条件的事件数据吗?(导出最大支持一万条)", }, }, ne: { @@ -705,7 +714,7 @@ export default { uploadTitle: "上传软件", upload: "上传", uploadNotFile: "未上传软件文件", - uploadBatch: "上传软件包", + uploadBatch: "批量上传", uploadBatchMax: "可上传多个软件包,最多同时选择{txt}个。", uploadFileName: "解析文件名称格式如: amf-r2.240x.xx-xxx", name: "文件名", @@ -740,8 +749,9 @@ export default { upgradeBatch: "批量更新", upgradeBatchTip: "对勾选的记录进行新版本升级吗?", upgradeNotNewVer: '没有发现新版本', + upgradeOMCVer: '拒绝批量操作升级OMC', upgradeDone: '更新完成,服务正在重载', - upgradeFail: '更新失败,请检查服务终端环境是否可用!', + upgradeFail: '更新失败,请检查软件文件是否存在且服务终端环境是否可用!', upgradeModal: '网元版本更新', }, neLicense: { @@ -1602,7 +1612,7 @@ export default { loginIp: '登录地址', loginTime: '登录时间', status: '用户状态', - userNameTip:'账号不能以数字开头,可包含大写小写字母,数字,且不少于5位', + userNameTip:'账号只能包含大写字母、小写字母和数字的字符串,长度至少为6位', passwdTip:'密码至少包含大小写字母、数字、特殊符号,且不少于6位', nickNameTip:'昵称不少于2位', emailTip:'请输入正确的邮箱地址', @@ -1763,12 +1773,11 @@ export default { batchCancel:'批量取消授权', }, dept:{ - classInfo:'租户信息', - className:'名称', - classId:'编号', - classSort:'排序', - status:'状态', - type:'租赁类型', + classInfo:'部门信息', + className:'部门名称', + classId:'部门编号', + classSort:'部门排序', + status:'部门状态', createTime:'创建时间', highClass:'根级', key:'租赁标识', @@ -1804,7 +1813,7 @@ export default { operate:{ operId:'日志编号', moduleName:'模块名称', - workType:'业务类型', + workType:'操作类型', operUser:'操作人员', requestMe:'请求方式', host:'请求主机', diff --git a/src/layouts/BasicLayout.vue b/src/layouts/BasicLayout.vue index c35a736f..f8c8f72a 100644 --- a/src/layouts/BasicLayout.vue +++ b/src/layouts/BasicLayout.vue @@ -8,8 +8,16 @@ import { } from 'antdv-pro-layout'; import RightContent from './components/RightContent.vue'; import Tabs from './components/Tabs.vue'; +import GlobalMask from '@/components/GlobalMask/index.vue'; import { scriptUrl } from '@/assets/js/icon_font_8d5l8fzk5b87iudi'; -import { computed, reactive, watch, onMounted, onUnmounted } from 'vue'; +import { + computed, + reactive, + watch, + onMounted, + onUnmounted, + nextTick, +} from 'vue'; import useLayoutStore from '@/store/modules/layout'; import useRouterStore from '@/store/modules/router'; import useTabsStore from '@/store/modules/tabs'; @@ -21,6 +29,7 @@ const { proConfig, waterMarkContent } = useLayoutStore(); import useI18n from '@/hooks/useI18n'; import { getServerTime } from '@/api'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; + import { parseDateToStr } from '@/utils/date-utils'; import { parseUrlPath } from '@/plugins/file-static-url'; const { t, currentLocale } = useI18n(); @@ -159,8 +168,27 @@ function fnLocale(m: MenuDataItem) { return title; } +/**检查系统名称是否超出范围进行滚动 */ +function fnCheckAppNameOverflow() { + const container: HTMLDivElement | null = document.querySelector('.app-name'); + if (!container) return; + const text: HTMLDivElement | null = container.querySelector('.marquee'); + if (!text) return; + if (text.offsetWidth > container.offsetWidth) { + text.classList.add('app-name_scrollable'); + } else { + text.classList.remove('app-name_scrollable'); + } +} + +watch( + () => appStore.appName, + () => nextTick(fnCheckAppNameOverflow) +); + // onMounted(() => { + fnCheckAppNameOverflow(); fnGetServerTime(); useAlarmStore().fnGetActiveAlarmInfo(); }); @@ -224,10 +252,10 @@ onUnmounted(() => { v-model:selectedKeys="layoutState.selectedKeys" v-model:openKeys="layoutState.openKeys" :menu-data="menuData" - :breadcrumb="{ routes: breadcrumb } as any" + :breadcrumb="{ routes: breadcrumb }" v-bind="proConfig" - :iconfont-url="scriptUrl" - :locale="(fnLocale as any)" + :iconfont-url="scriptUrl" + :locale="fnLocale" > @@ -347,11 +377,27 @@ onUnmounted(() => { margin-right: 16px; } -.title { +.app-name { overflow: hidden; - text-overflow: ellipsis; + // text-overflow: ellipsis; white-space: nowrap; - width: 130px; + width: 148px; + + &_scrollable { + // padding-left: 100%; + display: inline-block; + animation: scrollable-animation linear 6s infinite both; + } + + @keyframes scrollable-animation { + 0% { + transform: translate3d(0, 0, 0); + } + + 100% { + transform: translate3d(-100%, 0, 0); + } + } } .footer { diff --git a/src/layouts/components/RightContent.vue b/src/layouts/components/RightContent.vue index e0b8b4a6..4b14994c 100644 --- a/src/layouts/components/RightContent.vue +++ b/src/layouts/components/RightContent.vue @@ -1,22 +1,23 @@ - - diff --git a/src/views/configManage/softwareManage/index.vue b/src/views/configManage/softwareManage/index.vue index b35a4116..0ec309e4 100644 --- a/src/views/configManage/softwareManage/index.vue +++ b/src/views/configManage/softwareManage/index.vue @@ -23,8 +23,8 @@ import useI18n from '@/hooks/useI18n'; import useNeInfoStore from '@/store/modules/neinfo'; import { FileType } from 'ant-design-vue/lib/upload/interface'; import { UploadRequestOption } from 'ant-design-vue/lib/vc-upload/interface'; -import useLockedStore from '@/store/modules/locked'; -const lockedStore = useLockedStore(); +import useMaskStore from '@/store/modules/mask'; +const maskStore = useMaskStore(); const { t } = useI18n(); /**查询参数 */ @@ -299,7 +299,7 @@ function fnFileModalOk() { if (type === 'run' && from.neType.toLowerCase() === 'omc') { if (res.code === RESULT_CODE_SUCCESS) { fnFileModalCancel(); - lockedStore.fnLock('reload'); + maskStore.handleMaskType('reload'); } else { message.error({ content: `${fileModalState.title} ${res.msg}`, @@ -919,8 +919,9 @@ onMounted(() => { - { - + { /> - { /> - + - { /> - + diff --git a/src/views/dashboard/amfUE/index.vue b/src/views/dashboard/amfUE/index.vue index 440fe880..7bfe5b4d 100644 --- a/src/views/dashboard/amfUE/index.vue +++ b/src/views/dashboard/amfUE/index.vue @@ -12,8 +12,9 @@ import { RESULT_CODE_SUCCESS, } from '@/constants/result-constants'; import useDictStore from '@/store/modules/dict'; -import { listAMFDataUE, delAMFDataUE } from '@/api/neData/amf'; +import { listAMFDataUE, delAMFDataUE, exportAMFDataUE } from '@/api/neData/amf'; import { OptionsType, WS } from '@/plugins/ws-websocket'; +import saveAs from 'file-saver'; import PQueue from 'p-queue'; import useUserStore from '@/store/modules/user'; const { t } = useI18n(); @@ -35,6 +36,9 @@ let dict: { ueEventCmState: [], }); +/**开始结束时间 */ +let queryRangePicker = ref<[string, string]>(['', '']); + /**查询参数 */ let queryParams = reactive({ /**网元类型 */ @@ -45,6 +49,10 @@ let queryParams = reactive({ tenantName: '', sortField: 'timestamp', sortOrder: 'desc', + /**开始时间 */ + startTime: '', + /**结束时间 */ + endTime: '', /**当前页数 */ pageNum: 1, /**每页条数 */ @@ -58,9 +66,12 @@ function fnQueryReset() { eventType: 'auth-result', imsi: '', tenantName: '', + startTime: '', + endTime: '', pageNum: 1, pageSize: 20, }); + queryRangePicker.value = ['', '']; tablePagination.current = 1; tablePagination.pageSize = 20; fnGetList(); @@ -255,6 +266,11 @@ function fnGetList(pageNum?: number) { if (pageNum) { queryParams.pageNum = pageNum; } + if (!queryRangePicker.value) { + queryRangePicker.value = ['', '']; + } + queryParams.startTime = queryRangePicker.value[0]; + queryParams.endTime = queryRangePicker.value[1]; listAMFDataUE(toRaw(queryParams)).then(res => { if (res.code === RESULT_CODE_SUCCESS && Array.isArray(res.rows)) { // 取消勾选 @@ -289,6 +305,39 @@ function fnGetList(pageNum?: number) { }); } +/**列表导出 */ +function fnExportList() { + if (modalState.confirmLoading) return; + Modal.confirm({ + title: t('common.tipTitle'), + content: t('views.dashboard.ue.exportTip'), + onOk() { + const hide = message.loading(t('common.loading'), 0); + const querys = toRaw(queryParams); + querys.pageSize = 10000; + exportAMFDataUE(querys) + .then(res => { + if (res.code === RESULT_CODE_SUCCESS) { + message.success({ + content: t('common.operateOk'), + duration: 3, + }); + saveAs(res.data, `amf_ue_event_export_${Date.now()}.xlsx`); + } else { + message.error({ + content: `${res.msg}`, + duration: 3, + }); + } + }) + .finally(() => { + hide(); + modalState.confirmLoading = false; + }); + }, + }); +} + /**实时数据开关 */ const realTimeData = ref(false); @@ -304,7 +353,7 @@ function fnRealTime() { params: { /**订阅通道组 * - * UE会话事件-AMF (GroupID:1010) + * AMF_UE会话事件(GroupID:1010) */ subGroupID: '1010', }, @@ -335,7 +384,7 @@ function wsMessage(res: Record) { if (!data?.groupId) { return; } - // ueEvent CDR会话事件 + // ueEvent AMF_UE会话事件 if (data.groupId === '1010') { const ueEvent = data.data; queue.add(async () => { @@ -423,7 +472,7 @@ onBeforeUnmount(() => { > - + { > + + + + + @@ -501,6 +566,11 @@ onBeforeUnmount(() => { {{ t('common.deleteText') }} + + + + {{ t('common.export') }} + @@ -638,11 +708,11 @@ onBeforeUnmount(() => { {{ t('views.dashboard.ue.ueInfo') }}
- {{ t('views.dashboard.ue.neName') }}: + {{ t('views.ne.common.neName') }}: {{ record.neName }}
- {{ t('views.dashboard.ue.rmUID') }}: + {{ t('views.ne.common.rmUid') }}: {{ record.rmUID }}
diff --git a/src/views/dashboard/imsCDR/index.vue b/src/views/dashboard/imsCDR/index.vue index 8714ffaa..9a8b74da 100644 --- a/src/views/dashboard/imsCDR/index.vue +++ b/src/views/dashboard/imsCDR/index.vue @@ -12,9 +12,14 @@ import { RESULT_CODE_SUCCESS, } from '@/constants/result-constants'; import useDictStore from '@/store/modules/dict'; -import { delIMSDataCDR, listIMSDataCDR } from '@/api/neData/ims'; +import { + delIMSDataCDR, + exportIMSDataCDR, + listIMSDataCDR, +} from '@/api/neData/ims'; import { parseDateToStr, parseDuration } from '@/utils/date-utils'; import { OptionsType, WS } from '@/plugins/ws-websocket'; +import saveAs from 'file-saver'; import PQueue from 'p-queue'; import useUserStore from '@/store/modules/user'; const { t } = useI18n(); @@ -33,6 +38,9 @@ let dict: { cdrCallType: [], }); +/**开始结束时间 */ +let queryRangePicker = ref<[string, string]>(['', '']); + /**查询参数 */ let queryParams = reactive({ /**网元类型 */ @@ -44,6 +52,10 @@ let queryParams = reactive({ tenantName: '', sortField: 'timestamp', sortOrder: 'desc', + /**开始时间 */ + startTime: '', + /**结束时间 */ + endTime: '', /**当前页数 */ pageNum: 1, /**每页条数 */ @@ -58,9 +70,12 @@ function fnQueryReset() { callerParty: '', calledParty: '', tenantName: '', + startTime: '', + endTime: '', pageNum: 1, pageSize: 20, }); + queryRangePicker.value = ['', '']; tablePagination.current = 1; tablePagination.pageSize = 20; fnGetList(); @@ -293,6 +308,11 @@ function fnGetList(pageNum?: number) { if (pageNum) { queryParams.pageNum = pageNum; } + if (!queryRangePicker.value) { + queryRangePicker.value = ['', '']; + } + queryParams.startTime = queryRangePicker.value[0]; + queryParams.endTime = queryRangePicker.value[1]; listIMSDataCDR(toRaw(queryParams)).then(res => { if (res.code === RESULT_CODE_SUCCESS && Array.isArray(res.rows)) { // 取消勾选 @@ -328,6 +348,39 @@ function fnGetList(pageNum?: number) { }); } +/**列表导出 */ +function fnExportList() { + if (modalState.confirmLoading) return; + Modal.confirm({ + title: t('common.tipTitle'), + content: t('views.dashboard.cdr.exportTip'), + onOk() { + const hide = message.loading(t('common.loading'), 0); + const querys = toRaw(queryParams); + querys.pageSize = 10000; + exportIMSDataCDR(querys) + .then(res => { + if (res.code === RESULT_CODE_SUCCESS) { + message.success({ + content: t('common.operateOk'), + duration: 3, + }); + saveAs(res.data, `ims_cdr_event_export_${Date.now()}.xlsx`); + } else { + message.error({ + content: `${res.msg}`, + duration: 3, + }); + } + }) + .finally(() => { + hide(); + modalState.confirmLoading = false; + }); + }, + }); +} + /**实时数据开关 */ const realTimeData = ref(false); @@ -343,7 +396,7 @@ function fnRealTime() { params: { /**订阅通道组 * - * CDR会话事件-IMS (GroupID:1005) + * IMS_CDR会话事件(GroupID:1005) */ subGroupID: '1005', }, @@ -492,6 +545,22 @@ onBeforeUnmount(() => { >
+ + + + + @@ -538,6 +607,22 @@ onBeforeUnmount(() => { }} + + + + {{ t('common.deleteText') }} + + + + + {{ t('common.export') }} + @@ -620,7 +705,7 @@ onBeforeUnmount(() => { @@ -649,11 +734,11 @@ onBeforeUnmount(() => { {{ t('views.dashboard.cdr.cdrInfo') }}
- {{ t('views.dashboard.cdr.neName') }}: + {{ t('views.ne.common.neName') }}: {{ record.neName }}
- {{ t('views.dashboard.cdr.rmUID') }}: + {{ t('views.ne.common.rmUid') }}: {{ record.rmUID }}
@@ -691,7 +776,7 @@ onBeforeUnmount(() => { diff --git a/src/views/dashboard/mmeUE/index.vue b/src/views/dashboard/mmeUE/index.vue new file mode 100644 index 00000000..74a6523d --- /dev/null +++ b/src/views/dashboard/mmeUE/index.vue @@ -0,0 +1,693 @@ + + + + + diff --git a/src/views/dashboard/mocn/components/setting.vue b/src/views/dashboard/mocn/components/setting.vue index 24a70087..dcf19ae6 100644 --- a/src/views/dashboard/mocn/components/setting.vue +++ b/src/views/dashboard/mocn/components/setting.vue @@ -56,8 +56,9 @@ watch( diff --git a/src/views/dashboard/mocn/index.vue b/src/views/dashboard/mocn/index.vue index 0ac90dda..783acc43 100644 --- a/src/views/dashboard/mocn/index.vue +++ b/src/views/dashboard/mocn/index.vue @@ -10,7 +10,7 @@ import UserActivity from '../overview/components/UserActivity/index.vue'; import AlarnTypeBar from './components/AlarnTypeBar/index.vue'; import setting from './components/setting.vue'; import UPFFlow from '../overview/components/UPFFlow/index.vue'; -import { listSub } from '@/api/neUser/sub'; +import { listUDMSub } from '@/api/neData/udm_sub'; import { listUENumBySMF } from '@/api/neUser/smf'; import { listUENumByIMS } from '@/api/neUser/ims'; import { listBase5G } from '@/api/neUser/base5G'; @@ -31,7 +31,7 @@ import { dbGetJSON } from '@/utils/cache-db-utils'; const router = useRouter(); const appStore = useAppStore(); const { t } = useI18n(); -const { wsSend, cdrEventSend, ueEventSend, upfTFSend } = useWS(); +const { wsSend, userActivitySend, upfTFSend } = useWS(); /**概览状态类型 */ type SkimStateType = { @@ -97,7 +97,7 @@ function fnGetNeState() { /**获取概览信息 */ async function fnGetSkim() { const resArr = await Promise.allSettled([ - listSub({ + listUDMSub({ neid: '001', pageNum: 1, pageSize: 1, @@ -157,8 +157,7 @@ async function fnGetSkim() { /**初始数据函数 */ function loadData() { fnGetNeState(); // 获取网元状态 - cdrEventSend(); - ueEventSend(); + userActivitySend(); upfTFSend(0); upfTFSend(7); upfTFSend(30); diff --git a/src/views/dashboard/overview/components/UserActivity/index.vue b/src/views/dashboard/overview/components/UserActivity/index.vue index f86e2f45..d668b5de 100644 --- a/src/views/dashboard/overview/components/UserActivity/index.vue +++ b/src/views/dashboard/overview/components/UserActivity/index.vue @@ -58,11 +58,11 @@ onMounted(() => { diff --git a/src/views/dashboard/overview/hooks/useUserActivity.ts b/src/views/dashboard/overview/hooks/useUserActivity.ts index 6f573517..5e307552 100644 --- a/src/views/dashboard/overview/hooks/useUserActivity.ts +++ b/src/views/dashboard/overview/hooks/useUserActivity.ts @@ -1,7 +1,9 @@ import { ref } from 'vue'; -/**ueEvent UE会话事件 数据解析 */ -export function ueEventParse(item: Record) { +/**ueEventAMFParse UE会话事件AMF 数据解析 */ +function ueEventAMFParse( + item: Record +): false | Record { let evData: Record = item.eventJSON; if (typeof evData === 'string') { try { @@ -12,8 +14,8 @@ export function ueEventParse(item: Record) { } return { - eType: 'ue', - eId: `ue_${item.id}_${Date.now()}`, + eType: 'amf_ue', + eId: `amf_ue_${item.id}_${Date.now()}`, eTime: +item.timestamp, id: item.id, type: item.eventType, @@ -21,8 +23,33 @@ export function ueEventParse(item: Record) { }; } -/**cdrEvent CDR会话事件 数据解析 */ -export function cdrEventParse(item: Record) { +/**ueEventMMEParse UE会话事件MME 数据解析 */ +function ueEventMMEParse( + item: Record +): false | Record { + let evData: Record = item.eventJSON; + if (typeof evData === 'string') { + try { + evData = JSON.parse(evData); + } catch (error) { + console.error(error); + } + } + + return { + eType: 'mme_ue', + eId: `mme_ue_${item.id}_${Date.now()}`, + eTime: +item.timestamp, + id: item.id, + type: item.eventType, + data: evData, + }; +} + +/**cdrEventIMSParse CDR会话事件IMS 数据解析 */ +function cdrEventIMSParse( + item: Record +): false | Record { let evData: Record = item.cdrJSON || item.CDR; if (typeof evData === 'string') { try { @@ -39,14 +66,73 @@ export function cdrEventParse(item: Record) { } return { - eType: 'cdr', - eId: `cdr_${item.id}_${Date.now()}`, + eType: 'ims_cdr', + eId: `ims_cdr_${item.id}_${Date.now()}`, eTime: +item.timestamp, id: item.id, data: evData, }; } +/**eventListParse 事件列表解析 */ +export function eventListParse( + type: 'ims_cdr' | 'amf_ue' | 'mme_ue', + data: any +) { + eventTotal.value += data.total; + for (const item of data.rows) { + let v: false | Record = false; + if (type === 'ims_cdr') { + v = cdrEventIMSParse(item); + } + if (type === 'amf_ue') { + v = ueEventAMFParse(item); + } + if (type === 'mme_ue') { + v = ueEventMMEParse(item); + } + + if (v) { + eventData.value.push(v); + } + } + + // 有数据进行排序 + if (eventData.value.length > 5) { + eventData.value.sort((a, b) => b.eTime - a.eTime); + } + if (eventData.value.length > 0) { + eventId.value = eventData.value[0].eId; + } +} + +/**eventItemParseAndPush 事件项解析并添加 */ +export async function eventItemParseAndPush( + type: 'ims_cdr' | 'amf_ue' | 'mme_ue', + item: any +) { + let v: false | Record = false; + if (type === 'ims_cdr') { + v = cdrEventIMSParse(item); + } + if (type === 'amf_ue') { + v = ueEventAMFParse(item); + } + if (type === 'mme_ue') { + v = ueEventMMEParse(item); + } + + if (v) { + eventData.value.unshift(v); + eventTotal.value += 1; + eventId.value = v.eId; + await new Promise(resolve => setTimeout(resolve, 800)); + if (eventData.value.length > 20) { + eventData.value.pop(); + } + } +} + /**CDR+UE事件数据 */ export const eventData = ref[]>([]); /**CDR+UE事件总量 */ diff --git a/src/views/dashboard/overview/hooks/useWS.ts b/src/views/dashboard/overview/hooks/useWS.ts index 2e26044e..854a122b 100644 --- a/src/views/dashboard/overview/hooks/useWS.ts +++ b/src/views/dashboard/overview/hooks/useWS.ts @@ -2,11 +2,8 @@ import { RESULT_CODE_ERROR } from '@/constants/result-constants'; import { OptionsType, WS } from '@/plugins/ws-websocket'; import { onBeforeUnmount, onMounted } from 'vue'; import { - ueEventParse, - cdrEventParse, - eventData, - eventTotal, - eventId, + eventListParse, + eventItemParseAndPush, userActivityReset, } from './useUserActivity'; import { @@ -52,44 +49,22 @@ export default function useWS() { // 普通信息 switch (requestId) { - // ueEvent UE会话事件 + // AMF_UE会话事件 case '1010': if (Array.isArray(data.rows)) { - eventTotal.value += data.total; - for (const item of data.rows) { - const v = ueEventParse(item); - if (v) { - eventData.value.push(v); - } - } - - // 有数据进行排序 - if (eventData.value.length > 10) { - eventData.value.sort((a, b) => b.eTime - a.eTime); - } - if (eventData.value.length > 0) { - eventId.value = eventData.value[0].eId; - } + eventListParse('amf_ue', data); } break; - //cdrEvent CDR会话事件 + // MME_UE会话事件 + case '1011': + if (Array.isArray(data.rows)) { + eventListParse('mme_ue', data); + } + break; + // IMS_CDR会话事件 case '1005': if (Array.isArray(data.rows)) { - eventTotal.value += data.total; - for (const item of data.rows) { - const v = cdrEventParse(item); - if (v) { - eventData.value.push(v); - } - } - - // 有数据进行排序 - if (eventData.value.length > 10) { - eventData.value.sort((a, b) => b.eTime - a.eTime); - } - if (eventData.value.length > 0) { - eventId.value = eventData.value[0].eId; - } + eventListParse('ims_cdr', data); } break; //UPF-总流量数 @@ -124,38 +99,22 @@ export default function useWS() { upfFlowParse(data.data); } break; - // ueEvent UE会话事件 + // AMF_UE会话事件 case '1010': if (data.data) { - queue.add(async () => { - const v = ueEventParse(data.data); - if (v) { - eventData.value.unshift(v); - eventTotal.value += 1; - eventId.value = v.eId; - await new Promise(resolve => setTimeout(resolve, 800)); - if (eventData.value.length > 20) { - eventData.value.pop(); - } - } - }); + queue.add(() => eventItemParseAndPush('amf_ue', data.data)); } break; - // cdrEvent CDR会话事件 + // MME_UE会话事件 + case '1011': + if (data.data) { + queue.add(() => eventItemParseAndPush('mme_ue', data.data)); + } + break; + // IMS_CDR会话事件 case '1005': if (data.data) { - queue.add(async () => { - const v = cdrEventParse(data.data); - if (v) { - eventData.value.unshift(v); - eventTotal.value += 1; - eventId.value = v.eId; - await new Promise(resolve => setTimeout(resolve, 800)); - if (eventData.value.length > 20) { - eventData.value.pop(); - } - } - }); + queue.add(() => eventItemParseAndPush('ims_cdr', data.data)); } break; } @@ -188,27 +147,38 @@ export default function useWS() { }); } - /**ueEvent UE会话事件 发消息*/ - function ueEventSend() { + /**userActivitySend 用户行为事件基础列表数据 发消息*/ + function userActivitySend() { + // AMF_UE会话事件 ws.send({ requestId: '1010', - type: 'ue', + type: 'amf_ue', data: { neType: 'AMF', neId: '001', sortField: 'timestamp', sortOrder: 'desc', pageNum: 1, - pageSize: 10, + pageSize: 5, }, }); - } - - /**cdrEvent CDR会话事件 发消息*/ - function cdrEventSend() { + // MME_UE会话事件 + ws.send({ + requestId: '1011', + type: 'mme_ue', + data: { + neType: 'MME', + neId: '001', + sortField: 'timestamp', + sortOrder: 'desc', + pageNum: 1, + pageSize: 5, + }, + }); + // IMS_CDR会话事件 ws.send({ requestId: '1005', - type: 'cdr', + type: 'ims_cdr', data: { neType: 'IMS', neId: '001', @@ -216,7 +186,7 @@ export default function useWS() { sortField: 'timestamp', sortOrder: 'desc', pageNum: 1, - pageSize: 10, + pageSize: 5, }, }); } @@ -228,10 +198,11 @@ export default function useWS() { /**订阅通道组 * * 指标UPF (GroupID:12) - * UE会话事件-AMF (GroupID:1010) - * CDR会话事件-IMS (GroupID:1005) + * AMF_UE会话事件(GroupID:1010) + * MME_UE会话事件(GroupID:1011) + * IMS_CDR会话事件(GroupID:1005) */ - subGroupID: '12,1010,1005', + subGroupID: '12,1010,1011,1005', }, onmessage: wsMessage, onerror: wsError, @@ -248,8 +219,7 @@ export default function useWS() { return { wsSend, - cdrEventSend, - ueEventSend, + userActivitySend, upfTFSend, }; } diff --git a/src/views/dashboard/overview/index.vue b/src/views/dashboard/overview/index.vue index 11aada31..60a2e1ee 100644 --- a/src/views/dashboard/overview/index.vue +++ b/src/views/dashboard/overview/index.vue @@ -9,7 +9,7 @@ import NeResources from './components/NeResources/index.vue'; 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 { listUDMSub } from '@/api/neData/udm_sub'; import { listUENumBySMF } from '@/api/neUser/smf'; import { listUENumByIMS } from '@/api/neUser/ims'; import { listBase5G } from '@/api/neUser/base5G'; @@ -32,7 +32,7 @@ import useNeInfoStore from '@/store/modules/neinfo'; const router = useRouter(); const appStore = useAppStore(); const { t } = useI18n(); -const { wsSend, cdrEventSend, ueEventSend, upfTFSend } = useWS(); +const { wsSend, userActivitySend, upfTFSend } = useWS(); /**网元参数 */ let neOtions = ref[]>([]); @@ -104,7 +104,7 @@ function fnGetNeState() { /**获取概览信息 */ async function fnGetSkim() { const resArr = await Promise.allSettled([ - listSub({ + listUDMSub({ neid: '001', pageNum: 1, pageSize: 1, @@ -164,8 +164,7 @@ async function fnGetSkim() { /**初始数据函数 */ function loadData() { fnGetNeState(); // 获取网元状态 - cdrEventSend(); - ueEventSend(); + userActivitySend(); upfTFSend(0); upfTFSend(7); upfTFSend(30); diff --git a/src/views/dashboard/smfCDR/index.vue b/src/views/dashboard/smfCDR/index.vue new file mode 100644 index 00000000..ad726ee6 --- /dev/null +++ b/src/views/dashboard/smfCDR/index.vue @@ -0,0 +1,785 @@ + + + + + diff --git a/src/views/faultManage/active-alarm/index.vue b/src/views/faultManage/active-alarm/index.vue index 9f35c3d5..6d14c9b3 100644 --- a/src/views/faultManage/active-alarm/index.vue +++ b/src/views/faultManage/active-alarm/index.vue @@ -16,12 +16,14 @@ import { exportAll, } from '@/api/faultManage/actAlarm'; import useI18n from '@/hooks/useI18n'; +import useNeInfoStore from '@/store/modules/neinfo'; import useDictStore from '@/store/modules/dict'; import saveAs from 'file-saver'; import TableColumnsDnd from '@/components/TableColumnsDnd/index.vue'; import { writeSheet } from '@/utils/execl-utils'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { readLoalXlsx } from '@/utils/execl-utils'; +const neInfoStore = useNeInfoStore(); const { getDict } = useDictStore(); const { t, currentLocale } = useI18n(); @@ -741,6 +743,8 @@ onMounted(() => { dict.activeAlarmSeverity = resArr[3].value; } }); + // 获取网元网元列表 + useNeInfoStore().fnNelist(); fnGetList(); }); @@ -758,9 +762,14 @@ onMounted(() => { - + @@ -1036,15 +1045,17 @@ onMounted(() => { - { :data-source="alarmTableState.data" :size="alarmTableState.size" :pagination="false" - :scroll="{ x: 1700, y: '82vh' }" + :scroll="{ x: 1700, y: '88vh' }" > - + - { - + - { :label="t('views.faultManage.activeAlarm.neType')" name="neType" > - - + :placeholder="t('common.inputPlease')" + /> @@ -1363,11 +1377,12 @@ onMounted(() => { - + - { - + diff --git a/src/views/faultManage/event/index.vue b/src/views/faultManage/event/index.vue index 7ea562b2..06390c5b 100644 --- a/src/views/faultManage/event/index.vue +++ b/src/views/faultManage/event/index.vue @@ -8,13 +8,14 @@ import { ColumnsType } from 'ant-design-vue/lib/table'; import { listAct, exportAll } from '@/api/faultManage/eventAlarm'; import useI18n from '@/hooks/useI18n'; import useDictStore from '@/store/modules/dict'; +import useNeInfoStore from '@/store/modules/neinfo'; import saveAs from 'file-saver'; import TableColumnsDnd from '@/components/TableColumnsDnd/index.vue'; import { writeSheet } from '@/utils/execl-utils'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; -import { readLoalXlsx } from '@/utils/execl-utils'; +const neInfoStore = useNeInfoStore(); const { getDict } = useDictStore(); -const { t, currentLocale } = useI18n(); +const { t } = useI18n(); /**字典数据 */ let dict: { @@ -431,6 +432,8 @@ onMounted(() => { dict.activeAlarmSeverity = resArr[3].value; } }); + // 获取网元网元列表 + useNeInfoStore().fnNelist(); fnGetList(); }); @@ -448,9 +451,14 @@ onMounted(() => { - + @@ -665,8 +673,9 @@ onMounted(() => { - { {{ modalState.from.specificProblem }} - + diff --git a/src/views/faultManage/fault-setting/index.vue b/src/views/faultManage/fault-setting/index.vue index 7cb2a3be..d65a5063 100644 --- a/src/views/faultManage/fault-setting/index.vue +++ b/src/views/faultManage/fault-setting/index.vue @@ -94,7 +94,7 @@ function fnFormLogSetFinish() { /**告警前转接口对象信息状态 */ let forwardState: ModalStateType = reactive({ - title:t('views.faultManage.faultSetting.forwardSet'), + title: t('views.faultManage.faultSetting.forwardSet'), from: { interface: 'email', emailObj: [], @@ -128,11 +128,15 @@ function fnFormForwardFinish() { forwardStateFrom.validate().then(() => { forwardState.confirmLoading = true; const from = toRaw(forwardState.from); - console.log(from); updateForwardSet(from) .then(res => { if (res.code === RESULT_CODE_SUCCESS) { - message.success( t('common.msgSuccess', { msg: t('views.faultManage.faultSetting.save')}), 3); + message.success( + t('common.msgSuccess', { + msg: t('views.faultManage.faultSetting.save'), + }), + 3 + ); } else { message.warning(t('views.faultManage.faultSetting.noChange'), 3); } @@ -158,7 +162,6 @@ onMounted(() => { if (resArr[1].status === 'fulfilled') { const result = resArr[1].value; if (result.code === RESULT_CODE_SUCCESS) { - console.log(result.data); let finalData: any = { emailObj: result.data[0]['to_user'], smsObj: result.data[1]['to_user'], @@ -273,12 +276,11 @@ onMounted(() => { - - + + { :token-separators="[',']" > - + { dict.activeAlarmSeverity = resArr[3].value; } }); + // 获取网元网元列表 + useNeInfoStore().fnNelist(); fnGetList(); }); @@ -574,10 +578,12 @@ onMounted(() => { :label="t('views.faultManage.activeAlarm.neType')" name="ne_type" > - + :placeholder="t('common.inputPlease')" + /> @@ -818,8 +824,9 @@ onMounted(() => { - { - + diff --git a/src/views/monitor/job/index.vue b/src/views/monitor/job/index.vue index ca5e5adb..f5c345f5 100644 --- a/src/views/monitor/job/index.vue +++ b/src/views/monitor/job/index.vue @@ -551,7 +551,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); } @@ -841,8 +845,9 @@ onMounted(() => { - { {{ t('common.close') }} - + - { /> - + { - { {{ t('common.close') }} - + diff --git a/src/views/monitor/topology/graph.ts b/src/views/monitor/topology/graph.ts index 22642f8a..8e526c79 100644 --- a/src/views/monitor/topology/graph.ts +++ b/src/views/monitor/topology/graph.ts @@ -1566,9 +1566,6 @@ export function randerGroph( collapseArray ); break; - case 'restart': - console.log('restart'); - break; case 'show': showItems(graph); break; diff --git a/src/views/monitor/topology/index.vue b/src/views/monitor/topology/index.vue index e4148c39..df4f799d 100644 --- a/src/views/monitor/topology/index.vue +++ b/src/views/monitor/topology/index.vue @@ -139,8 +139,7 @@ function fnGetList(refresh: boolean = false) { } }) .then(hasNeList => { - if (!hasNeList) return; - console.log(graphG6Data) + if (!hasNeList) return; if (refresh) { // graphG6.value.get('canvas').set('localRefresh', true); graphG6.value.destroy(); diff --git a/src/views/monitor/topologyBuild/components/GraphEditModal.vue b/src/views/monitor/topologyBuild/components/GraphEditModal.vue index 89dbd95b..79bc35f3 100644 --- a/src/views/monitor/topologyBuild/components/GraphEditModal.vue +++ b/src/views/monitor/topologyBuild/components/GraphEditModal.vue @@ -175,8 +175,10 @@ function fnModalCancel() { diff --git a/src/views/monitor/topologyBuild/hooks/useEdge.ts b/src/views/monitor/topologyBuild/hooks/useEdge.ts index 0406ee87..066fdde9 100644 --- a/src/views/monitor/topologyBuild/hooks/useEdge.ts +++ b/src/views/monitor/topologyBuild/hooks/useEdge.ts @@ -173,9 +173,7 @@ export default function useEdge() { edge.type = 'loop'; } // 不存在fontWeight会触发异常 - if(!edge.labelCfg.style.fontWeight){ - console.log(edge) - debugger + if(!edge.labelCfg.style.fontWeight){ edge.labelCfg.style.fontWeight = 500 } // 存在更新,新增id是#不监听变化 diff --git a/src/views/monitor/topologyBuild/hooks/useGraph.ts b/src/views/monitor/topologyBuild/hooks/useGraph.ts index 751ccdc9..f9339607 100644 --- a/src/views/monitor/topologyBuild/hooks/useGraph.ts +++ b/src/views/monitor/topologyBuild/hooks/useGraph.ts @@ -94,7 +94,7 @@ export default function useGraph() {
`; }, handleMenuClick(target, item) { - console.log(target, item); + // console.log(target, item); const targetId = target.id; switch (targetId) { case 'create-edge': @@ -223,7 +223,7 @@ export default function useGraph() { `; }, handleMenuClick(target, item) { - console.log(target, item); + // console.log(target, item); const targetId = target.id; switch (targetId) { case 'edit': @@ -302,7 +302,7 @@ export default function useGraph() { `; }, handleMenuClick(target, item) { - console.log(target, item); + // console.log(target, item); const targetId = target.id; switch (targetId) { case 'edit': diff --git a/src/views/monitor/topologyBuild/index.vue b/src/views/monitor/topologyBuild/index.vue index b68fbe1b..a5ba776a 100644 --- a/src/views/monitor/topologyBuild/index.vue +++ b/src/views/monitor/topologyBuild/index.vue @@ -142,7 +142,7 @@ function fnModalOk() { modalState.confirmLoading = true; const hide = message.loading(t('common.loading'), 0); // 根据类型选择函数 - const groupName = from.group.trim() + const groupName = from.group.trim(); saveGraphData(groupName, graphG6.value.save()) .then((res: any) => { if (res.code === RESULT_CODE_SUCCESS) { @@ -325,8 +325,8 @@ onMounted(() => { - {
- + diff --git a/src/views/ne/neConfPara5G/components/Para5GForm.vue b/src/views/ne/neConfPara5G/components/Para5GForm.vue index 7a3c2ab3..d9da3bb1 100644 --- a/src/views/ne/neConfPara5G/components/Para5GForm.vue +++ b/src/views/ne/neConfPara5G/components/Para5GForm.vue @@ -213,7 +213,7 @@ onMounted(() => {}); {}); - + { - { /> - + diff --git a/src/views/ne/neHost/index.vue b/src/views/ne/neHost/index.vue index 0f47751f..31c0c4ae 100644 --- a/src/views/ne/neHost/index.vue +++ b/src/views/ne/neHost/index.vue @@ -414,7 +414,7 @@ function fnModalTest() { const validateArr = ['title', 'addr', 'port', 'user']; if (form.authMode === '0') { validateArr.push('password'); - } + } if (form.authMode === '1') { validateArr.push('privateKey'); } @@ -626,8 +626,10 @@ onMounted(() => { - { - + diff --git a/src/views/ne/neHostCommand/index.vue b/src/views/ne/neHostCommand/index.vue index dd3abb3f..221b0742 100644 --- a/src/views/ne/neHostCommand/index.vue +++ b/src/views/ne/neHostCommand/index.vue @@ -497,8 +497,10 @@ onMounted(() => { - { /> - + diff --git a/src/views/ne/neInfo/components/BackConfModal.vue b/src/views/ne/neInfo/components/BackConfModal.vue index 361c1229..3d6615dd 100644 --- a/src/views/ne/neInfo/components/BackConfModal.vue +++ b/src/views/ne/neInfo/components/BackConfModal.vue @@ -244,8 +244,9 @@ defineExpose({ diff --git a/src/views/ne/neInfo/components/EditModal.vue b/src/views/ne/neInfo/components/EditModal.vue index d2baf84a..28ff15e6 100644 --- a/src/views/ne/neInfo/components/EditModal.vue +++ b/src/views/ne/neInfo/components/EditModal.vue @@ -3,7 +3,6 @@ import { reactive, onMounted, toRaw, watch } from 'vue'; import { message, Form, Modal } from 'ant-design-vue/lib'; import useI18n from '@/hooks/useI18n'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; -import useNeInfoStore from '@/store/modules/neinfo'; import { NE_TYPE_LIST } from '@/constants/ne-constants'; import { regExpIPv4, regExpIPv6 } from '@/utils/regular-utils'; import { getNeInfo, addNeInfo, updateNeInfo } from '@/api/ne/neInfo'; @@ -124,9 +123,9 @@ let modalState: ModalStateType = reactive({ title: 'SSH_NE_22', addr: '', port: 22, - user: 'user', - authMode: '0', - password: 'user', + user: 'omcuser', + authMode: '2', + password: '', privateKey: '', passPhrase: '', remark: '', @@ -138,9 +137,9 @@ let modalState: ModalStateType = reactive({ title: 'Telnet_NE_4100', addr: '', port: 4100, - user: 'user', + user: 'admin', authMode: '0', - password: 'user', + password: 'admin', remark: '', }, ], @@ -224,6 +223,12 @@ function fnModalVisibleByEdit(editId: string) { modalState.confirmLoading = false; hide(); if (res.code === RESULT_CODE_SUCCESS) { + // OMC没有telnet + if (res.data.neType === 'OMC') { + res.data.hosts = res.data.hosts.filter( + (s: any) => s.hostType === 'ssh' + ); + } Object.assign(modalState.from, res.data); modalState.title = t('views.ne.neInfo.editTitle'); modalState.visibleByEdit = true; @@ -250,9 +255,8 @@ function fnModalOk() { .then(res => { if (res.code === RESULT_CODE_SUCCESS) { message.success(t('common.operateOk'), 3); - // 刷新缓存的网元信息 - useNeInfoStore().fnRefreshNelist(); - emit('ok'); + // 返回无引用信息 + emit('ok', JSON.parse(JSON.stringify(from))); fnModalCancel(); } else { message.error({ @@ -288,6 +292,10 @@ function fnModalCancel() { */ function fnNeTypeChange(v: any) { const hostsLen = modalState.from.hosts.length; + // OMC没有telnet + if (hostsLen >= 2 && v === 'OMC') { + modalState.from.hosts.splice(1, hostsLen); + } // 网元默认只含22和4100 if (hostsLen === 3 && v !== 'UPF') { modalState.from.hosts.pop(); @@ -349,8 +357,10 @@ onMounted(() => { diff --git a/src/views/ne/neLicense/components/UploadLicenseFile.vue b/src/views/ne/neLicense/components/UploadLicenseFile.vue index 1dd5cf07..265efb80 100644 --- a/src/views/ne/neLicense/components/UploadLicenseFile.vue +++ b/src/views/ne/neLicense/components/UploadLicenseFile.vue @@ -185,8 +185,9 @@ onMounted(() => {}); diff --git a/src/views/ne/neQuickSetup/components/NeInfoConfig.vue b/src/views/ne/neQuickSetup/components/NeInfoConfig.vue index a0c61d58..4e37c975 100644 --- a/src/views/ne/neQuickSetup/components/NeInfoConfig.vue +++ b/src/views/ne/neQuickSetup/components/NeInfoConfig.vue @@ -64,9 +64,9 @@ let modalState: ModalStateType = reactive({ title: 'SSH_NE_22', addr: '', port: 22, - user: 'user', - authMode: '0', - password: 'user', + user: 'omcuser', + authMode: '2', + password: '', privateKey: '', passPhrase: '', remark: '', diff --git a/src/views/ne/neSoftware/components/EditModal.vue b/src/views/ne/neSoftware/components/EditModal.vue index 8221bc81..e00e2b70 100644 --- a/src/views/ne/neSoftware/components/EditModal.vue +++ b/src/views/ne/neSoftware/components/EditModal.vue @@ -344,8 +344,10 @@ onMounted(() => {}); diff --git a/src/views/ne/neSoftware/components/UploadMoreFile.vue b/src/views/ne/neSoftware/components/UploadMoreFile.vue index 93e7ee1b..50a6bf10 100644 --- a/src/views/ne/neSoftware/components/UploadMoreFile.vue +++ b/src/views/ne/neSoftware/components/UploadMoreFile.vue @@ -1,12 +1,12 @@ - + diff --git a/src/views/ne/neVersion/index.vue b/src/views/ne/neVersion/index.vue index d8295cee..5458c6a2 100644 --- a/src/views/ne/neVersion/index.vue +++ b/src/views/ne/neVersion/index.vue @@ -1,7 +1,12 @@ diff --git a/src/views/traceManage/analysis/index.vue b/src/views/traceManage/analysis/index.vue index 1172e3a7..23f78a50 100644 --- a/src/views/traceManage/analysis/index.vue +++ b/src/views/traceManage/analysis/index.vue @@ -151,14 +151,18 @@ function fnTableSize({ key }: MenuInfo) { function fnGetList(pageNum?: number) { if (tableState.loading) return; tableState.loading = true; - if(pageNum){ + if (pageNum) { queryParams.pageNum = pageNum; } listTraceData(toRaw(queryParams)).then(res => { if (res.code === RESULT_CODE_SUCCESS && Array.isArray(res.rows)) { 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); } @@ -470,8 +474,9 @@ onMounted(() => { - {
-
+ diff --git a/src/views/traceManage/pcap/index.vue b/src/views/traceManage/pcap/index.vue index 97e3faeb..d5ecd361 100644 --- a/src/views/traceManage/pcap/index.vue +++ b/src/views/traceManage/pcap/index.vue @@ -535,10 +535,11 @@ onMounted(() => { - { :disabled="true" style="color: rgba(0, 0, 0, 0.85)" /> - + diff --git a/src/views/traceManage/task/index.vue b/src/views/traceManage/task/index.vue index 2737a0e7..d56dc00f 100644 --- a/src/views/traceManage/task/index.vue +++ b/src/views/traceManage/task/index.vue @@ -236,7 +236,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); } @@ -727,8 +731,9 @@ onMounted(() => { - { t('common.close') }} - + - { /> - +