diff --git a/package.json b/package.json index 1f88a6d5..38387fa8 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "crypto-js": "4.2.0", "dayjs": "1.11.13", "echarts": "5.6.0", + "echarts-liquidfill": "^3.1.0", "file-saver": "2.0.5", "grid-layout-plus": "1.0.6", "intl-tel-input": "25.2.0", diff --git a/src/i18n/locales/en-US.ts b/src/i18n/locales/en-US.ts index 2f639a10..9decde19 100644 --- a/src/i18n/locales/en-US.ts +++ b/src/i18n/locales/en-US.ts @@ -361,10 +361,13 @@ export default { imsUeNum: "VoNR/VoLTE", smfUeNum: "Data Sessions", gnbBase: "Online gNodeB", + gnbSumBase: "Total gNodeB", enbBase: "Online eNodeB", + enbSumBase: "Total eNodeB", gnbUeNum:'5G Active Users', enbUeNum:'4G Active Users', baseTitle:'Online Information', + nodeBInfo: 'NodeB Information', }, upfFlow:{ title: "UPF Throughput", @@ -394,6 +397,7 @@ export default { }, userActivity: { title: "User Activity", + imsTitle: "IMS Activity", type: "Type", duration: "Duration", caller: "Caller", @@ -668,7 +672,7 @@ export default { toIpPleace: "Please input the remote backup server IP address", toPort: "Service Port", username: "UserName", - usernamePleace: 'Please enter the service login username', + usernamePleace: 'Please enter the service login username', password: "Password", dir: "Save Dir", dirPleace: 'Please enter the service address target file directory', diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index 73214c60..3eb6e173 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -361,10 +361,13 @@ export default { imsUeNum: "IMS 会话数", smfUeNum: "Data 会话数", gnbBase: "5G 基站数", + gnbSumBase: "5G 基站总数", gnbUeNum:'5G 用户数', enbBase: "4G 基站数", + enbSumBase: "4G 基站总数", enbUeNum:'4G 用户数', baseTitle:'在线信息', + nodeBInfo: '基站信息', }, upfFlow:{ title: "用户面吞吐量", @@ -394,6 +397,7 @@ export default { }, userActivity: { title: "用户活动", + imsTitle: "IMS 活动", type: "类型", duration: "时长", caller: "主叫", @@ -668,7 +672,7 @@ export default { toIpPleace: "请输入远程备份服务器 IP 地址", toPort: "服务端口", username: "登录用户名", - usernamePleace: '请输入服务登录用户名', + usernamePleace: '请输入服务登录用户名', password: "登录密码", dir: "保存目录", dirPleace: '请输入服务地址目标文件目录', diff --git a/src/views/dashboard/overview/components/AlarnTypeBar/index.vue b/src/views/dashboard/overview/components/AlarnTypeBar/index.vue index 583bfd03..3469a235 100644 --- a/src/views/dashboard/overview/components/AlarnTypeBar/index.vue +++ b/src/views/dashboard/overview/components/AlarnTypeBar/index.vue @@ -129,79 +129,123 @@ function initPicture() { const optionData: EChartsOption = { title: [ { - show: false, - }, - { - text: t('views.dashboard.overview.alarmTypeBar.topTitle'), + text: 'Top3', + left: 'center', + top: '36%', textStyle: { color: '#fff', - fontSize: '14', - fontWeight: 400, + fontSize: 16, + fontWeight: 'bold', }, - top: '50%', - left: '0%', }, ], + grid: [ + { // 主图 + top: '5%', + left: '20%', + right: '10%', + height: '35%' + }, + { // Top3 + top: '50%', + left: '20%', + right: '10%', + height: '30%' + } + ], tooltip: { - trigger: 'item', + + axisPointer: { type: 'shadow' }, formatter: '{b} : {c}', }, legend: { - orient: 'vertical', - right: '2%', - top: '12%', - data: alarmTypeType.value.map((item: any) => item.name), //label数组 - textStyle: { - color: '#A7D6F4', // 设置图例文字颜色 - }, + show: false }, - grid: [ + xAxis: [ { - top: '60%', - left: '15%', - right: '25%', - bottom: '10%', + type: 'value', + gridIndex: 0, + show: false, }, + { + type: 'value', + gridIndex: 1, + show: false, + } + ], + yAxis: [ + { + type: 'category', + gridIndex: 0, + data: alarmTypeType.value.map((item: any) => item.name), + axisLabel: { color: '#fff', fontSize: 14,fontWeight: 'bold' }, + axisLine: { show: false }, + axisTick: { show: false }, + inverse: true + }, + { + type: 'category', + gridIndex: 1, + data: alarmTypeTypeTop.value.map((item: any) => item.name), + axisLabel: { color: '#fff', fontSize: 14,fontWeight: 'bold' }, + axisLine: { show: false }, + axisTick: { show: false }, + inverse: true + } ], series: [ - //饼图: + // 四类型告警横向柱状图 { - type: 'pie', - radius: '35%', - color: ['#f5222d', '#fa8c16', '#fadb14', '#1677ff', '#13c2c2'], + type: 'bar', + xAxisIndex: 0, + yAxisIndex: 0, + barWidth: 18, + itemStyle: { + borderRadius: [0, 8, 8, 0], + color: function (params: any) { + // 渐变色 + const colorArr = [ + new echarts.graphic.LinearGradient(0, 0, 1, 0, [ + { offset: 0, color: '#f5222d' }, + { offset: 1, color: '#fa8c16' } + ]), + new echarts.graphic.LinearGradient(0, 0, 1, 0, [ + { offset: 0, color: '#fa8c16' }, + { offset: 1, color: '#fadb14' } + ]), + new echarts.graphic.LinearGradient(0, 0, 1, 0, [ + { offset: 0, color: '#fadb14' }, + { offset: 1, color: '#1677ff' } + ]), + new echarts.graphic.LinearGradient(0, 0, 1, 0, [ + { offset: 0, color: '#1677ff' }, + { offset: 1, color: '#00fcff' } + ]) + ]; + return colorArr[params.dataIndex] || colorArr[3]; + } + }, label: { show: true, - position: 'inner', + position: 'right', + color: '#fff', //淡蓝色 + fontWeight: 'bold', + fontSize: 16, formatter: (params: any) => { if (!params.value) return ''; return `${params.value}`; }, }, - labelLine: { - show: false, - }, - center: ['35%', '25%'], - data: alarmTypeType.value, - zlevel: 2, // 设置zlevel为1,使得柱状图在下层显示 - itemStyle: { - shadowBlur: 10, - shadowOffsetX: 0, - shadowColor: 'rgba(0, 0, 0, 0.5)', - }, + data: alarmTypeType.value.map((item: any) => item.value), + zlevel: 2 }, - //柱状 + // Top3横向柱状图 { + name: 'Top3', type: 'bar', - barWidth: 12, // 柱子宽度 - barCategoryGap: '30%', // 控制同一系列的柱间距离 - label: { - show: true, - position: 'right', // 位置 - color: '#A7D6F4', //淡蓝色 - fontSize: 14, - distance: 14, // label与柱子距离 - formatter: '{c}', - }, + xAxisIndex: 1, + yAxisIndex: 1, + barWidth: 18, itemStyle: { borderRadius: [0, 20, 20, 0], // 圆角(左上、右上、右下、左下) color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [ @@ -210,42 +254,19 @@ function initPicture() { { offset: 1, color: '#2f54eb' }, ]), // 渐变 }, - data: alarmTypeTypeTop.value, - }, - ], - // 柱状图设置 - xAxis: [ - { - splitLine: { - show: false, + label: { + show: true, + position: 'right', + color: '#fff', //淡蓝色 + fontWeight: 'bold', + fontSize: 16, + formatter: '{c}' }, - type: 'value', - show: false, - }, - ], - yAxis: [ - { - splitLine: { - show: false, - }, - axisLine: { - //y轴 - show: false, - }, - type: 'category', - axisTick: { - show: false, - }, - inverse: true, - data: alarmTypeTypeTop.value.map((item: any) => item.name), - axisLabel: { - color: '#A7D6F4', - fontSize: 14, - }, - }, - ], + data: alarmTypeTypeTop.value.map((item: any) => item.value), + zlevel: 1 + } + ] }; - fnDesign(alarmTypeBar.value, optionData); }); } diff --git a/src/views/dashboard/overview/components/IMSActivity/index.vue b/src/views/dashboard/overview/components/IMSActivity/index.vue new file mode 100644 index 00000000..ca2aa043 --- /dev/null +++ b/src/views/dashboard/overview/components/IMSActivity/index.vue @@ -0,0 +1,268 @@ + + + + + diff --git a/src/views/dashboard/overview/components/NeResources/index.vue b/src/views/dashboard/overview/components/NeResources/index.vue index fb32626f..669214c8 100644 --- a/src/views/dashboard/overview/components/NeResources/index.vue +++ b/src/views/dashboard/overview/components/NeResources/index.vue @@ -1,24 +1,19 @@ diff --git a/src/views/dashboard/overview/components/Topology/index.vue b/src/views/dashboard/overview/components/Topology/index.vue index 51e55688..1b9e04c8 100644 --- a/src/views/dashboard/overview/components/Topology/index.vue +++ b/src/views/dashboard/overview/components/Topology/index.vue @@ -188,7 +188,7 @@ function handleRanderGraph( } graphG6.value.changeSize( entry.contentRect.width, - entry.contentRect.height - 30 + entry.contentRect.height - 20 ); graphG6.value.fitCenter(); }); diff --git a/src/views/dashboard/overview/components/UserActivity/index.vue b/src/views/dashboard/overview/components/UserActivity/index.vue index 7bd187c1..614b19a2 100644 --- a/src/views/dashboard/overview/components/UserActivity/index.vue +++ b/src/views/dashboard/overview/components/UserActivity/index.vue @@ -65,73 +65,6 @@ onMounted(() => {