From 653b3c2cc304738be0aa6f341ac9338f421e9ee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=B7=E5=86=89=E5=86=89?= Date: Thu, 16 Oct 2025 19:08:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A4=E6=8D=A2=E6=9C=BA=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=E7=AD=96=E7=95=A5=E3=80=81=E5=9B=BE=E5=BD=A2=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/disRevenue/resource.js | 58 +++ src/components/echartsList/dateTimeSelect.vue | 71 ++- src/components/echartsList/line.vue | 27 +- src/components/form/index.vue | 2 +- src/router/index.js | 15 + src/views/index.vue | 44 +- .../switchMonitorStrat/monitorStrategy.vue | 298 +++++++++++++ .../switchMonitorStrat/switchMonitorStrat.vue | 203 +++++++++ .../resource/switchRegister/firstMonitor.vue | 88 +--- .../resource/switchRegister/monitorChart.vue | 407 +++++++++++++++++- .../switchRegister/secondAutoFind.vue | 191 +++----- src/views/resource/topology/details.vue | 6 +- 12 files changed, 1161 insertions(+), 249 deletions(-) create mode 100644 src/views/resource/switchMonitorStrat/monitorStrategy.vue create mode 100644 src/views/resource/switchMonitorStrat/switchMonitorStrat.vue diff --git a/src/api/disRevenue/resource.js b/src/api/disRevenue/resource.js index 3fd4ad5..a3a7cea 100644 --- a/src/api/disRevenue/resource.js +++ b/src/api/disRevenue/resource.js @@ -288,6 +288,24 @@ export function getResMonitorGroup() { method: 'get' }) } +/** ----------------交换机监控策略------------ */ +// 新增 +export function addResourcePolicy(data) { + return request({ + url: '/rocketmq/monitorPolicy/addResourcePolicy', + method: 'post', + data: data + }) +} +// 修改 +export function updateResourcePolicy(data) { + return request({ + url: '/rocketmq/monitorPolicy/updateResourcePolicy', + method: 'post', + data: data + }) +} + /** ----------------脚本服务器策略------------ */ // 查询列表 export function listPolicy(query) { @@ -484,6 +502,46 @@ export function switchPowerData(data) { data: data }) } +// 图形监控-自动发现项-基础信息 +export function switchNetDetails(data) { + return request({ + url: '/rocketmq/switchInfo/getSwitchNetDetailsMsg', + method: 'post', + data: data + }) +} +// 图形监控-自动发现项-丢包 +export function switchNetDiscards(data) { + return request({ + url: '/rocketmq/switchInfo/switchNetDiscardsEcharts', + method: 'post', + data: data + }) +} +// 图形监控-自动发现项-总流量 +export function switchNeTotal(data) { + return request({ + url: '/rocketmq/switchInfo/switchNetTotalEcharts', + method: 'post', + data: data + }) +} +// 图形监控-自动发现项-错误丢包 +export function switchNetErrDiscard(data) { + return request({ + url: '/rocketmq/switchInfo/switchNetErrDiscardsEcharts', + method: 'post', + data: data + }) +} +// 图形监控-自动发现项-实时流量 +export function switchNetSpeed(data) { + return request({ + url: '/rocketmq/switchInfo/switchNetSpeedEcharts', + method: 'post', + data: data + }) +} /** --------------接口备注信息--------------- */ diff --git a/src/components/echartsList/dateTimeSelect.vue b/src/components/echartsList/dateTimeSelect.vue index 8afd0cd..9131548 100644 --- a/src/components/echartsList/dateTimeSelect.vue +++ b/src/components/echartsList/dateTimeSelect.vue @@ -26,13 +26,15 @@ @@ -48,6 +50,21 @@ sideIcon: { type: Object, default: () => {} + }, + dateDataTrans: { + type: Object, + default: () => {} + } + }, + watch: { + dateDataTrans: { + handler(val) { + if (val && val.dateRange) { + this.dateRange = val.dateRange; + } + }, + deep: true, + immediate: true } }, data() { @@ -80,9 +97,12 @@ }, // 时间选择器 dateChange() { - this.$emit("dataChange", this.isActive, this.dateRange); - this.isActive = ''; - // this.getDaysOfPreviousMonth(this.dateRange[0], this.dateRange[1]); + if (this.dateDataTrans && this.dateDataTrans.transList) { + this.getDaysOfPreviousMonth(this.dateRange[0], this.dateRange[1]); + } else { + this.$emit("dataChange", this.isActive, this.dateRange); + this.isActive = ''; + } }, // 获取当前日期前7天的所有日期(格式:YYYY-MM-DD) getLastDays(num) { @@ -107,15 +127,29 @@ // 获取前一个月的所有日期 getDaysOfPreviousMonth(star, end) { // 1. 获取当前日期(终点日期) - const currentDate = new Date(); + let currentDate = new Date(); + if (end) { + currentDate = new Date(end); + } const endYear = currentDate.getFullYear(); const endMonth = currentDate.getMonth(); // 0=1月,11=12月 const endDay = currentDate.getDate(); // 当前日(如8) // 2. 计算起点日期(当前日期的“上月同日”,处理边界:如3月31日→2月28/29日) - const startDate = new Date(endYear, endMonth, endDay); - // 核心:将当前日期的月份减1(得到上月同日,自动处理天数不足问题) - startDate.setMonth(startDate.getMonth() - 1); + let startDate = new Date(endYear, endMonth, endDay); + if (star) { + startDate = new Date(star); + } else { + // 核心:将当前日期的月份减1(得到上月同日,自动处理天数不足问题) + startDate.setMonth(startDate.getMonth() - 1); + } + // 日期后面的时间 + let timeStar = ''; + let timeEnd = ''; + if (this.dateShowType === 'datetimerange') { + timeStar = String(new Date(startDate).getHours()).padStart(2, '0') + ':' + String(new Date(startDate).getMinutes()).padStart(2, '0') + ':' + String(new Date(startDate).getSeconds()).padStart(2, '0'); + timeEnd = String(new Date(currentDate).getHours()).padStart(2, '0') + ':' + String(new Date(currentDate).getMinutes()).padStart(2, '0') + ':' + String(new Date(currentDate).getSeconds()).padStart(2, '0'); + } // 3. 提取起点日期的年、月、日(用于循环判断) const startYear = startDate.getFullYear(); @@ -133,15 +167,20 @@ const year = tempDate.getFullYear(); const month = String(tempDate.getMonth() + 1).padStart(2, '0'); const day = String(tempDate.getDate()).padStart(2, '0'); - const formattedDate = `${year}-${month}-${day}`; - + let formattedDate = `${year}-${month}-${day}`; + if (this.dateShowType === 'datetimerange') { + if (dateCollection && dateCollection.length <= 0) { + formattedDate = formattedDate + ' ' + timeStar; + } else { + formattedDate = formattedDate + ' ' + timeEnd; + } + } dateCollection.push(formattedDate); - // 临时日期加1天(进入下一天) tempDate.setDate(tempDate.getDate() + 1); } let timeArr = [dateCollection[0], dateCollection[dateCollection.length - 1]]; - this.$emit("dataChange", this.isActive, timeArr); + this.$emit("dataChange", this.isActive, {timeArr: timeArr, timeList: dateCollection}); // this.$emit("dataChange", this.isActive, oneMonthDays); }, // 获取前三个月的月 @@ -181,7 +220,7 @@ ::v-deep .el-date-editor .el-range-separator { vertical-align: super!important; } - ::v-deep .el-date-editor .el-range__close-icon { + ::v-deep .timeIconSty .el-range__close-icon { margin-top: -38px; margin-right: -14px; } diff --git a/src/components/echartsList/line.vue b/src/components/echartsList/line.vue index 0406f7d..a39c188 100644 --- a/src/components/echartsList/line.vue +++ b/src/components/echartsList/line.vue @@ -1,6 +1,6 @@ @@ -24,6 +24,10 @@ type: String, default: null }, + dateDataTrans: { + type: Object, + default: () => ({}) + }, chartData: { type: Function, default: () => { @@ -114,11 +118,30 @@ axisTick: { show: false }, + axisLabel: { + formatter: function(value) { + // 每4个字符换一行(根据实际文本长度调整) + const maxLength = 11; + let result = ''; + let count = 0; + for (let i = 0; i < value.length; i++) { + count++; + result += value[i]; + if (count % maxLength === 0 && i !== value.length - 1) { + result += '\n'; // 换行 + } + } + return result; + }, + // lineHeight: 10, // 行高(确保换行后不重叠) + }, data: dataXY.lineXData }, yAxis: { type: 'value', - name: '单位Mbps', + name: dataXY?.yAxisName || '单位Mbps', + min: 0, // 自定义最小刻度(根据业务需求调整,如 0) + max: dataXY && dataXY.data && dataXY.data.length > 0 ? null : dataXY.dataList && dataXY.dataList[0] && dataXY.dataList[0].data.length > 0 ? null : 100, splitLine: { show: true, }, diff --git a/src/components/form/index.vue b/src/components/form/index.vue index 191f583..c9e7155 100644 --- a/src/components/form/index.vue +++ b/src/components/form/index.vue @@ -42,7 +42,7 @@ :multiple="formVal.multiple" :collapse-tags="formVal.collapseTags" :disabled="toBoolean(formVal.disabled || formItem.config.readonly)" - :placeholder="toBoolean(formVal.disabled || formItem.config.readonly) ? null : formVal.placeholder || `请输入${formVal.label}`" + :placeholder="toBoolean(formVal.disabled || formItem.config.readonly) ? null : formVal.placeholder || `请选择${formVal.label}`" :clearable="formVal.clearable !== false" @[formVal.eventName]="(val) => handleChange(key,val,formVal)"> import('@/views/resource/switchMonitorStrat/monitorStrategy'), + name: 'switchMonitorStatEdit', + meta: { title: '交换机监控策略信息', activeMenu: '/resource/switchMonitorStrat' } + } + ] + }, // 监控模版 { path: '/resource/monitorTemp/details', diff --git a/src/views/index.vue b/src/views/index.vue index a6c6129..2e74678 100644 --- a/src/views/index.vue +++ b/src/views/index.vue @@ -32,7 +32,7 @@ 服务器带宽收益 更多 >> -
+
@@ -41,31 +41,31 @@ 资源监控 更多 >> -
+
-
- - - - -
+ + + + + + + + + + + + + + + + + + + + diff --git a/src/views/resource/switchMonitorStrat/monitorStrategy.vue b/src/views/resource/switchMonitorStrat/monitorStrategy.vue new file mode 100644 index 0000000..4920549 --- /dev/null +++ b/src/views/resource/switchMonitorStrat/monitorStrategy.vue @@ -0,0 +1,298 @@ + + + + + diff --git a/src/views/resource/switchMonitorStrat/switchMonitorStrat.vue b/src/views/resource/switchMonitorStrat/switchMonitorStrat.vue new file mode 100644 index 0000000..815ff97 --- /dev/null +++ b/src/views/resource/switchMonitorStrat/switchMonitorStrat.vue @@ -0,0 +1,203 @@ + + + + diff --git a/src/views/resource/switchRegister/firstMonitor.vue b/src/views/resource/switchRegister/firstMonitor.vue index 27f1b6f..287967c 100644 --- a/src/views/resource/switchRegister/firstMonitor.vue +++ b/src/views/resource/switchRegister/firstMonitor.vue @@ -1,12 +1,12 @@ @@ -16,79 +16,23 @@ export default { name: 'FirstMonitor', components: {EchartsLine}, - data() { - return { - formListTow: [], - formValue: {remarks: 'aaa', address: 'aaa', objId: 'aaa', macAddress: 'aaa', - time: 'aaa', sbName: 'aaa', msg: 'aaa', versions: 'aaa', sysName: 'aaa'}, - paramsData: {}, - resultData: [{ - title: '设备CPU使用率(%)', - dataVal: { - titleVal: {textAlign: 'left', left: '1%'}, - gridTop: '35%', - legend: {top: '15%', left: '10%'}, - lineXData: ['2025-9-1', '2025-9-2', '2025-9-3', '2025-9-4', '2025-9-5', '2025-9-6', '2025-9-7'], - dataList: [{ - name: '设备CPU使用率', - data: [120, 132, 101, 134, 90, 230, 210], - }] - } - },{ - title: '设备内存使用率(%)', - dataVal: { - titleVal: {textAlign: 'left', left: '1%'}, - gridTop: '35%', - legend: {top: '15%', left: '10%'}, - lineXData: ['2025-9-1', '2025-9-2', '2025-9-3', '2025-9-4', '2025-9-5', '2025-9-6', '2025-9-7'], - dataList: [{ - name: '设备内存使用率', - data: [120, 132, 101, 134, 90, 230, 210], - },{ - name: 'CPU运行用户进程所花费的时间', - data: [220, 182, 191, 234, 290, 330, 310] - }] - } - },{ - title: '功率', - dataVal: { - titleVal: {textAlign: 'left', left: '1%'}, - gridTop: '35%', - legend: {top: '15%', left: '10%'}, - lineXData: ['2025-9-1', '2025-9-2', '2025-9-3', '2025-9-4', '2025-9-5', '2025-9-6', '2025-9-7'], - dataList: [{ - name: '系统平均功率(mW)', - data: [120, 132, 101, 134, 90, 230, 210], - },{ - name: '系统实时功率(mW)', - data: [220, 182, 191, 234, 290, 330, 310] - }] - } - }], + props: { + chartList: { + type: Array, + default: () => [] + }, + formData: { + type: Object, + default: () => {} } }, - created() { - // this.paramsData = this.$route && this.$route.query; - this.fnFormList(); - // this.switchList(); + data() { + return {} }, + created() {}, methods: { - // formList集合 - fnFormList() { - let formFirst = { - remarks: '系统描述', address: '系统位置', objId: '系统Object ID', macAddress: '系统MAC地址', - time: '系统运行时间', sbName: '设备名称', msg: '系统联系信息', versions: '设备软件版本', sysName: '系统名称' - }; - this.formListTow = {...formFirst}; - }, chartDataEvent(valData, funcName) { - // 检查函数是否存在,避免报错 - if (typeof this[funcName] === 'function') { - // 调用实际函数,并传递参数(如选中的值、当前项) - // this[funcName]({startTime: valData[0], endTime: valData[1]}); - } else { - console.warn(`函数 ${funcName} 未定义`); - } + this.$emit("chartFnEvent", valData, funcName); }, } } diff --git a/src/views/resource/switchRegister/monitorChart.vue b/src/views/resource/switchRegister/monitorChart.vue index aaa169b..076a942 100644 --- a/src/views/resource/switchRegister/monitorChart.vue +++ b/src/views/resource/switchRegister/monitorChart.vue @@ -2,11 +2,13 @@
- + @@ -19,21 +21,402 @@