From 2164ffc9b2725ce0d1f26d9fde95b2c169926cf2 Mon Sep 17 00:00:00 2001
From: TsMask <340112800@qq.com>
Date: Fri, 17 Jan 2025 15:28:33 +0800
Subject: [PATCH 1/4] =?UTF-8?q?fix:=20SMF-CDR=E6=9F=A5=E8=AF=A2IMSI?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=9C=E5=9B=BE=E4=BC=98=E5=8C=96?=
=?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81DNN=E6=9D=A1=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/dashboard/smfCDRByIMSI/index.vue | 72 +++++++++++++---------
1 file changed, 43 insertions(+), 29 deletions(-)
diff --git a/src/views/dashboard/smfCDRByIMSI/index.vue b/src/views/dashboard/smfCDRByIMSI/index.vue
index 841bd578..f7a0939f 100644
--- a/src/views/dashboard/smfCDRByIMSI/index.vue
+++ b/src/views/dashboard/smfCDRByIMSI/index.vue
@@ -73,8 +73,8 @@ const option = {
const downlinkValueF = parseSizeFromByte(downlinkValue);
return `
${title}
- Uplink: ${uplinkValueF}
Downlink: ${downlinkValueF}
+ Uplink: ${uplinkValueF}
`;
},
},
@@ -95,7 +95,7 @@ const option = {
},
dataZoom: [
{
- show: true,
+ show: false,
realtime: true,
start: 0,
end: 100,
@@ -113,13 +113,13 @@ const option = {
{
left: '10%',
right: 50,
- height: '30%',
+ height: '40%',
},
{
left: '10%',
right: 50,
top: '50%',
- height: '30%',
+ height: '40%',
},
],
xAxis: [
@@ -129,7 +129,7 @@ const option = {
axisLine: { onZero: true },
data: [], // x轴初始数据
axisLabel: {
- show: true, // 显示标签
+ show: false, // 显示标签
rotate: 15, // 设置倾斜角度(如15度)
},
},
@@ -147,30 +147,30 @@ const option = {
],
yAxis: [
{
- name: 'Uplink (Byte)',
+ name: 'Downlink (Byte)',
type: 'value',
},
{
gridIndex: 1,
- name: 'Downlink (Byte)',
+ name: 'Uplink (Byte)',
type: 'value',
inverse: true,
},
],
series: [
{
- name: 'Uplink',
+ name: 'Downlink',
type: 'line',
data: [], // y轴初始数据
symbol: 'circle', // 数据点形状
symbolSize: 6, // 数据点大小
smooth: true, // 平滑曲线
- color: 'rgb(17, 178, 255)',
+ color: 'rgb(0, 190, 99)',
areaStyle: {
color: {
colorStops: [
- { offset: 0, color: 'rgba(17, 178, 255, .5)' },
- { offset: 1, color: 'rgba(17, 178, 255, 0.5)' },
+ { offset: 0, color: 'rgba(0, 190, 99, .5)' },
+ { offset: 1, color: 'rgba(0, 190, 99, 0.5)' },
],
x: 0,
y: 0,
@@ -184,7 +184,7 @@ const option = {
},
},
{
- name: 'Downlink',
+ name: 'Uplink',
type: 'line',
xAxisIndex: 1,
yAxisIndex: 1,
@@ -192,12 +192,12 @@ const option = {
symbol: 'circle', // 数据点形状
symbolSize: 6, // 数据点大小
smooth: true, // 平滑曲线
- color: 'rgb(0, 190, 99)',
+ color: 'rgb(17, 178, 255)',
areaStyle: {
color: {
colorStops: [
- { offset: 0, color: 'rgba(0, 190, 99, .5)' },
- { offset: 1, color: 'rgba(0, 190, 99, 0.5)' },
+ { offset: 0, color: 'rgba(17, 178, 255, .5)' },
+ { offset: 1, color: 'rgba(17, 178, 255, 0.5)' },
],
x: 0,
y: 0,
@@ -267,6 +267,7 @@ let queryParams = reactive({
neType: 'SMF',
neId: '001',
subscriberID: '',
+ dnn: '',
sortField: 'timestamp',
sortOrder: 'desc',
/**开始时间 */
@@ -281,6 +282,8 @@ let queryParams = reactive({
/**查询参数重置 */
function fnQueryReset() {
+ queryParams.subscriberID = '';
+ queryParams.dnn = '';
queryRangePicker.value = [dayjs().startOf('hour'), dayjs().endOf('hour')];
fnGetList(1);
}
@@ -611,21 +614,15 @@ onBeforeUnmount(() => {
>
-
-
-
+
+
+ >
@@ -650,6 +647,23 @@ onBeforeUnmount(() => {
+
+
+
+
+
From 8adf2a3dd0d31e21f5da5049ff29b20d682f76cc Mon Sep 17 00:00:00 2001
From: TsMask <340112800@qq.com>
Date: Fri, 17 Jan 2025 15:29:44 +0800
Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=E5=9F=BA=E7=AB=99=E7=8A=B6=E6=80=81?=
=?UTF-8?q?=E6=9D=A1=E4=BB=B6=E6=9F=A5=E8=AF=A2=E6=97=B6=E5=8F=AA=E6=98=BE?=
=?UTF-8?q?=E7=A4=BA=E5=BD=93=E5=89=8D=E7=8A=B6=E6=80=81=E6=95=B0=E9=87=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ne-data/base-station/components/list.vue | 28 +++++++++++++++----
1 file changed, 22 insertions(+), 6 deletions(-)
diff --git a/src/views/ne-data/base-station/components/list.vue b/src/views/ne-data/base-station/components/list.vue
index b7b130e3..1d829638 100644
--- a/src/views/ne-data/base-station/components/list.vue
+++ b/src/views/ne-data/base-station/components/list.vue
@@ -313,6 +313,7 @@ let modalState: ModalStateType = reactive({
address: '',
name: '',
position: '',
+ state: undefined,
},
confirmLoading: false,
});
@@ -481,6 +482,7 @@ onMounted(() => {
v-model:value="queryParams.state"
:options="nbState"
:placeholder="t('common.selectPlease')"
+ @change="fnGetList"
/>
@@ -538,12 +540,25 @@ onMounted(() => {
- {{ t('views.neData.baseStation.online') }}:
- {{ stateNum[0] }}
- {{ t('views.neData.baseStation.offline') }}:
-
- {{ stateNum[1] }}
-
+
+ {{ t('views.neData.baseStation.online') }}:
+ {{ stateNum[0] }}
+
+
+
+ {{ t('views.neData.baseStation.offline') }}:
+
+ {{ stateNum[1] }}
+
+
{{ t('common.reloadText') }}
@@ -627,6 +642,7 @@ onMounted(() => {
Date: Fri, 17 Jan 2025 15:30:22 +0800
Subject: [PATCH 3/4] =?UTF-8?q?style:=20KPI=E6=95=B0=E6=8D=AE=E8=A1=A8?=
=?UTF-8?q?=E6=A0=BC=E5=A4=B4=E6=8F=90=E7=A4=BA=E4=BF=A1=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/perfManage/kpiCReport/index.vue | 305 ++++++----
src/views/perfManage/kpiKeyTarget/index.vue | 590 +++++++++++++-------
src/views/perfManage/kpiOverView/index.vue | 426 ++++++++------
3 files changed, 849 insertions(+), 472 deletions(-)
diff --git a/src/views/perfManage/kpiCReport/index.vue b/src/views/perfManage/kpiCReport/index.vue
index 291327b8..bac19e12 100644
--- a/src/views/perfManage/kpiCReport/index.vue
+++ b/src/views/perfManage/kpiCReport/index.vue
@@ -53,8 +53,6 @@ const route = useRoute();
const { t, currentLocale } = useI18n();
const ws = new WS();
-
-
echarts.use([
TooltipComponent,
GridComponent,
@@ -449,20 +447,19 @@ function fnGetList() {
return item[columns.key] ? Number(item[columns.key]) : 0;
});
-
// 计算总值
- const total = Number(values.reduce((sum, val) => sum + val, 0).toFixed(2));
+ const total = Number(
+ values.reduce((sum, val) => sum + val, 0).toFixed(2)
+ );
// 计算平均值
- const avg = values.length > 0
- ? Number((total / values.length).toFixed(2))
- : 0;
+ const avg = values.length > 0 ? Number((total / values.length).toFixed(2)) : 0;
kpiStats.value.push({
kpiId: columns.key,
title: columns.title,
max: values.length > 0 ? Math.max(...values) : 0,
min: values.length > 0 ? Math.min(...values) : 0,
- avg
+ avg,
});
}
}
@@ -487,16 +484,19 @@ function fnRanderChart() {
return [pt[0], '10%'];
},
confine: true, // 限制 tooltip 显示范围
- backgroundColor: document.documentElement.getAttribute('data-theme') === 'dark'
- ? 'rgba(48, 48, 48, 0.8)'
- : 'rgba(255, 255, 255, 0.9)',
- borderColor: document.documentElement.getAttribute('data-theme') === 'dark'
- ? '#555'
- : '#ddd',
+ backgroundColor:
+ document.documentElement.getAttribute('data-theme') === 'dark'
+ ? 'rgba(48, 48, 48, 0.8)'
+ : 'rgba(255, 255, 255, 0.9)',
+ borderColor:
+ document.documentElement.getAttribute('data-theme') === 'dark'
+ ? '#555'
+ : '#ddd',
textStyle: {
- color: document.documentElement.getAttribute('data-theme') === 'dark'
- ? '#CACADA'
- : '#333'
+ color:
+ document.documentElement.getAttribute('data-theme') === 'dark'
+ ? '#CACADA'
+ : '#333',
},
},
xAxis: {
@@ -633,29 +633,31 @@ function fnRanderChartData() {
type: 'category',
boundaryGap: false,
axisLabel: {
- color: document.documentElement.getAttribute('data-theme') === 'dark'
- ? '#CACADA'
- : '#333'
+ color:
+ document.documentElement.getAttribute('data-theme') === 'dark'
+ ? '#CACADA'
+ : '#333',
},
splitLine: {
show: true,
lineStyle: {
- color: getSplitLineColor()
- }
+ color: getSplitLineColor(),
+ },
},
data: chartDataXAxisData,
},
yAxis: {
axisLabel: {
- color: document.documentElement.getAttribute('data-theme') === 'dark'
- ? '#CACADA'
- : '#333'
+ color:
+ document.documentElement.getAttribute('data-theme') === 'dark'
+ ? '#CACADA'
+ : '#333',
},
splitLine: {
show: true,
lineStyle: {
- color: getSplitLineColor()
- }
+ color: getSplitLineColor(),
+ },
},
},
series: chartDataYSeriesData,
@@ -784,59 +786,49 @@ function handleRowClick(record: any) {
// 监听主题变化
watch(
() => layoutStore.proConfig.theme, // 监听的值
- (newValue) => {
+ newValue => {
if (kpiChart.value) {
const splitLineColor = getSplitLineColor();
// 绘制图数据
- kpiChart.value.setOption(
- {
- tooltip: {
- trigger: 'axis',
- position: function (pt: any) {
- return [pt[0], '10%'];
- },
- confine: true, // 限制 tooltip 显示范围
- backgroundColor: newValue === 'dark'
+ kpiChart.value.setOption({
+ tooltip: {
+ trigger: 'axis',
+ position: function (pt: any) {
+ return [pt[0], '10%'];
+ },
+ confine: true, // 限制 tooltip 显示范围
+ backgroundColor:
+ newValue === 'dark'
? 'rgba(48, 48, 48, 0.8)'
: 'rgba(255, 255, 255, 0.9)',
- borderColor: newValue === 'dark'
- ? '#555'
- : '#ddd',
- textStyle: {
- color: newValue === 'dark'
- ? '#CACADA'
- : '#333'
+ borderColor: newValue === 'dark' ? '#555' : '#ddd',
+ textStyle: {
+ color: newValue === 'dark' ? '#CACADA' : '#333',
+ },
+ },
+ xAxis: {
+ axisLabel: {
+ color: newValue === 'dark' ? '#CACADA' : '#333',
+ },
+ splitLine: {
+ show: true,
+ lineStyle: {
+ color: splitLineColor,
},
},
- xAxis: {
- axisLabel: {
- color: newValue === 'dark'
- ? '#CACADA'
- : '#333'
- },
- splitLine: {
- show: true,
- lineStyle: {
- color: splitLineColor
- }
- }
+ },
+ yAxis: {
+ axisLabel: {
+ color: newValue === 'dark' ? '#CACADA' : '#333',
},
- yAxis: {
- axisLabel: {
- color: newValue === 'dark'
- ? '#CACADA'
- : '#333'
+ splitLine: {
+ show: true,
+ lineStyle: {
+ color: splitLineColor,
},
- splitLine: {
- show: true,
- lineStyle: {
- color: splitLineColor
- }
- }
- }
- }
- );
-
+ },
+ },
+ });
}
}
);
@@ -924,28 +916,50 @@ onBeforeUnmount(() => {
-
+
-
+
-
-
+
+
-
+
@@ -962,7 +976,11 @@ onBeforeUnmount(() => {
-
+
@@ -972,8 +990,12 @@ onBeforeUnmount(() => {
: t('views.perfManage.goldTarget.kpiTableTitle')
}}
-
+
@@ -993,8 +1015,12 @@ onBeforeUnmount(() => {
-
+
{{ t('common.sizeText') }}
@@ -1004,7 +1030,10 @@ onBeforeUnmount(() => {
-
+
{{ t('common.size.default') }}
@@ -1033,32 +1062,108 @@ onBeforeUnmount(() => {
size="small"
/>
-->
-
-
+
+
- (col.width = w)" :show-expand-column="false" @change="fnTableChange">
+ (col.width = w)"
+ :show-expand-column="false"
+ @change="fnTableChange"
+ >
-
+
-
+
+
+
+
+ {{ t('views.perfManage.kpiOverView.totalValue') }}
+
+
+ Sum within Time Range
+
+
+
+
+
+
+
+ {{ t('views.perfManage.kpiOverView.avgValue') }}
+
+
+ Average value over the time range
+
+
+
+
+
+
+
+ {{ t('views.perfManage.kpiOverView.maxValue') }}
+
+
+ Maximum value in time range
+
+
+
+
+
+
+
+ {{ t('views.perfManage.kpiOverView.minValue') }}
+
+
+ Minimum value in the time range
+
+
+
+
+
+
+
diff --git a/src/views/perfManage/kpiKeyTarget/index.vue b/src/views/perfManage/kpiKeyTarget/index.vue
index b36edb0c..012f96fe 100644
--- a/src/views/perfManage/kpiKeyTarget/index.vue
+++ b/src/views/perfManage/kpiKeyTarget/index.vue
@@ -1,8 +1,20 @@
@@ -882,7 +923,54 @@ const tableRowConfig = computed(() => {
size="small"
:loading="tableLoading"
:custom-row="tableRowConfig"
- />
+ >
+
+
+
+ {{ t('views.perfManage.kpiOverView.totalValue') }}
+
+
+ Sum within Time Range
+
+
+
+
+
+
+
+ {{ t('views.perfManage.kpiOverView.avgValue') }}
+
+
+ Average value over the time range
+
+
+
+
+
+
+
+ {{ t('views.perfManage.kpiOverView.maxValue') }}
+
+
+ Maximum value in time range
+
+
+
+
+
+
+
+ {{ t('views.perfManage.kpiOverView.minValue') }}
+
+
+ Minimum value in the time range
+
+
+
+
+
+
+
@@ -944,8 +1032,8 @@ const tableRowConfig = computed(() => {
}
/* 表格行和表头样式 */
-:deep(.ant-table-thead tr th),
-:deep(.ant-table-tbody tr td) {
+:deep(.ant-table-thead tr th),
+:deep(.ant-table-tbody tr td) {
padding: 8px;
height: 40px;
}
From 07eab9378ad88d1038b714160041b438cf4c16f7 Mon Sep 17 00:00:00 2001
From: TsMask <340112800@qq.com>
Date: Fri, 17 Jan 2025 15:54:01 +0800
Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=E6=8E=A5=E5=8F=A3=E5=8A=A0=E5=AF=86?=
=?UTF-8?q?=E5=8F=82=E6=95=B0=E6=8E=A7=E5=88=B6=E5=BC=80=E5=85=B3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/login.ts | 6 ++++--
src/api/ne/neInfo.ts | 6 ++++--
src/constants/cache-keys-constants.ts | 3 +++
src/store/modules/app.ts | 10 ++++++++--
4 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/src/api/login.ts b/src/api/login.ts
index e7ff947d..ca521231 100644
--- a/src/api/login.ts
+++ b/src/api/login.ts
@@ -1,3 +1,5 @@
+import { CACHE_SESSION_CRYPTO_API } from '@/constants/cache-keys-constants';
+import { sessionGet } from '@/utils/cache-session-utils';
import { request } from '@/plugins/http-fetch';
// 登录方法
@@ -7,7 +9,7 @@ export function login(data: Record) {
method: 'post',
data: data,
whithToken: false,
- crypto: true,
+ crypto: sessionGet(CACHE_SESSION_CRYPTO_API) !== 'false',
});
}
@@ -22,7 +24,7 @@ export function register(data: Record) {
method: 'post',
data: data,
whithToken: false,
- crypto: true,
+ crypto: sessionGet(CACHE_SESSION_CRYPTO_API) !== 'false',
});
}
diff --git a/src/api/ne/neInfo.ts b/src/api/ne/neInfo.ts
index 2d66d90b..013443c3 100644
--- a/src/api/ne/neInfo.ts
+++ b/src/api/ne/neInfo.ts
@@ -1,3 +1,5 @@
+import { CACHE_SESSION_CRYPTO_API } from '@/constants/cache-keys-constants';
+import { sessionGet } from '@/utils/cache-session-utils';
import { request } from '@/plugins/http-fetch';
/**
@@ -36,7 +38,7 @@ export function addNeInfo(data: Record) {
url: `/ne/info`,
method: 'post',
data: data,
- crypto: true,
+ crypto: sessionGet(CACHE_SESSION_CRYPTO_API) !== 'false',
timeout: 30_000,
});
}
@@ -51,7 +53,7 @@ export function updateNeInfo(data: Record) {
url: `/ne/info`,
method: 'put',
data: data,
- crypto: true,
+ crypto: sessionGet(CACHE_SESSION_CRYPTO_API) !== 'false',
timeout: 30_000,
});
}
diff --git a/src/constants/cache-keys-constants.ts b/src/constants/cache-keys-constants.ts
index 94e02304..b09b2ffb 100644
--- a/src/constants/cache-keys-constants.ts
+++ b/src/constants/cache-keys-constants.ts
@@ -1,3 +1,6 @@
+/**会话缓存-接口加密 */
+export const CACHE_SESSION_CRYPTO_API = 'cache:session:cryptoApi';
+
/**会话缓存-网络请求 */
export const CACHE_SESSION_FATCH = 'cache:session:fatch';
diff --git a/src/store/modules/app.ts b/src/store/modules/app.ts
index 81405212..b10f77d6 100644
--- a/src/store/modules/app.ts
+++ b/src/store/modules/app.ts
@@ -1,9 +1,10 @@
import { getSysConf } from '@/api';
-import { CACHE_LOCAL_I18N } 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';
import { localGet, localSet } from '@/utils/cache-local-utils';
+import { sessionSet } from '@/utils/cache-session-utils';
import { defineStore } from 'pinia';
/**应用参数类型 */
@@ -22,6 +23,8 @@ type AppStore = {
bootloader: boolean;
// 用户登录认证
loginAuth: boolean;
+ // 用户接口加密
+ cryptoApi: boolean;
// 序列号
serialNum: string;
/**应用版权声明 */
@@ -55,6 +58,7 @@ const useAppStore = defineStore('app', {
buildTime: `-`,
bootloader: false,
loginAuth: true,
+ cryptoApi: true,
serialNum: `-`,
copyright: `Copyright ©2023 For ${import.meta.env.VITE_APP_NAME}`,
logoType: 'icon',
@@ -88,7 +92,9 @@ const useAppStore = defineStore('app', {
if (this.bootloader) {
removeToken();
}
- this.loginAuth = res.data.loginAuth !== 'false' ;
+ this.loginAuth = res.data.loginAuth !== 'false';
+ this.cryptoApi = res.data.cryptoApi !== 'false';
+ sessionSet(CACHE_SESSION_CRYPTO_API, res.data.cryptoApi);
this.serialNum = res.data.serialNum;
this.appName = res.data.title;
this.copyright = res.data.copyright;