From dfa1a580d0cd316583c82215199f562034d4b3fc Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 18 Mar 2025 10:14:49 +0800 Subject: [PATCH 01/54] =?UTF-8?q?fix:=20=E8=B0=83=E6=95=B4=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E8=83=8C=E6=99=AF=E5=9B=BE=E7=89=87=E4=B8=BA=E9=9D=99?= =?UTF-8?q?=E6=80=81=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../background/dark.jpg | Bin .../background/light.jpg | Bin src/views/login.vue | 4 ++-- src/views/system/quick-start/index.vue | 4 ++-- 4 files changed, 4 insertions(+), 4 deletions(-) rename src/assets/background_dark.jpg => public/background/dark.jpg (100%) rename src/assets/background_light.jpg => public/background/light.jpg (100%) diff --git a/src/assets/background_dark.jpg b/public/background/dark.jpg similarity index 100% rename from src/assets/background_dark.jpg rename to public/background/dark.jpg diff --git a/src/assets/background_light.jpg b/public/background/light.jpg similarity index 100% rename from src/assets/background_light.jpg rename to public/background/light.jpg diff --git a/src/views/login.vue b/src/views/login.vue index 54259d12..b5ad5b90 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -301,7 +301,7 @@ function fnChangeLocale(e: any) { // background: url('./../assets/black_dot.png') 0% 0% / 14px 14px repeat; - background-image: url(@/assets/background_light.jpg); + background-image: url(/background/light.jpg); background-repeat: no-repeat; background-size: cover; background-position: center center; @@ -350,7 +350,7 @@ function fnChangeLocale(e: any) { } [data-theme='dark'] .container { - background-image: url(@/assets/background_dark.jpg); + background-image: url(/background/dark.jpg); background-color: #141414; } diff --git a/src/views/system/quick-start/index.vue b/src/views/system/quick-start/index.vue index cc031464..dfd7cd86 100644 --- a/src/views/system/quick-start/index.vue +++ b/src/views/system/quick-start/index.vue @@ -79,14 +79,14 @@ onMounted(() => { // background: url('./../assets/black_dot.png') 0% 0% / 14px 14px repeat; - background-image: url(@/assets/background_light.jpg); + background-image: url(/background/light.jpg); background-repeat: no-repeat; background-size: cover; background-position: center center; } [data-theme='dark'] .container { - background-image: url(@/assets/background_dark.jpg); + background-image: url(/background/dark.jpg); background-color: #141414; } From 775dacc4a8118ca9c9cb966f58673081da601d37 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 18 Mar 2025 14:15:21 +0800 Subject: [PATCH 02/54] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 2091a489..bb4a8c07 100644 --- a/package.json +++ b/package.json @@ -12,14 +12,14 @@ "preview": "vite preview" }, "dependencies": { - "@ant-design/icons-vue": "^7.0.1", + "@ant-design/icons-vue": "7.0.1", "@antv/g6": "4.8.24", "@codemirror/lang-javascript": "6.2.3", "@codemirror/lang-yaml": "6.1.2", "@codemirror/merge": "6.10.0", "@codemirror/theme-one-dark": "6.1.2", "@tato30/vue-pdf": "1.11.3", - "@vueuse/core": "12.8.2", + "@vueuse/core": "13.0.0", "@xterm/addon-fit": "0.10.0", "@xterm/xterm": "5.5.0", "ant-design-vue": "4.2.6", @@ -50,12 +50,12 @@ "@types/js-cookie": "3.0.6", "@types/node": "^18.0.0", "@types/nprogress": "0.2.3", - "@vitejs/plugin-vue": "5.2.1", + "@vitejs/plugin-vue": "5.2.3", "less": "4.2.2", - "typescript": "5.6.3", + "typescript": "5.8.2", "unplugin-vue-components": "0.28.0", - "vite": "6.2.0", - "vite-plugin-compression": "~0.5.1", - "vue-tsc": "2.2.0" + "vite": "6.2.2", + "vite-plugin-compression": "0.5.1", + "vue-tsc": "2.2.8" } } From 0fd9ef7e48480aed83faf5775971a30308077962 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 19 Mar 2025 17:59:46 +0800 Subject: [PATCH 03/54] =?UTF-8?q?fix:=20pcap=E5=88=86=E6=9E=90Protocol?= =?UTF-8?q?=E5=88=97=E6=8D=A2=E8=A1=8C=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../traceManage/tshark/components/PacketTable.vue | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/views/traceManage/tshark/components/PacketTable.vue b/src/views/traceManage/tshark/components/PacketTable.vue index 3b7300b3..d3e58240 100644 --- a/src/views/traceManage/tshark/components/PacketTable.vue +++ b/src/views/traceManage/tshark/components/PacketTable.vue @@ -238,15 +238,13 @@ watchEffect(() => { .thead-item:nth-child(3), .tbody-item:nth-child(3), .thead-item:nth-child(4), -.tbody-item:nth-child(4) { +.tbody-item:nth-child(4), +.thead-item:nth-child(5), +.tbody-item:nth-child(5) { flex-basis: 8rem; width: 8rem; overflow-y: auto; -} -.thead-item:nth-child(5), -.tbody-item:nth-child(5) { - flex-basis: 7rem; - width: 7rem; + text-wrap: nowrap; } .thead-item:nth-child(6), .tbody-item:nth-child(6) { @@ -270,6 +268,7 @@ watchEffect(() => { .tbody-item:nth-child(2)::-webkit-scrollbar, .tbody-item:nth-child(3)::-webkit-scrollbar, .tbody-item:nth-child(4)::-webkit-scrollbar, +.tbody-item:nth-child(5)::-webkit-scrollbar, .tbody-item:nth-child(7)::-webkit-scrollbar { width: 4px; /* 设置滚动条宽度 */ height: 4px; @@ -278,6 +277,7 @@ watchEffect(() => { .tbody-item:nth-child(2)::-webkit-scrollbar-track, .tbody-item:nth-child(3)::-webkit-scrollbar-track, .tbody-item:nth-child(4)::-webkit-scrollbar-track, +.tbody-item:nth-child(5)::-webkit-scrollbar-track, .tbody-item:nth-child(7)::-webkit-scrollbar-track { background-color: #f0f0f0; /* 设置滚动条轨道背景颜色 */ } @@ -285,6 +285,7 @@ watchEffect(() => { .tbody-item:nth-child(2)::-webkit-scrollbar-thumb, .tbody-item:nth-child(3)::-webkit-scrollbar-thumb, .tbody-item:nth-child(4)::-webkit-scrollbar-thumb, +.tbody-item:nth-child(5)::-webkit-scrollbar-thumb, .tbody-item:nth-child(7)::-webkit-scrollbar-thumb { background-color: #bfbfbf; /* 设置滚动条滑块颜色 */ } @@ -292,6 +293,7 @@ watchEffect(() => { .tbody-item:nth-child(2)::-webkit-scrollbar-thumb:hover, .tbody-item:nth-child(3)::-webkit-scrollbar-thumb:hover, .tbody-item:nth-child(4)::-webkit-scrollbar-thumb:hover, +.tbody-item:nth-child(5)::-webkit-scrollbar-thumb:hover, .tbody-item:nth-child(7)::-webkit-scrollbar-thumb:hover { background-color: #1890ff; /* 设置鼠标悬停时滚动条滑块颜色 */ } From c084203a037506d7ee7bcb87d20098ae8b0541d7 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 19 Mar 2025 18:00:35 +0800 Subject: [PATCH 04/54] =?UTF-8?q?feat:=20=E7=B3=BB=E7=BB=9F=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E8=BF=94=E5=9B=9E=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E9=80=82=E7=94=A8=E7=89=88=E6=9C=AC=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/modules/app.ts | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/store/modules/app.ts b/src/store/modules/app.ts index b10f77d6..1634e3cd 100644 --- a/src/store/modules/app.ts +++ b/src/store/modules/app.ts @@ -1,5 +1,8 @@ import { getSysConf } from '@/api'; -import { CACHE_LOCAL_I18N, CACHE_SESSION_CRYPTO_API } from '@/constants/cache-keys-constants'; +import { + CACHE_LOCAL_I18N, + CACHE_SESSION_CRYPTO_API, +} from '@/constants/cache-keys-constants'; import { RESULT_CODE_SUCCESS } from '@/constants/result-constants'; import { removeToken } from '@/plugins/auth-token'; import { parseUrlPath } from '@/plugins/file-static-url'; @@ -16,11 +19,12 @@ type AppStore = { /**应用版本 */ appVersion: string; - /**服务版本 */ + /**版本号 */ version: string; - buildTime: string; /**系统引导使用 */ bootloader: boolean; + /**服务版本 */ + serverVersion: string; // 用户登录认证 loginAuth: boolean; // 用户接口加密 @@ -54,13 +58,13 @@ const useAppStore = defineStore('app', { appCode: import.meta.env.VITE_APP_CODE, appVersion: import.meta.env.VITE_APP_VERSION, - version: `-`, - buildTime: `-`, + version: '-', bootloader: false, + serverVersion: '-', loginAuth: true, cryptoApi: true, - serialNum: `-`, - copyright: `Copyright ©2023 For ${import.meta.env.VITE_APP_NAME}`, + serialNum: '-', + copyright: `Copyright ©2023-2025 For ${import.meta.env.VITE_APP_NAME}`, logoType: 'icon', filePathIcon: '', filePathBrand: '', @@ -86,7 +90,7 @@ const useAppStore = defineStore('app', { const res = await getSysConf(); if (res.code === RESULT_CODE_SUCCESS && res.data) { this.version = res.data.version; - this.buildTime = res.data.buildTime; + this.serverVersion = res.data.serverVersion; this.bootloader = res.data.bootloader === 'true'; // 引导时 if (this.bootloader) { @@ -94,7 +98,7 @@ const useAppStore = defineStore('app', { } this.loginAuth = res.data.loginAuth !== 'false'; this.cryptoApi = res.data.cryptoApi !== 'false'; - sessionSet(CACHE_SESSION_CRYPTO_API, res.data.cryptoApi); + sessionSet(CACHE_SESSION_CRYPTO_API, res.data.cryptoApi); this.serialNum = res.data.serialNum; this.appName = res.data.title; this.copyright = res.data.copyright; From 9bef7a8b3c4e1333792391b5272457356ac311e7 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 21 Mar 2025 15:06:55 +0800 Subject: [PATCH 05/54] =?UTF-8?q?fix:=20=E7=A6=81=E6=AD=A2admin=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=8F=9C=E5=8D=95=E5=88=86=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/system/role/index.vue | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue index 21e93468..743157cf 100644 --- a/src/views/system/role/index.vue +++ b/src/views/system/role/index.vue @@ -732,7 +732,7 @@ function fnGetList(pageNum?: number) { queryParams.beginTime = queryRangePicker.value[0]; queryParams.endTime = queryRangePicker.value[1]; listRole(toRaw(queryParams)).then(res => { - if (res.code === RESULT_CODE_SUCCESS) { + if (res.code === RESULT_CODE_SUCCESS) { // 取消勾选 if (tableState.selectedRowKeys.length > 0) { tableState.selectedRowKeys = []; @@ -941,6 +941,7 @@ onMounted(() => { v-if=" dict.sysNormalDisable.length > 0 && record.roleId !== 1 && + record.roleKey !== 'admin' && hasPermissions(['system:role:edit']) " v-model:checked="record.statusFlag" @@ -969,7 +970,9 @@ onMounted(() => { - + { - + { - + From eea53fdf2a4ed53c1e6c27346eb6b5a3ce7019a9 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Fri, 21 Mar 2025 15:08:33 +0800 Subject: [PATCH 06/54] =?UTF-8?q?fix:=20=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E6=8C=87=E6=A0=87=E5=8F=AA=E6=9C=89UPF=E6=98=BE=E7=A4=BAsum?= =?UTF-8?q?=E5=88=97=E5=85=B6=E4=BB=96=E7=BD=91=E5=85=83=E9=9A=90=E8=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/perfManage/kpiCReport/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/perfManage/kpiCReport/index.vue b/src/views/perfManage/kpiCReport/index.vue index 7639020c..dc43bdbd 100644 --- a/src/views/perfManage/kpiCReport/index.vue +++ b/src/views/perfManage/kpiCReport/index.vue @@ -1103,7 +1103,7 @@ onBeforeUnmount(() => {
Date: Fri, 21 Mar 2025 15:13:41 +0800 Subject: [PATCH 07/54] =?UTF-8?q?feat:=20=E7=9C=8B=E6=9D=BFUPF=E6=B5=81?= =?UTF-8?q?=E9=87=8F=E6=80=BB=E8=AE=A17or30=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/dashboard/overview/index.vue | 33 +++++++++++++------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/views/dashboard/overview/index.vue b/src/views/dashboard/overview/index.vue index 02abf711..a6771975 100644 --- a/src/views/dashboard/overview/index.vue +++ b/src/views/dashboard/overview/index.vue @@ -213,30 +213,29 @@ function loadData() { fnGetNeState(); // 获取网元状态 userActivitySend(); upfTFSend('0'); - // upfTFSend('7'); - // upfTFSend('30'); + upfTFSend('7'); + upfTFSend('30'); clearInterval(interval10s.value); - // interval10s.value = setInterval(() => { - // if (!interval10s.value || !initFlag) return; - // if (upfTFActive.value === '0') { - // upfTFSend('7'); - // upfTFActive.value = '7'; - // } else if (upfTFActive.value === '7') { - // upfTFSend('30'); - // upfTFActive.value = '30'; - // } else if (upfTFActive.value === '30') { - // upfTFSend('0'); - // upfTFActive.value = '0'; - // } - // }, 10_000); + interval10s.value = setInterval(() => { + if (!interval10s.value || !initFlag) return; + if (upfTFActive.value === '0') { + upfTFSend('7'); + upfTFActive.value = '7'; + } else if (upfTFActive.value === '7') { + upfTFSend('30'); + upfTFActive.value = '30'; + } else if (upfTFActive.value === '30') { + upfTFSend('0'); + upfTFActive.value = '0'; + } + }, 10_000); clearInterval(interval5s.value); interval5s.value = setInterval(() => { if (!interval5s.value || !initFlag) return; fnGetSkim(); // 获取概览信息 fnGetNeState(); // 获取网元状态 - upfTFSend('0'); }, 5_000); } @@ -554,7 +553,7 @@ onBeforeUnmount(() => { 0 && record.roleId !== 1 && - record.roleKey !== 'admin' && + !userStore.roles?.includes(record.roleKey) && hasPermissions(['system:role:edit']) " v-model:checked="record.statusFlag" @@ -971,7 +973,10 @@ onMounted(() => { { Date: Fri, 21 Mar 2025 18:02:49 +0800 Subject: [PATCH 09/54] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7=202.250321?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 2 +- .env.production | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.development b/.env.development index 4d3dbb46..90fc9249 100644 --- a/.env.development +++ b/.env.development @@ -11,7 +11,7 @@ VITE_APP_NAME = "Core Network OMC" VITE_APP_CODE = "OMC" # 应用版本 -VITE_APP_VERSION = "2.250314" +VITE_APP_VERSION = "2.250321" # 接口基础URL地址-不带/后缀 VITE_API_BASE_URL = "/omc-api" diff --git a/.env.production b/.env.production index 4d3dbb46..90fc9249 100644 --- a/.env.production +++ b/.env.production @@ -11,7 +11,7 @@ VITE_APP_NAME = "Core Network OMC" VITE_APP_CODE = "OMC" # 应用版本 -VITE_APP_VERSION = "2.250314" +VITE_APP_VERSION = "2.250321" # 接口基础URL地址-不带/后缀 VITE_API_BASE_URL = "/omc-api" From 38ea54f41a4f712c453740ed9cab90ac01dd9b85 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 26 Mar 2025 16:32:10 +0800 Subject: [PATCH 10/54] =?UTF-8?q?fix:=20=E7=9C=8B=E6=9D=BF=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=95=B0=E5=88=87=E6=8D=A2=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/dashboard/overview/index.vue | 81 +++++++++++++++++++++----- 1 file changed, 67 insertions(+), 14 deletions(-) diff --git a/src/views/dashboard/overview/index.vue b/src/views/dashboard/overview/index.vue index a6771975..bf22122c 100644 --- a/src/views/dashboard/overview/index.vue +++ b/src/views/dashboard/overview/index.vue @@ -104,16 +104,16 @@ function fnGetNeState() { /**获取概览信息 */ async function fnGetSkim() { const neHandlers = new Map([ - [ - 'UDM', - { - request: (neId: string) => - listUDMSub({ neId: neId, pageNum: 1, pageSize: 1 }), - process: (res: any) => - res.code === RESULT_CODE_SUCCESS && - (skimState.udmSubNum += res.data.total), - }, - ], + // [ + // 'UDM', + // { + // request: (neId: string) => + // listUDMSub({ neId: neId, pageNum: 1, pageSize: 1 }), + // process: (res: any) => + // res.code === RESULT_CODE_SUCCESS && + // (skimState.udmSubNum += res.data.total), + // }, + // ], [ 'SMF', { @@ -206,6 +206,13 @@ async function fnGetSkim() { requests[index].process(result.value); } }); + + // UDM + listUDMSub({ neId: udmNeId.value, pageNum: 1, pageSize: 1 }).then(res => { + if (res.code === RESULT_CODE_SUCCESS) { + skimState.udmSubNum = res.data.total; + } + }); } /**初始数据函数 */ @@ -261,6 +268,18 @@ function fnSelectNe(value: any, option: any) { // loadData(); } +let udmNeId = ref('001'); +let udmOtions = ref[]>([]); +/**用户数量-选择UDM */ +function fnSelectUDM(e: any) { + udmNeId.value = e.key; + listUDMSub({ neId: udmNeId.value, pageNum: 1, pageSize: 1 }).then(res => { + if (res.code === RESULT_CODE_SUCCESS) { + skimState.udmSubNum = res.data.total; + } + }); +} + // 定义一个方法返回 views 容器 const getPopupContainer = () => { // 使用 ref 或其他方式来引用你的 views 容器 @@ -275,19 +294,31 @@ onMounted(() => { .then(res => { if (res.code === RESULT_CODE_SUCCESS) { if (res.data.length > 0) { + // UPF let arr: Record[] = []; res.data.forEach((v: any) => { if (v.neType === 'UPF') { arr.push({ value: v.neId, label: v.neName, rmUid: v.rmUid }); } }); - neOtions.value = arr; if (arr.length > 0) { //queryParams.neRealId = arr[0].value; fnSelectNe(arr[0].value, arr[0]); } + // UDM + let arr1: Record[] = []; + res.data.forEach((v: any) => { + if (v.neType === 'UDM') { + arr1.push({ value: v.neId, label: v.neName, rmUid: v.rmUid }); + } + }); + udmOtions.value = arr1; + if (arr1.length > 0) { + fnSelectUDM(arr1[0].value); + } + // 过滤不可用的网元 neCascaderOptions.value = neInfoStore.getNeCascaderOptions.filter( (item: any) => { @@ -352,17 +383,28 @@ onBeforeUnmount(() => {
-
+
{{ skimState.udmSubNum }}
- {{ t('views.dashboard.overview.skim.users') }} + +
+ {{ t('views.dashboard.overview.skim.users') }} + +
+ +
{ .toDeep :deep(.ant-select-selection-item) { color: #fff; } + +.toDeep-text { + color: #4c9bfd !important; + font-size: 0.844rem !important; + position: relative !important; + line-height: 2rem !important; + white-space: nowrap !important; + text-align: start !important; + text-overflow: ellipsis !important; + overflow: hidden !important; +} From 1514e65df4bd253de4c0f53fd0a7933eddbeb629 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 26 Mar 2025 16:32:26 +0800 Subject: [PATCH 11/54] =?UTF-8?q?fix:=20KPI=E6=80=BB=E8=A7=88=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E6=8C=87=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/perfManage/kpiOverView/index.vue | 54 +++++++++++++++------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/src/views/perfManage/kpiOverView/index.vue b/src/views/perfManage/kpiOverView/index.vue index 5c43a449..1788706f 100644 --- a/src/views/perfManage/kpiOverView/index.vue +++ b/src/views/perfManage/kpiOverView/index.vue @@ -42,7 +42,7 @@ interface ChartDataItem { const tableLoading = ref(false); const rangeLoading = ref(false); //网元类型定义 -const ALL_NE_TYPES = ['AMF', 'SMF', 'UPF', 'MME', 'IMS', 'SMSC'] as const; +const ALL_NE_TYPES = ['AMF', 'UPF', 'IMS'] as const; type NeType = (typeof ALL_NE_TYPES)[number]; echarts.use([ @@ -119,12 +119,16 @@ const toggleRealtime = () => { // 定义要筛选的指标 ID,按网元类型组织 const TARGET_KPI_IDS: Record = { - AMF: ['AMF.02', 'AMF.03', 'AMF.A.07', 'AMF.A.08'], - SMF: ['SMF.02', 'SMF.03', 'SMF.04', 'SMF.05'], - UPF: ['UPF.03', 'UPF.04', 'UPF.05', 'UPF.06'], - MME: ['MME.A.01', 'MME.A.02', 'MME.A.03'], - IMS: ['SCSCF.01', 'SCSCF.02', 'SCSCF.05', 'SCSCF.06'], - SMSC: ['SMSC.A.01', 'SMSC.A.02', 'SMSC.A.03'], + AMF: ['AMF.02', 'AMF.03'], + UPF: ['UPF.04', 'UPF.05'], + IMS: ['SCSCF.03', 'SCSCF.04', 'SCSCF.05', 'SCSCF.06', 'SCSCF.07', 'SCSCF.08'], + + // AMF: ['AMF.02', 'AMF.03', 'AMF.A.07', 'AMF.A.08'], + // SMF: ['SMF.02', 'SMF.03', 'SMF.04', 'SMF.05'], + // UPF: ['UPF.03', 'UPF.04', 'UPF.05', 'UPF.06'], + // MME: ['MME.A.01', 'MME.A.02', 'MME.A.03'], + // IMS: ['SCSCF.01', 'SCSCF.02', 'SCSCF.05', 'SCSCF.06'], + // SMSC: ['SMSC.A.01', 'SMSC.A.02', 'SMSC.A.03'], }; // 实时数据开关函数 @@ -186,13 +190,15 @@ const wsMessage = (res: Record) => { return; } const { code, data } = res; - if (code === RESULT_CODE_ERROR || !data?.groupId) return; + if (code === RESULT_CODE_ERROR || !data?.groupId) { + tableLoading.value = false; + return; + } handleWebSocketMessage(data.data); }; // 添加数据处理函数 const processChartData = (rawData: any[]) => { const groupedData = new Map(); //数据按时间分组 - rawData.forEach(item => { //合并相同时间点的数据 const timeKey = item.timeGroup; @@ -755,7 +761,22 @@ const kpiStats = ref([]); // 添加一个计算函数来更新统计数据 const updateKpiStats = () => { if (!chartData.value.length || !kpiColumns.value.length) { - kpiStats.value = []; + kpiStats.value = selectedKPIs.value.map(kpiId => { + // 找到对应的KPI标题 + let title = kpiId; + const kpi = kpiColumns.value.find(col => col.kpiId === kpiId); + if (kpi) { + title = kpi.title; + } + return { + kpiId: kpiId, + title: title, + max: 0, + min: 0, + avg: 0, + total: 0, + }; + }); return; } kpiStats.value = selectedKPIs.value @@ -983,6 +1004,7 @@ const tableRowConfig = computed(() => {
From d8778d2632798aac82e9951fc671c2fe8482a43b Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 26 Mar 2025 16:32:34 +0800 Subject: [PATCH 12/54] =?UTF-8?q?fix:=20KPI=E6=80=BB=E8=A7=88=E6=97=A0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=97=B6=E5=B1=95=E7=A4=BAtitle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/perfManage/kpiCReport/index.vue | 87 ++++++++++++++++++----- 1 file changed, 70 insertions(+), 17 deletions(-) diff --git a/src/views/perfManage/kpiCReport/index.vue b/src/views/perfManage/kpiCReport/index.vue index dc43bdbd..d09a7b8a 100644 --- a/src/views/perfManage/kpiCReport/index.vue +++ b/src/views/perfManage/kpiCReport/index.vue @@ -240,27 +240,33 @@ const statsColumns: TableColumnType[] = [ title: t('views.perfManage.kpiOverView.kpiName'), dataIndex: 'title', key: 'title', - width: '65%', - }, - { - title: t('views.perfManage.kpiOverView.avgValue'), - dataIndex: 'avg', - key: 'avg', - width: '24%', - sortDirections: ['ascend', 'descend'], }, + // { + // title: t('views.perfManage.kpiOverView.totalValue'), + // dataIndex: 'total', + // key: 'total', + // width: '12%', + // sortDirections: ['ascend', 'descend'], + // }, + // { + // title: t('views.perfManage.kpiOverView.avgValue'), + // dataIndex: 'avg', + // key: 'avg', + // width: '24%', + // sortDirections: ['ascend', 'descend'], + // }, { title: t('views.perfManage.kpiOverView.maxValue'), dataIndex: 'max', key: 'max', - width: '17%', + width: '200px', sortDirections: ['ascend', 'descend'], }, { title: t('views.perfManage.kpiOverView.minValue'), dataIndex: 'min', key: 'min', - width: '17%', + width: '200px', sortDirections: ['ascend', 'descend'], }, ]; @@ -356,6 +362,7 @@ function fnGetListTitle() { dataIndex: kpiValue, align: 'left', key: kpiValue, + unit: item[`unit`], resizable: true, width: 100, minWidth: 150, @@ -416,8 +423,8 @@ function fnGetList() { duration: 2, }); tableState.data = []; - tableColumns.value = []; - tableColumnsDnd.value = []; + // tableColumns.value = []; + // tableColumnsDnd.value = []; kpiStats.value = []; //清空数据 fnRanderChartData(); return false; @@ -448,16 +455,37 @@ function fnGetList() { const total = Number( values.reduce((sum, val) => sum + val, 0).toFixed(2) ); - // 计算平均值 const avg = values.length > 0 ? Number((total / values.length).toFixed(2)) : 0; kpiStats.value.push({ kpiId: columns.key, title: columns.title, + unit: columns.unit, max: values.length > 0 ? Math.max(...values) : 0, min: values.length > 0 ? Math.min(...values) : 0, avg, + total: total, + }); + } + } else { + kpiStats.value = []; + for (const columns of tableColumns.value) { + if ( + columns.key === 'neName' || + columns.key === 'startIndex' || + columns.key === 'timeGroup' + ) { + continue; + } + kpiStats.value.push({ + kpiId: columns.key, + title: columns.title, + unit: columns.unit, + max: 0, + min: 0, + avg: 0, + total: 0, }); } } @@ -606,7 +634,7 @@ function fnRanderChartData() { for (const item of orgData) { const keys = Object.keys(item); - //console.log(keys,item);// + //console.log(keys,item); for (const y of chartDataYSeriesData) { for (const key of keys) { if (y.key === key) { @@ -744,6 +772,7 @@ function wsMessage(res: Record) { // 添加一个变量来跟踪当前选中的行 const selectedRow = ref([]); +const selectedUnit = ref(null); // 添加处理行点击的方法 function handleRowClick(record: any) { const index = selectedRow.value.indexOf(record.kpiId); @@ -752,17 +781,33 @@ function handleRowClick(record: any) { if (index > -1) { selectedRow.value.splice(index, 1); chartLegendSelected[record.title] = false; + // 如果取消选中的是最后一个,重置 selectedUnit + if (selectedRow.value.length === 0) { + selectedUnit.value = null; + } } else { + // 检查单位是否一致 + if (selectedUnit.value && selectedUnit.value !== record.unit) { + message.error( + `${t('views.perfManage.customTarget.unitSelect')} ${selectedUnit.value}` + ); + return; + } + // 添加新的选中项 selectedRow.value.push(record.kpiId); + // 设置选中的单位 + if (!selectedUnit.value) { + selectedUnit.value = record.unit; + } + // 如果只有一个选中项,重置为 false if (selectedRow.value.length === 1) { Object.keys(chartLegendSelected).forEach(key => { chartLegendSelected[key] = false; }); } - chartLegendSelected[record.title] = true; } @@ -928,6 +973,7 @@ onBeforeUnmount(() => { v-model:value="state.neType" :options="neCascaderOptions" :allow-clear="false" + @change="fnGetListTitle()" :placeholder="t('common.selectPlease')" /> @@ -1015,7 +1061,6 @@ onBeforeUnmount(() => { @@ -1103,7 +1148,7 @@ onBeforeUnmount(() => {
{ +
From 0ff899b40b5ef637164782a7dc15803c201cd69f Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 26 Mar 2025 16:32:46 +0800 Subject: [PATCH 13/54] =?UTF-8?q?fix:=20=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6config.js=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/default/config.js | 6 ++++-- src/views/perfManage/goldTarget/index.vue | 1 - 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/public/default/config.js b/public/default/config.js index 5c85eb72..7eeaca4c 100644 --- a/public/default/config.js +++ b/public/default/config.js @@ -13,14 +13,16 @@ // baseUrl = protocol://ip:port // baseUrl = 'http://192.168.8.100:33030'; const protocol = window.location.protocol + let wsprotocol = "ws:" const hostname = window.location.hostname let host = `${hostname}:33030`; if (protocol === 'https:') { host = `${hostname}:33443`; + wsprotocol = "wss:" } // Service Address sessionStorage.setItem('baseUrl', `${protocol}//${host}`); // websocket Address - sessionStorage.setItem('wsUrl', `ws://${host}`); -})(); + sessionStorage.setItem('wsUrl', `${wsprotocol}//${host}`); +})(); \ No newline at end of file diff --git a/src/views/perfManage/goldTarget/index.vue b/src/views/perfManage/goldTarget/index.vue index 3a97da41..bf54e686 100644 --- a/src/views/perfManage/goldTarget/index.vue +++ b/src/views/perfManage/goldTarget/index.vue @@ -996,7 +996,6 @@ onBeforeUnmount(() => { From cfc56ca4ea483c45ac7140bb3103cd3f5f06bbe0 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 27 Mar 2025 15:54:51 +0800 Subject: [PATCH 14/54] =?UTF-8?q?fix:=20=E5=AF=86=E7=A0=81=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E6=A0=BC=E5=BC=8F=E7=94=B1=E5=90=8E=E7=AB=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/locales/en-US.ts | 6 +++--- src/i18n/locales/zh-CN.ts | 6 +++--- src/utils/regular-utils.ts | 10 ++++++---- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/i18n/locales/en-US.ts b/src/i18n/locales/en-US.ts index 7f541799..0cd80c73 100644 --- a/src/i18n/locales/en-US.ts +++ b/src/i18n/locales/en-US.ts @@ -163,7 +163,7 @@ export default { userNameReg: 'The account cannot start with a number and can contain uppercase and lowercase letters, numbers, and no less than 5 digits.', userNamePlease: 'Please enter the correct login account', userNameHit: 'Login account', - passwordReg: 'The password should contain at least uppercase and lowercase letters, numbers, special symbols, and no less than 6 digits.', + passwordReg: 'Please enter the correct password format', passwordPlease: 'Please enter the correct login password', passwordHit: 'Login password', passwordConfirmHit: 'Confirm login password', @@ -295,7 +295,7 @@ export default { oldPasswordTip: "The old password must not be empty and must be at least 6 digits long", oldPasswordPleace: "Please enter the old password", newPassword: "New Password", - newPasswordTip: "Password contains at least upper and lower case letters, numbers, special symbols, and not less than 6 digits", + newPasswordTip: "Please enter the correct password format", newPassworddPleace: "Please enter a new password", confirmPassword: "Confirm new password", confirmPasswordPleace: "Please confirm the new password", @@ -1594,7 +1594,7 @@ export default { loginTime: 'Login Time', status: 'Status', 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', + passwdTip:'Please enter the correct password format', nickNameTip:'Nicknames no less than 2 digits', emailTip:'Please enter the correct email address', phoneTip:'Please enter the correct phone number', diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index bdcd1688..5a75cc1a 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -163,7 +163,7 @@ export default { userNameReg: '账号不能以数字开头,可包含大写小写字母,数字,且不少于5位', userNamePlease: '请输入正确登录账号', userNameHit: '登录账号', - passwordReg: '密码至少包含大小写字母、数字、特殊符号,且不少于6位', + passwordReg: '请输入正确的密码格式', passwordPlease: '请输入正确登录密码', passwordHit: '登录密码', passwordConfirmHit: '确认登录密码', @@ -295,7 +295,7 @@ export default { oldPasswordTip: "旧密码不能为空,且不少于6位", oldPasswordPleace: "请输入旧密码", newPassword: "新密码", - newPasswordTip: "密码至少包含大小写字母、数字、特殊符号,且不少于6位", + newPasswordTip: "请输入正确的密码格式", newPassworddPleace: "请输入新密码", confirmPassword: "确认新密码", confirmPasswordPleace: "请确认新密码", @@ -1594,7 +1594,7 @@ export default { loginTime: '登录时间', status: '用户状态', userNameTip:'账号只能包含大写字母、小写字母和数字的字符串,长度至少为6位', - passwdTip:'密码至少包含大小写字母、数字、特殊符号,且不少于6位', + passwdTip:'请输入正确的密码格式', nickNameTip:'昵称不少于2位', emailTip:'请输入正确的邮箱地址', phoneTip:'请输入正确的手机号码', diff --git a/src/utils/regular-utils.ts b/src/utils/regular-utils.ts index f04c447e..83f5b3fa 100644 --- a/src/utils/regular-utils.ts +++ b/src/utils/regular-utils.ts @@ -27,14 +27,15 @@ export const regExpUserName = /^[A-Za-z0-9]{6,}$/; * 有效密码格式 * * 密码至少包含大小写字母、数字、特殊符号,且不少于6位 + * /^(?![A-Za-z0-9]+$)(?![a-z0-9\W]+$)(?![A-Za-z\W]+$)(?![A-Z0-9\W]+$)[a-zA-Z0-9\W]{6,}$/ */ -export const regExpPasswd = - /^(?![A-Za-z0-9]+$)(?![a-z0-9\W]+$)(?![A-Za-z\W]+$)(?![A-Z0-9\W]+$)[a-zA-Z0-9\W]{6,}$/; +export const regExpPasswd = /^.{6,}$/; /** * 有效手机号格式 + * /^1[3|4|5|6|7|8|9][0-9]\d{8}$/ */ -export const regExpMobile = /^.{3,}$/; // /^1[3|4|5|6|7|8|9][0-9]\d{8}$/; +export const regExpMobile = /^.{3,}$/; /** * 有效邮箱格式 @@ -46,8 +47,9 @@ export const regExpEmail = * 有效用户昵称格式 * * 用户昵称只能包含字母、数字、中文和下划线,且不少于2位 + * /^[\w\u4e00-\u9fa5-]{2,}$/ */ -export const regExpNick = /^.{2,}$/; // /^[\w\u4e00-\u9fa5-]{2,}$/; +export const regExpNick = /^.{2,}$/; /** * 是否为http(s)://开头 From e4234dd1f44be7cc8f4d67a0145126af5692e75c Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Thu, 27 Mar 2025 15:57:37 +0800 Subject: [PATCH 15/54] =?UTF-8?q?fix:=20=E7=BB=88=E7=AB=AFredis=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E5=90=8E=E9=BB=98=E8=AE=A4=E5=8F=91=E9=80=81PING?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E6=98=AF=E5=90=A6=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/tool/terminal/index.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/views/tool/terminal/index.vue b/src/views/tool/terminal/index.vue index 7f4c18cb..01dfdb11 100644 --- a/src/views/tool/terminal/index.vue +++ b/src/views/tool/terminal/index.vue @@ -259,6 +259,7 @@ function fnTabClose(id: string) { v-if="pane.id !== '0' && pane.host.hostType === 'redis'" :id="pane.id" :hostId="pane.host.id" + init-cmd="PING" @connect="fnTerminalConnect" @close="fnTerminalClose" > From 6093a234cc12c83eabb12e7b07fdb2121b2b7747 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 31 Mar 2025 18:59:47 +0800 Subject: [PATCH 16/54] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=E8=A7=A3?= =?UTF-8?q?=E9=94=81=E6=88=90=E5=8A=9F=E6=8F=90=E7=A4=BA=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E6=8B=BC=E5=86=99=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/system/log/login/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/system/log/login/index.vue b/src/views/system/log/login/index.vue index a0cf877c..4527687c 100644 --- a/src/views/system/log/login/index.vue +++ b/src/views/system/log/login/index.vue @@ -272,7 +272,7 @@ function fnUnlock() { hide(); if (res.code === RESULT_CODE_SUCCESS) { message.success({ - content: t('views.system.log.login.unlockSure', { + content: t('views.system.log.login.unlockSuss', { userName: username, }), duration: 3, From c72f0290fd1bb5280efafc7a2764b67cd7eaa2e4 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 31 Mar 2025 19:00:04 +0800 Subject: [PATCH 17/54] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E6=9B=BF=E4=BB=A3=E9=AA=8C=E8=AF=81=E7=A0=81=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E8=BF=94=E5=9B=9E=E7=A0=81=EF=BC=8C=E5=B9=B6=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=AA=8C=E8=AF=81=E7=A0=81=E6=96=87=E6=9C=AC=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/login.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/views/login.vue b/src/views/login.vue index b5ad5b90..18adece3 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -77,7 +77,7 @@ function fnGetCaptcha() { state.captchaClick = true; getCaptchaImage().then(res => { state.captchaClick = false; - if (res.code != 1) { + if (res.code != RESULT_CODE_SUCCESS) { message.warning(`${res.msg}`, 3); return; } @@ -85,6 +85,9 @@ function fnGetCaptcha() { if (state.captcha.enabled) { state.captcha.codeImg = res.img; state.from.uuid = res.uuid; + if (res.text) { + state.from.code = res.text; + } } }); } From d037a768560fa55104a465a1d335514803aaca42 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 31 Mar 2025 19:00:34 +0800 Subject: [PATCH 18/54] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=BC=BA?= =?UTF-8?q?=E5=88=B6=E5=AF=86=E7=A0=81=E9=87=8D=E7=BD=AE=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=8F=8A=E7=9B=B8=E5=85=B3=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/profile.ts | 13 ++ src/components/ForcePasswdChange/index.vue | 198 +++++++++++++++++++++ src/layouts/BasicLayout.vue | 3 + src/store/modules/user.ts | 10 ++ 4 files changed, 224 insertions(+) create mode 100644 src/components/ForcePasswdChange/index.vue diff --git a/src/api/profile.ts b/src/api/profile.ts index 63295ed3..3e52e664 100644 --- a/src/api/profile.ts +++ b/src/api/profile.ts @@ -37,3 +37,16 @@ export function updateUserPassword(oldPassword: string, newPassword: string) { data: { oldPassword, newPassword }, }); } + +/** + * 用户强制重置密码 + * @param password 密码 + * @returns object + */ +export function updateUserPasswordForce(password: string) { + return request({ + url: '/system/user/profile/password-force', + method: 'PUT', + data: { password }, + }); +} diff --git a/src/components/ForcePasswdChange/index.vue b/src/components/ForcePasswdChange/index.vue new file mode 100644 index 00000000..bd9c0ec4 --- /dev/null +++ b/src/components/ForcePasswdChange/index.vue @@ -0,0 +1,198 @@ + + + + diff --git a/src/layouts/BasicLayout.vue b/src/layouts/BasicLayout.vue index 2d5dddcc..f9bd2e0d 100644 --- a/src/layouts/BasicLayout.vue +++ b/src/layouts/BasicLayout.vue @@ -8,6 +8,7 @@ import { import RightContent from './components/RightContent.vue'; import Tabs from './components/Tabs.vue'; import GlobalMask from '@/components/GlobalMask/index.vue'; +import ForcePasswdChange from '@/components/ForcePasswdChange/index.vue'; import { scriptUrl } from '@/assets/js/icon_font_8d5l8fzk5b87iudi'; import { computed, @@ -362,6 +363,8 @@ onUnmounted(() => { + + diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index 14a3011a..003ac7e9 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -9,6 +9,8 @@ import { parseUrlPath } from '@/plugins/file-static-url'; /**用户信息类型 */ type UserInfo = { + /**用户ID */ + forcePasswdChange: boolean; /**用户ID */ userId: string; /**登录账号 */ @@ -33,6 +35,7 @@ type UserInfo = { const useUserStore = defineStore('user', { state: (): UserInfo => ({ + forcePasswdChange: false, userId: '', userName: '', roles: [], @@ -104,6 +107,9 @@ const useUserStore = defineStore('user', { if (res.code === RESULT_CODE_SUCCESS && res.data) { const token = res.data[TOKEN_RESPONSE_FIELD]; setToken(token); + if (res.data?.forcePasswdChange) { + this.forcePasswdChange = true; + } } return res; }, @@ -139,6 +145,10 @@ const useUserStore = defineStore('user', { // } // useLayoutStore().changeWaterMark(waterMarkContent); useLayoutStore().changeWaterMark(''); + // 强制修改密码 + if (res.data?.forcePasswdChange) { + this.forcePasswdChange = true; + } } // 网络错误时退出登录状态 if (res.code === 0) { From 45771aba1eadf60145112e3a1b49c45d56b49bf1 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 31 Mar 2025 19:00:48 +0800 Subject: [PATCH 19/54] =?UTF-8?q?fix:=20=E5=9C=A8=E5=AF=86=E7=A0=81?= =?UTF-8?q?=E9=87=8D=E7=BD=AE=E6=88=90=E5=8A=9F=E5=90=8E=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=99=BB=E5=87=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/account/components/reset-passwd.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/views/account/components/reset-passwd.vue b/src/views/account/components/reset-passwd.vue index 2d381cce..b17e3133 100644 --- a/src/views/account/components/reset-passwd.vue +++ b/src/views/account/components/reset-passwd.vue @@ -52,6 +52,7 @@ function fnFinish() { updateUserPassword(state.form.oldPassword, state.form.confirmPassword) .then(res => { if (res.code === RESULT_CODE_SUCCESS) { + fnLogOut(); Modal.success({ title: t('common.tipTitle'), content: t('views.account.settings.submitOkTip', { @@ -59,7 +60,7 @@ function fnFinish() { }), okText: t('views.account.settings.submitOk'), onOk() { - fnLogOut().finally(() => router.push({ name: 'Login' })); + router.push({ name: 'Login' }); }, }); } else { From 2c31da625dc35fba18ac738bbdd6aed31f073e41 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 31 Mar 2025 19:01:16 +0800 Subject: [PATCH 20/54] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=BC=BA?= =?UTF-8?q?=E5=88=B6=E5=AF=86=E7=A0=81=E4=BF=AE=E6=94=B9=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E7=9A=84=E5=9B=BD=E9=99=85=E5=8C=96=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/locales/en-US.ts | 8 ++++++++ src/i18n/locales/zh-CN.ts | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/i18n/locales/en-US.ts b/src/i18n/locales/en-US.ts index 0cd80c73..073f468e 100644 --- a/src/i18n/locales/en-US.ts +++ b/src/i18n/locales/en-US.ts @@ -139,6 +139,14 @@ export default { systemReset:'Resetting now, please wait...', systemReset2:'Data information is being reset.', }, + ForcePasswdChange: { + title: 'Password Change', + desc: 'Instruction', + passwordPolicy: 'Password policy strength', + passwordPolicyMsg: 'At least {minLength} bits, containing at least {specialChars} special characters and at least {uppercase} uppercase and at least {lowercase} lowercase letters.', + passwdExpire: 'Password expiration date', + passwdExpireMsg: 'Valid for {expDay} days, please change your password {alertDay} days before expiration.', + }, }, // 静态路由 diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index 5a75cc1a..361767c3 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -139,6 +139,14 @@ export default { systemReset:'正在重置,请稍等...', systemReset2:'数据信息正在重置', }, + ForcePasswdChange: { + title: '密码修改', + desc: '说明', + passwordPolicy: '密码策略强度', + passwordPolicyMsg: '至少{minLength}位,至少包含{specialChars}个特殊字符和至少{uppercase}大写字母和至少{lowercase}小写字母', + passwdExpire: '密码有效期', + passwdExpireMsg: '有效期为{expDay}天,请在过期前{alertDay}天进行密码修改', + }, }, // 静态路由 From e10a6b5202a3a93b34bc6697dd59f5d5a6beb757 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 31 Mar 2025 19:01:50 +0800 Subject: [PATCH 21/54] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7=202.250321?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 2 +- .env.production | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.development b/.env.development index 90fc9249..7cc34569 100644 --- a/.env.development +++ b/.env.development @@ -11,7 +11,7 @@ VITE_APP_NAME = "Core Network OMC" VITE_APP_CODE = "OMC" # 应用版本 -VITE_APP_VERSION = "2.250321" +VITE_APP_VERSION = "2.250331" # 接口基础URL地址-不带/后缀 VITE_API_BASE_URL = "/omc-api" diff --git a/.env.production b/.env.production index 90fc9249..7cc34569 100644 --- a/.env.production +++ b/.env.production @@ -11,7 +11,7 @@ VITE_APP_NAME = "Core Network OMC" VITE_APP_CODE = "OMC" # 应用版本 -VITE_APP_VERSION = "2.250321" +VITE_APP_VERSION = "2.250331" # 接口基础URL地址-不带/后缀 VITE_API_BASE_URL = "/omc-api" From 7973b179afdb095bbb1df56a906ac0588bb25d32 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 1 Apr 2025 17:34:27 +0800 Subject: [PATCH 22/54] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E8=BF=87=E6=9C=9F=E5=8A=9F=E8=83=BD=E6=94=AF=E6=8C=81?= =?UTF-8?q?=EF=BC=8C=E5=AF=86=E7=A0=81=E6=9C=89=E6=95=88=E6=9C=9F=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ForcePasswdChange/index.vue | 35 +++++++++++++++++----- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/src/components/ForcePasswdChange/index.vue b/src/components/ForcePasswdChange/index.vue index bd9c0ec4..52d65f2f 100644 --- a/src/components/ForcePasswdChange/index.vue +++ b/src/components/ForcePasswdChange/index.vue @@ -23,6 +23,7 @@ type ModalStateType = { /**密码策略 */ passwordPolicy: Record; /**密码有效期 */ + passwdExpireEnable: boolean; passwdExpire: Record; }; @@ -37,6 +38,7 @@ let modalState: ModalStateType = reactive({ }, confirmLoading: false, passwordPolicy: { minLength: 8, specialChars: 2, uppercase: 1, lowercase: 1 }, + passwdExpireEnable: false, passwdExpire: { expHours: 2, alertHours: 1 }, }); @@ -74,6 +76,7 @@ function fnModalOk() { updateUserPasswordForce(password).then(res => { if (res.code === RESULT_CODE_SUCCESS) { userStore.fnLogOut(); + modalState.confirmLoading = true; Modal.success({ title: t('common.tipTitle'), content: t('views.account.settings.submitOkTip', { @@ -108,7 +111,20 @@ onMounted(() => { } if (resArr[1].code === RESULT_CODE_SUCCESS) { try { - modalState.passwdExpire = JSON.parse(resArr[1].data); + const data = JSON.parse(resArr[1].data); + if (data.expHours % 24 === 0) { + data.expHours = data.expHours / 24; + } else { + data.expHours = (data.expHours / 24).toFixed(2); + } + if (data.alertHours % 24 === 0) { + data.alertHours = data.alertHours / 24; + } else { + data.alertHours = (data.alertHours / 24).toFixed(2); + } + console.log(data); + modalState.passwdExpire = data; + modalState.passwdExpireEnable = data.expHours > 0; } catch (error) { console.error('passwdExpire', error); } @@ -155,6 +171,7 @@ onUnmounted(() => {}); >