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 @@
-
@@ -31,7 +32,7 @@
v-model:value="cronStr"
disabled
/>
-
+
-
-
- emit('ok', e)"
- @cancel="(e:any) => emit('cancel', e)"
- >
-
-
-
-
-
-
-
-
-
-
-
-
-
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 @@
+
+
+
+
+
+
+
+ {{ t('components.LockScreen.backReload') }}
+
+
+ {{ t('components.LockScreen.backReload2') }}
+
+
+
+
+
+
+
+ {{ t('components.LockScreen.systemReset') }}
+
+
+ {{ t('components.LockScreen.systemReset2') }}
+
+
+
+
+
+
+
+
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 @@
-
-
-
-
-
-
-
-
- {{ userStore.nickName }}
-
-
-
-
-
-
-
-
-
-
- {{ t('components.LockScreen.backLogin') }}
-
-
-
-
-
-
-
-
- {{ t('components.LockScreen.backReload') }}
-
-
- {{ t('components.LockScreen.backReload2') }}
-
-
-
-
-
-
-
- {{ t('components.LockScreen.systemReset') }}
-
-
- {{ t('components.LockScreen.systemReset2') }}
-
-
-
-
-
-
-
-
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);
}
-
@@ -93,20 +100,26 @@ function fnUpload(up: UploadRequestOption) {
- {{t('components.UploadModal.uploadTip')}}
+
+ {{ t('components.UploadModal.uploadTip') }}
+
-
- {{t('components.UploadModal.allowSize')}} {{ props.size }} MB
-
-
- {{t('components.UploadModal.allowFormat')}} {{ props.ext.join('、') }}
-
-
+
+
+ {{ t('components.UploadModal.allowSize') }} {{ props.size }} MB
+
+
+
+
+ {{ t('components.UploadModal.allowFormat') }}
+ {{ props.ext.join('、') }}
+
+
-
+
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"
>
@@ -244,8 +272,10 @@ onUnmounted(() => {
:alt="appStore.appName"
:title="appStore.appName"
/>
-
- {{ appStore.appName }}
+
+
+ {{ appStore.appName }}
+
@@ -298,9 +328,6 @@ onUnmounted(() => {
-
-
-
+
+
+
@@ -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 @@
-
@@ -265,7 +270,7 @@ watch(
:pagination="tablePagination"
>
-
+
-
-
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('common.search') }}
+
+
+
+ {{ t('common.reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ !realTimeData
+ ? t('views.dashboard.ue.realTimeDataStart')
+ : t('views.dashboard.ue.realTimeDataStop')
+ }}
+
+
+
+
+
+ {{ t('common.deleteText') }}
+
+
+
+
+ {{ t('common.export') }}
+
+
+
+
+
+
+
+
+ {{ t('common.searchBarText') }}
+
+
+
+ {{ t('common.reloadText') }}
+
+
+
+
+
+ {{ t('common.sizeText') }}
+
+
+
+
+
+
+
+ {{ t('common.size.default') }}
+
+
+ {{ t('common.size.middle') }}
+
+
+ {{ t('common.size.small') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('views.dashboard.ue.resultOk') }}
+
+
+
+
+
+
+
+
+ {{ t('common.deleteText') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('views.dashboard.ue.ueInfo') }}
+
+
+ {{ t('views.ne.common.neName') }}:
+ {{ record.neName }}
+
+
+ {{ t('views.ne.common.rmUid') }}:
+ {{ record.rmUID }}
+
+
+ {{ t('views.dashboard.ue.rowInfo') }}
+
+
+ {{ t('views.dashboard.ue.time') }}:
+ {{ parseDateToStr(record.eventJSON.timestamp * 1000) }}
+
+
+ {{ t('views.dashboard.ue.eventType') }}:
+
+
+
+ {{ t('views.dashboard.ue.result') }}:
+
+
+
+
+ {{ t('views.dashboard.ue.resultOK') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
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(() => {
-
+
@@ -104,18 +104,22 @@ onMounted(() => {
{{ t('views.dashboard.overview.userActivity.result') }}:
-
+
{{ t('views.dashboard.overview.userActivity.resultOK') }}
-
+
@@ -155,6 +159,7 @@ onMounted(() => {
TAC ID: {{ item.data.tacID }}
+
{{ t('views.dashboard.overview.userActivity.result') }}:
@@ -172,96 +177,59 @@ onMounted(() => {
+
+
+
+
+ {{ t('views.dashboard.overview.userActivity.type') }}:
+
+
+
+
+
+ IMSI: {{ item.data.imsi }}
+
+
+ {{ t('views.dashboard.overview.userActivity.time') }}:
+
+ {{ parseDateToStr(+item.data.timestamp * 1000) }}
+
+
+
+
+
+
+ ENB ID: {{ item.data.eNBID }}
+
+
+ Cell ID: {{ item.data.cellID }}
+
+
+ TAC ID: {{ item.data.tacID }}
+
+
+
+ {{ t('views.dashboard.overview.userActivity.result') }}:
+
+
+
+
+
+ {{ t('views.dashboard.overview.userActivity.result') }}:
+ {{ t('views.dashboard.overview.userActivity.resultOK') }}
+
+
+ {{ t('views.dashboard.overview.userActivity.result') }}:
+
+
+
+
+
-
-
-
-
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('common.search') }}
+
+
+
+ {{ t('common.reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ !realTimeData
+ ? t('views.dashboard.cdr.realTimeDataStart')
+ : t('views.dashboard.cdr.realTimeDataStop')
+ }}
+
+
+
+
+
+ {{ t('common.deleteText') }}
+
+
+
+
+ {{ t('common.export') }}
+
+
+
+
+
+
+
+
+ {{ t('common.searchBarText') }}
+
+
+
+ {{ t('common.reloadText') }}
+
+
+
+
+
+ {{ t('common.sizeText') }}
+
+
+
+
+
+
+
+ {{ t('common.size.default') }}
+
+
+ {{ t('common.size.middle') }}
+
+
+ {{ t('common.size.small') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('common.deleteText') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('views.dashboard.cdr.cdrInfo') }}
+
+
+ {{ t('views.ne.common.neName') }}:
+ {{ record.neName }}
+
+
+ {{ t('views.ne.common.rmUid') }}:
+ {{ record.rmUID }}
+
+
+ {{ t('views.dashboard.cdr.time') }}:
+ {{ parseDateToStr(+record.timestamp * 1000) }}
+
+
+ {{ t('views.dashboard.cdr.rowInfo') }}
+
+
+ Record Network Function ID:
+ {{ record.cdrJSON.recordingNetworkFunctionID }}
+
+
+ Record Type:
+ {{ record.cdrJSON.recordType }}
+
+
+ Record Opening Time:
+ {{ record.cdrJSON.recordOpeningTime }}
+
+
+ Charging ID:
+ {{ record.cdrJSON.chargingID }}
+
+
+ Duration:
+ {{ record.cdrJSON.duration }}
+
+ Subscriber Identifier
+
+ Subscription ID Type:
+
+ {{ record.cdrJSON.subscriberIdentifier?.subscriptionIDType }}
+
+
+
+ Subscription ID Data:
+
+ {{ record.cdrJSON.subscriberIdentifier?.subscriptionIDData }}
+
+
+
+
+
+ List Of Multiple Unit Usage
+
+
+
RatingGroup: {{ u.ratingGroup }}
+
+
+ Data Total Volume:
+ {{ udata.dataTotalVolume }}
+
+
+ Data Volume Downlink:
+ {{ udata.dataVolumeDownlink }}
+
+
+ Data Volume Uplink:
+ {{ udata.dataVolumeUplink }}
+
+
+ Time:
+ {{ udata.time }}
+
+
+
+
+ PDU Session Charging Information
+
+
+ User Identifier:
+ {{
+ record.cdrJSON.pDUSessionChargingInformation?.userIdentifier
+ }}
+
+
+ SSC Mode:
+ {{
+ record.cdrJSON.pDUSessionChargingInformation?.sSCMode
+ }}
+
+ RAT Type:
+ {{
+ record.cdrJSON.pDUSessionChargingInformation?.rATType
+ }}
+
+ DNN ID:
+
+ {{ record.cdrJSON.pDUSessionChargingInformation?.dNNID }}
+
+
+
+ PDU Type:
+
+ {{ record.cdrJSON.pDUSessionChargingInformation?.pDUType }}
+
+
+
+ PDU IPv4 Address:
+
+ {{
+ record.cdrJSON.pDUSessionChargingInformation?.pDUAddress
+ ?.pDUIPv4Address
+ }}
+
+
+
+ PDU IPv6 Addres Swith Prefix:
+
+ {{
+ record.cdrJSON.pDUSessionChargingInformation?.pDUAddress
+ ?.pDUIPv6AddresswithPrefix
+ }}
+
+
+
+
+
+
+
+
+
+
+
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 @@
- {});
showRemoveIcon: true,
showDownloadIcon: false,
}"
+ :remove="fnBeforeRemoveFile"
:before-upload="fnBeforeUploadFile"
:custom-request="fnUploadFile"
:disabled="modalState.confirmLoading"
@@ -478,7 +494,7 @@ onMounted(() => {});
-
+
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 @@
@@ -273,8 +295,10 @@ function fnStepNext(stepName: 'NeInfoConfig' | 'Done') {
-
+
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')
}}
-
+
- {
/>
-
+