修改路径、换图片、图形分析

This commit is contained in:
康冉冉
2025-08-28 18:55:38 +08:00
parent 513d77f40f
commit fd38d86bf1
38 changed files with 1059 additions and 1020 deletions

View File

@@ -1,5 +1,5 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = SAAS管理平台 VUE_APP_TITLE = SAAS综合管理平台
# 开发环境配置 # 开发环境配置
ENV = 'development' ENV = 'development'

View File

@@ -1,5 +1,5 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = SAAS管理平台 VUE_APP_TITLE = SAAS综合管理平台
# 生产环境配置 # 生产环境配置
ENV = 'production' ENV = 'production'

View File

@@ -1,5 +1,5 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = SAAS管理平台 VUE_APP_TITLE = SAAS综合管理平台
BABEL_ENV = production BABEL_ENV = production

View File

@@ -1,7 +1,7 @@
{ {
"name": "ruoyi", "name": "ruoyi",
"version": "3.6.6", "version": "3.6.6",
"description": "SAAS管理平台", "description": "SAAS综合管理平台",
"author": "若依", "author": "若依",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 662 KiB

BIN
public/favicon1.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 17 KiB

BIN
src/assets/logo/logo1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
src/assets/logo/logo2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 KiB

View File

@@ -80,6 +80,12 @@ div:focus {
.plr-50 { .plr-50 {
padding: 0 50px; padding: 0 50px;
} }
.p15 {
padding: 15px;
}
.p20 {
padding: 20px;
}
.fontSize15 { .fontSize15 {
font-size: 15px; font-size: 15px;
} }
@@ -229,9 +235,20 @@ aside {
.w100 { .w100 {
width: 100%; width: 100%;
} }
.h40 {
height: 40%;
}
.h100 { .h100 {
height: 100%; height: 100%;
} }
.textAlignCenter { .textAlignCenter {
text-align: center; text-align: center;
} }
.pageTopForm .el-form-item--medium .el-form-item__label {
width: 80px;
overflow: hidden;
height: 36px;
}
.pageTopForm .el-form-item {
margin-left: 10px!important;
}

View File

@@ -8,9 +8,9 @@
range-separator="" range-separator=""
format="yyyy-MM-dd" format="yyyy-MM-dd"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd"
style="display: inline-block!important;width: 55%!important;" style="display: inline-block!important;width: 45%!important;vertical-align: middle;"
@change="dateChange"/> @change="dateChange"/>
<ul style="display: inline-block"> <ul style="display: inline-block;padding-left: 10px;vertical-align: middle;">
<li :class="{ 'activesbgs' : isActive == 'DAY' }" @click="toggle('DAY',7)">前7天</li> <li :class="{ 'activesbgs' : isActive == 'DAY' }" @click="toggle('DAY',7)">前7天</li>
<li :class="{ 'activesbgs' : isActive == 'WEEK' }" @click="toggle('WEEK',15)">前15天</li> <li :class="{ 'activesbgs' : isActive == 'WEEK' }" @click="toggle('WEEK',15)">前15天</li>
<li :class="{ 'activesbgs' : isActive == 'MONTH' }" @click="toggle('MONTH')">前一个月</li> <li :class="{ 'activesbgs' : isActive == 'MONTH' }" @click="toggle('MONTH')">前一个月</li>
@@ -97,11 +97,11 @@
</script> </script>
<style scoped> <style scoped>
.ultabs { .ultabs {
float: right; width: 500px;
position: relative; float: right;
z-index: 9; position: relative;
margin-top: 30px; z-index: 9;
margin-right: 2%; margin-top: -10px;
} }
.ultabs ul li { .ultabs ul li {
@@ -132,10 +132,4 @@
line-height: 40px !important; line-height: 40px !important;
border: 1px solid #5D78FF; border: 1px solid #5D78FF;
} }
::v-deep .ultabs .el-range-editor--medium .el-range-input{
vertical-align: super!important;
}
::v-deep .ultabs .el-range-editor--medium .el-range-separator{
vertical-align: super!important;
}
</style> </style>

View File

@@ -37,10 +37,22 @@
const pieDataListIntance = echarts.init(document.getElementById('pieChart' + this.num)); const pieDataListIntance = echarts.init(document.getElementById('pieChart' + this.num));
let option = { let option = {
color: dataList.color, color: dataList.color,
// title: [
// {
// text: `${dataList.centerVal}${dataList.unit}`,
// left: "16%",
// top: "43%",
// textStyle: {
// fontSize: 18,
// fontWeight: "bold",
// color: "#333",
// },
// }
// ],
legend: { legend: {
orient: 'vertical', // 垂直排列 // orient: 'vertical', // 垂直排列
top: 'center', // 垂直居中 top: 'bottom', // 垂直居中
right: 40, // 距离右侧40px // right: 1, // 距离右侧40px
itemWidth: 12, // 图例标记宽度 itemWidth: 12, // 图例标记宽度
itemHeight: 12, // 图例标记高度 itemHeight: 12, // 图例标记高度
itemGap: 20, // 图例项间距 itemGap: 20, // 图例项间距
@@ -58,8 +70,8 @@
series: [{ series: [{
name: 'Access From', name: 'Access From',
type: 'pie', type: 'pie',
radius: ['40%', '70%'], radius: dataList && dataList.radius || ['40%', '70%'],
center: dataList && dataList.center || ['20%', '50%'], // center: dataList && dataList.center || ['20%', '50%'],
label: { label: {
show: false, show: false,
position: 'center' position: 'center'
@@ -74,18 +86,18 @@
}, },
data: dataList.data data: dataList.data
}], }],
// graphic: [{ graphic: [{
// type: 'text', type: 'text',
// left: 'center', left: 'center',
// top: 'middle', top: 'middle',
// style: { style: {
// text: `${dataList.centerVal}${dataList.unit}`, text: `${dataList.centerVal}${dataList.unit}`,
// textBaseline: 'middle', textBaseline: 'middle',
// textAlign: 'center', textAlign: 'center',
// fontSize: 20, fontSize: 20,
// fill: '#333' fill: '#333'
// } }
// }], }],
}; };
pieDataListIntance.setOption(option); pieDataListIntance.setOption(option);
// window.addEventListener("resize", () => { // window.addEventListener("resize", () => {

View File

@@ -95,7 +95,6 @@
methods: { methods: {
// 所有方法都抛出到父组件里去 // 所有方法都抛出到父组件里去
handleClick(item, row) { handleClick(item, row) {
console.log('row==',row);
this.$emit("fnClick", item, row, this.ids, this.selectList); this.$emit("fnClick", item, row, this.ids, this.selectList);
}, },
@@ -132,7 +131,6 @@
this.selectList.forEach(val => { this.selectList.forEach(val => {
this.$refs.selChangeList.toggleRowSelection(val,true); this.$refs.selChangeList.toggleRowSelection(val,true);
}); });
console.log('selectList==',this.selectList);
}, },
// 提供给父组件调用的方法:返回当前表格的选中数据 // 提供给父组件调用的方法:返回当前表格的选中数据
getSelectedData() { getSelectedData() {

View File

@@ -9,13 +9,13 @@
<template v-if="device!=='mobile'"> <template v-if="device!=='mobile'">
<search id="header-search" class="right-menu-item" /> <search id="header-search" class="right-menu-item" />
<el-tooltip content="源码地址" effect="dark" placement="bottom"> <!-- <el-tooltip content="源码地址" effect="dark" placement="bottom">-->
<ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" /> <!-- <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />-->
</el-tooltip> <!-- </el-tooltip>-->
<el-tooltip content="文档地址" effect="dark" placement="bottom"> <!-- <el-tooltip content="文档地址" effect="dark" placement="bottom">-->
<ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" /> <!-- <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />-->
</el-tooltip> <!-- </el-tooltip>-->
<screenfull id="screenfull" class="right-menu-item hover-effect" /> <screenfull id="screenfull" class="right-menu-item hover-effect" />

View File

@@ -5,6 +5,7 @@ Vue.use(Router)
/* Layout */ /* Layout */
import Layout from '@/layout' import Layout from '@/layout'
import DialogView from '@/views/disRevenue/earnManage/server/dialogView.vue'
/** /**
* Note: 路由配置项 * Note: 路由配置项
@@ -87,6 +88,11 @@ export const constantRoutes = [
meta: { title: '个人中心', icon: 'user' } meta: { title: '个人中心', icon: 'user' }
} }
] ]
},
{
path: '/dialog-view',
component: DialogView,
name: 'DialogView'
} }
] ]
@@ -191,6 +197,20 @@ export const dynamicRoutes = [
} }
] ]
}, },
{
path: '/disRevenue/earnManage/server/graphicAnalysis',
component: Layout,
hidden: true,
permissions: ['disRevenue:earnManage:server:graphicAnalysis'],
children: [
{
path: 'index/:dialogVal?',
component: () => import('@/views/disRevenue/earnManage/server/dialogView'),
name: 'DialogView',
meta: { title: '图形分析', activeMenu: '/disRevenue/earnManage/server' }
}
]
},
// 交换机宽带收益 // 交换机宽带收益
{ {
path: '/disRevenue/earnManage/switch/list', path: '/disRevenue/earnManage/switch/list',

View File

@@ -56,13 +56,13 @@ service.interceptors.request.use(config => {
const s_data = sessionObj.data // 请求数据 const s_data = sessionObj.data // 请求数据
const s_time = sessionObj.time // 请求时间 const s_time = sessionObj.time // 请求时间
const interval = 1000 // 间隔时间(ms),小于此时间视为重复提交 const interval = 1000 // 间隔时间(ms),小于此时间视为重复提交
if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { // if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
const message = '数据正在处理,请勿重复提交' // const message = '数据正在处理,请勿重复提交'
console.warn(`[${s_url}]: ` + message) // console.warn(`[${s_url}]: ` + message)
return Promise.reject(new Error(message)) // return Promise.reject(new Error(message))
} else { // } else {
cache.session.setJSON('sessionObj', requestObj) cache.session.setJSON('sessionObj', requestObj)
} // }
} }
} }
return config return config

View File

@@ -52,7 +52,7 @@
countBusinessName(dataVal).then(response => { countBusinessName(dataVal).then(response => {
addBusiness(dataVal).then(response => { addBusiness(dataVal).then(response => {
this.$modal.msgSuccess(response.msg); this.$modal.msgSuccess(response.msg);
this.$router.push("/disRevenue/earnManage/business"); this.$router.push("/earnManage/business");
this.loading = false; this.loading = false;
}).catch(() => { }).catch(() => {
this.$modal.msgError("操作失败"); this.$modal.msgError("操作失败");
@@ -64,7 +64,7 @@
}); });
break; break;
case 'cancle': case 'cancle':
this.$router.push("/disRevenue/earnManage/business"); this.$router.push("/earnManage/business");
break; break;
default: default:
} }

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="app-container"> <div class="app-container pageTopForm">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="130px"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="130px">
<el-form-item label="业务名称" prop="businessName"> <el-form-item label="业务名称" prop="businessName">
<el-col :span="4"> <el-col :span="4">

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="app-container"> <div class="app-container pageTopForm">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="130px"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="130px">
<el-form-item label="节点名称" prop="nodeName"> <el-form-item label="节点名称" prop="nodeName">
<el-col :span="4"> <el-col :span="4">

View File

@@ -74,7 +74,7 @@
calculateAvg(dataVal).then(response => { calculateAvg(dataVal).then(response => {
this.$modal.msgSuccess(response.msg); this.$modal.msgSuccess(response.msg);
if (this.paramsData && this.paramsData.resourceType === '1') { if (this.paramsData && this.paramsData.resourceType === '1') {
this.$router.push("/disRevenue/earnManage/server"); this.$router.push("/earnManage/server");
} }
// else { // else {
// this.$router.push("/disRevenue/earnManage/switch"); // this.$router.push("/disRevenue/earnManage/switch");
@@ -85,7 +85,7 @@
break; break;
case 'cancle': case 'cancle':
if (this.paramsData && this.paramsData.resourceType === '1') { if (this.paramsData && this.paramsData.resourceType === '1') {
this.$router.push("/disRevenue/earnManage/server"); this.$router.push("/earnManage/server");
} }
// else { // else {
// this.$router.push("/disRevenue/earnManage/switch"); // this.$router.push("/disRevenue/earnManage/switch");

View File

@@ -0,0 +1,121 @@
<template>
<div class="app-container">
<div style="height: 90px;">
<el-form ref="noticeRef" :model="form" label-width="80px">
<el-form-item label="节点名称" prop="noticeType">
<el-select v-model="form.noticeType" multiple placeholder="请选择节点名称">
<el-option
v-for="item in selectChangeList"
:key="item.id"
:label="item.nodeName"
:value="item.id"/>
</el-select>
</el-form-item>
</el-form>
<el-switch v-for="item of switchData" v-model="item.type" :activeText="item.name" class="mr20" />
</div>
<div style="height: calc(100vh - 130px);overflow: scroll;">
<template v-for="(item,index) of selectChoose">
<EchartsLine v-show="switchData[0].type" :chartData="chartDataEvent"
:lineData="lineDataParams" :title="'【' + item.nodeName + '】【' + item.businessName + '】' + switchData[0].name" class="w100 h40 mt20 mb20" style="border: 1.5px solid #878787;"></EchartsLine>
<EchartsLine v-show="switchData[1].type" :chartData="chartDataEvent"
:lineData="lineDataParams" :title="'【' + item.nodeName + '】【' + item.businessName + '】' + switchData[1].name" class="w100 h40 mt20 mb20" style="border: 1.5px solid #878787;"></EchartsLine>
<EchartsBar v-show="switchData[2].type" :chartData="chartDataEvent"
:barData="lineDataParams" :title="'【' + item.nodeName + '】【' + item.businessName + '】' + switchData[2].name" class="w100 h40 mt20 mb20" style="border: 1.5px solid #878787;"></EchartsBar>
</template>
</div>
<!-- <template #footer>-->
<!-- <div class="dialog-footer">-->
<!-- &lt;!&ndash; <el-button type="primary" @click="submitForm"> </el-button>&ndash;&gt;-->
<!-- <el-button @click="cancel"> </el-button>-->
<!-- </div>-->
<!-- </template>-->
</div>
</template>
<script setup>
import Form from '@/components/form/index.vue';
import EchartsLine from "@/components/echartsList/line.vue";
import EchartsBar from "@/components/echartsList/bar.vue";
export default {
name: 'DialogView',
components: {Form, EchartsLine, EchartsBar},
data() {
return {
paramsData: {},
form: {},
storageKey: '',
selectChangeList: [],
switchData: [
{id: 'ninetyFiveDay', type: true, name: '95宽带值Mbps/日'},
{id: 'ninetyFiveMonth', type: true, name: '95宽带值Mbps/月'},
{id: 'packageEnd', type: true, name: '包端宽带值Mbps/日'}
],
selectChoose: [],
lineDataParams: {
lineXData: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
data: [820, 932, 901, 934, 1290, 1330, 1320]
},
}
},
created() {},
mounted() {
this.storageKey = this.$route.query && this.$route.query['storageKey'];
if (this.storageKey) {
this.paramsData = localStorage.getItem(this.storageKey);
if (this.paramsData) {
this.processData(JSON.parse(this.paramsData));
}
}
},
destroyed() {
localStorage.removeItem(this.storageKey);
},
methods: {
processData(list) {
this.selectChangeList = list;
if (list.length >=2) {
this.form.noticeType = [list[0].id, list[1].id];
} else {
this.form.noticeType = [list[0].id];
}
this.form.noticeType.forEach(item => {
list.some(val => {
if (item === val.id) {
this.selectChoose.push(val);
return true;
}
});
});
},
chartDataEvent(val) {
// console.log('val===',val);
return val;
},
// 监听事件
callback(result, dataVal, formVal) {
if (result && result.fnCode) {
switch (result.fnCode) {
case 'submit':
break;
case 'cancle':
break;
default:
}
}
}
}
}
</script>
<style scoped>
::v-deep .ultabs .el-range-editor .el-range-input {
vertical-align: super!important;
}
::v-deep .ultabs .el-date-editor .el-range-separator {
vertical-align: super!important;
}
::-webkit-scrollbar {
width: 0px!important;
height: 0px!important;
}
</style>

View File

@@ -1,7 +1,7 @@
<template> <template>
<div class="app-container"> <div class="app-container pageTopForm">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" label-width="auto" class="demo-ruleForm"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" label-width="70px" class="demo-ruleForm">
<el-col :span="7"> <el-col :span="8">
<el-form-item label="节点名称" prop="nodeName"> <el-form-item label="节点名称" prop="nodeName">
<el-input <el-input
v-model="queryParams.nodeName" v-model="queryParams.nodeName"
@@ -11,17 +11,7 @@
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="7"> <el-col :span="8">
<el-form-item label="硬件SN" prop="hardwareSn">
<el-input
v-model="queryParams.hardwareSn"
placeholder="请输入硬件SN"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="类型" prop="bandwidthType"> <el-form-item label="类型" prop="bandwidthType">
<el-select <el-select
v-model="queryParams.bandwidthType" v-model="queryParams.bandwidthType"
@@ -35,8 +25,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="7" v-show="queryParams.bandwidthType === '1'"> <el-col :span="8" v-show="queryParams.bandwidthType === '1'">
<el-form-item label="95宽带值Mbps/日" prop="bandwidth95Daily"> <el-form-item label="95宽带值Mbps/日" title="95宽带值Mbps/日" prop="bandwidth95Daily">
<el-date-picker <el-date-picker
v-model="queryParams.bandwidth95Daily" v-model="queryParams.bandwidth95Daily"
type="daterange" type="daterange"
@@ -47,7 +37,7 @@
end-placeholder="结束日期"/> end-placeholder="结束日期"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="7" v-show="queryParams.bandwidthType === '2'"> <el-col :span="8" v-show="queryParams.bandwidthType === '2'">
<el-form-item label="95宽带值Mbps/月" prop="bandwidth95Monthly"> <el-form-item label="95宽带值Mbps/月" prop="bandwidth95Monthly">
<el-date-picker <el-date-picker
v-model="queryParams.bandwidth95Monthly" v-model="queryParams.bandwidth95Monthly"
@@ -58,7 +48,7 @@
end-placeholder="结束月份"/> end-placeholder="结束月份"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="7" v-show="queryParams.bandwidthType === '3'"> <el-col :span="8" v-show="queryParams.bandwidthType === '3'">
<el-form-item label="包端带宽值Mbps/日" prop="packageBandwidthDaily"> <el-form-item label="包端带宽值Mbps/日" prop="packageBandwidthDaily">
<el-date-picker <el-date-picker
v-model="queryParams.packageBandwidthDaily" v-model="queryParams.packageBandwidthDaily"
@@ -70,7 +60,17 @@
end-placeholder="结束日期"/> end-placeholder="结束日期"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="7"> <el-col :span="8">
<el-form-item label="硬件SN" prop="hardwareSn">
<el-input
v-model="queryParams.hardwareSn"
placeholder="请输入硬件SN"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item class="lastBtnSty"> <el-form-item class="lastBtnSty">
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -80,37 +80,6 @@
<!-- 表格数据 --> <!-- 表格数据 -->
<TableList :columns="columns" :config="config" :queryParams="queryParams" :tableList="tableList" @fnClick="callback" @fnRenderList="getList" @value-change="handleValueChange"></TableList> <TableList :columns="columns" :config="config" :queryParams="queryParams" :tableList="tableList" @fnClick="callback" @fnRenderList="getList" @value-change="handleValueChange"></TableList>
<!-- 图形分析 -->
<el-dialog :title="title" :visible.sync="open" width="780px" append-to-body fullscreen>
<el-form v-if="open" ref="noticeRef" :model="form" label-width="80px">
<el-form-item label="节点名称" prop="noticeType">
<el-select v-model="form.noticeType" multiple placeholder="请选择节点名称">
<el-option
v-for="item in selectChangeList"
:key="item.id"
:label="item.nodeName"
:value="item.id"/>
</el-select>
</el-form-item>
</el-form>
<div>
<el-switch v-for="item of switchData" v-model="item.type" :activeText="item.name" class="mr20" />
<div v-for="(item,index) of selectChoose">
<EchartsLine v-show="switchData[0].type" :chartData="chartDataEvent"
:lineData="lineDataParams" :title="'【' + item.nodeName + '】【' + item.businessName + '】' + switchData[0].name" class="mt20 mb20" style="width: 100%;height: 420px;border: 1.5px solid #878787;"></EchartsLine>
<EchartsLine v-show="switchData[1].type" :chartData="chartDataEvent"
:lineData="lineDataParams" :title="'【' + item.nodeName + '】【' + item.businessName + '】' + switchData[1].name" class="mt20 mb20" style="width: 100%;height: 420px;border: 1.5px solid #878787;"></EchartsLine>
<EchartsBar v-show="switchData[2].type" :chartData="chartDataEvent"
:barData="lineDataParams" :title="'【' + item.nodeName + '】【' + item.businessName + '】' + switchData[2].name" class="mt20 mb20" style="width: 100%;height: 420px;border: 1.5px solid #878787;"></EchartsBar>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<!-- <el-button type="primary" @click="submitForm"> </el-button>-->
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div> </div>
</template> </template>
@@ -126,23 +95,8 @@
data() { data() {
return { return {
tableList: [], tableList: [],
selectChangeList: [],
loading: true, loading: true,
showSearch: true, showSearch: true,
ids: [],
single: true,
multiple: true,
total: 0,
dateRange: [],
open: false,
title: '',
switchData: [
{id: 'ninetyFiveDay', type: true, name: '95宽带值Mbps/日'},
{id: 'ninetyFiveMonth', type: true, name: '95宽带值Mbps/月'},
{id: 'packageEnd', type: true, name: '包端宽带值Mbps/日'}
],
lineDataParams: {},
selectChoose: [],
// 列显隐信息 // 列显隐信息
columns: { columns: {
id: {label: `ID`}, id: {label: `ID`},
@@ -179,7 +133,6 @@
] ]
} }
}, },
form: {},
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
@@ -231,40 +184,24 @@
/** 重置按钮操作 */ /** 重置按钮操作 */
resetQuery() { resetQuery() {
this.dateRange = [];
this.resetForm("queryRef"); this.resetForm("queryRef");
this.handleQuery(); this.handleQuery();
}, },
/** 图形分析 */ /** 图形分析 */
graphicAnalysis(list) { graphicAnalysis(list) {
this.open = true; // 生成唯一 key避免数据冲突
this.title = "图形分析"; const storageKey = `temp_data_${Date.now()}`;
this.selectChangeList = list; // 1. 将数据存入 localStorage需序列化
if (list.length >=2) { localStorage.setItem(storageKey, JSON.stringify(list));
this.form.noticeType = [list[0].id, list[1].id]; // 1. 用 Vue Router 解析目标路由的完整 URL
} else { const routeLocation = this.$router.resolve({
this.form.noticeType = [list[0].id]; name: 'DialogView',
} query: { storageKey }
this.form.noticeType.forEach(item => {
list.some(val => {
if (item === val.id) {
this.selectChoose.push(val);
return true;
}
});
});
this.lineDataParams = {
lineXData: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
data: [820, 932, 901, 934, 1290, 1330, 1320]
}
},
/** 取消按钮 */
cancel() {
this.$nextTick(() => {
this.open = false;
}); });
// 2. 打开新窗口routeLocation.href 是完整路径)
window.open(routeLocation.href, '_blank');
// _blank新标签页_self当前窗口默认
}, },
chartDataEvent(val) { chartDataEvent(val) {

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="app-container"> <div class="app-container pageTopForm">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="auto" class="demo-ruleForm"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="auto" class="demo-ruleForm">
<!-- <el-col :span="7">--> <!-- <el-col :span="7">-->
<el-form-item label="节点名称" prop="nodeName"> <el-form-item label="节点名称" prop="nodeName">

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="app-container"> <div class="app-container pageTopForm">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" label-width="auto" class="demo-ruleForm"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" label-width="auto" class="demo-ruleForm">
<el-col :span="6"> <el-col :span="6">
<el-form-item label="交换机名称" prop="uplinkSwitch"> <el-form-item label="交换机名称" prop="uplinkSwitch">
@@ -101,35 +101,6 @@
<dict-tag :options="dict.type.rm_topology_type" :value="row.interfaceLinkDeviceType"/> <dict-tag :options="dict.type.rm_topology_type" :value="row.interfaceLinkDeviceType"/>
</template> </template>
</TableList> </TableList>
<!-- 图形分析 -->
<el-dialog :title="title" :visible.sync="open" width="780px" append-to-body fullscreen>
<el-form v-if="open" ref="noticeRef" :model="form" label-width="80px">
<el-form-item label="节点名称" prop="noticeType">
<el-select v-model="form.noticeType" multiple placeholder="请选择节点名称">
<el-option
v-for="item in selectChangeList"
:key="item.id"
:label="item.uplinkSwitch"
:value="item.id"/>
</el-select>
</el-form-item>
</el-form>
<div>
<el-switch v-for="item of switchData" v-model="item.type" :activeText="item.name" class="mr20" />
<div v-for="(item,index) of selectChoose">
<EchartsLine v-show="switchData[0].type" :chartData="chartDataEvent"
:lineData="lineDataParams" :title="'【' + item.nodeName + '】【' + item.businessName + '】' + switchData[0].name" class="mt20 mb20" style="width: 100%;height: 420px;border: 1.5px solid #878787;"></EchartsLine>
<EchartsLine v-show="switchData[1].type" :chartData="chartDataEvent"
:lineData="lineDataParams" :title="'【' + item.nodeName + '】【' + item.businessName + '】' + switchData[1].name" class="mt20 mb20" style="width: 100%;height: 420px;border: 1.5px solid #878787;"></EchartsLine>
</div>
</div>
<template #footer>
<div class="dialog-footer">
<!-- <el-button type="primary" @click="submitForm"> </el-button>-->
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div> </div>
</template> </template>
@@ -145,22 +116,8 @@
data() { data() {
return { return {
tableList: [], tableList: [],
selectChangeList: [],
loading: true, loading: true,
showSearch: true, showSearch: true,
ids: [],
single: true,
multiple: true,
total: 0,
dateRange: [],
open: false,
title: '',
switchData: [
{id: 'ninetyFiveDay', type: true, name: '95宽带值Mbps/日'},
{id: 'ninetyFiveMonth', type: true, name: '95宽带值Mbps/月'},
],
lineDataParams: {},
selectChoose: [],
uplinkList:[], // 交换机名称 uplinkList:[], // 交换机名称
// 列显隐信息 // 列显隐信息
columns: { columns: {
@@ -199,7 +156,6 @@
] ]
} }
}, },
form: {},
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
@@ -242,40 +198,24 @@
/** 重置按钮操作 */ /** 重置按钮操作 */
resetQuery() { resetQuery() {
this.dateRange.value = [];
this.resetForm("queryRef"); this.resetForm("queryRef");
this.handleQuery(); this.handleQuery();
}, },
/** 图形分析 */ /** 图形分析 */
graphicAnalysis(list) { graphicAnalysis(list) {
this.open = true; // 生成唯一 key避免数据冲突
this.title = "图形分析"; const storageKey = `temp_data_${Date.now()}`;
this.selectChangeList = list; // 1. 将数据存入 localStorage需序列化
if (list.length >=2) { localStorage.setItem(storageKey, JSON.stringify(list));
this.form.noticeType = [list[0].id, list[1].id]; // 1. 用 Vue Router 解析目标路由的完整 URL
} else { const routeLocation = this.$router.resolve({
this.form.noticeType = [list[0].id]; name: 'DialogView',
} query: { storageKey }
this.form.noticeType.forEach(item => {
list.some(val => {
if (item === val.id) {
this.selectChoose.push(val);
return true;
}
});
});
this.lineDataParams = {
lineXData: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
data: [820, 932, 901, 934, 1290, 1330, 1320]
}
},
/** 取消按钮 */
cancel() {
this.$nextTick(() => {
this.open = false;
}); });
// 2. 打开新窗口routeLocation.href 是完整路径)
window.open(routeLocation.href, '_blank');
// _blank新标签页_self当前窗口默认
}, },
chartDataEvent(val) { chartDataEvent(val) {
// console.log('val===',val); // console.log('val===',val);

View File

@@ -71,13 +71,13 @@
} }
fnType(dataVal).then(response => { fnType(dataVal).then(response => {
this.$modal.msgSuccess(response.msg); this.$modal.msgSuccess(response.msg);
this.$router.push("/disRevenue/resource/group") this.$router.push("/resource/group")
}).catch(() => { }).catch(() => {
this.$modal.msgError("操作失败") this.$modal.msgError("操作失败")
}); });
break; break;
case 'cancle': case 'cancle':
this.$router.push("/disRevenue/resource/group"); this.$router.push("/resource/group");
break; break;
default: default:
} }

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="app-container"> <div class="app-container pageTopForm">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="130px"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="130px">
<el-form-item label="资源组名称" prop="groupName"> <el-form-item label="资源组名称" prop="groupName">
<el-col :span="4"> <el-col :span="4">

View File

@@ -351,7 +351,7 @@
}, },
// 返回 // 返回
goBack() { goBack() {
this.$router.push({path:'/disRevenue/resource/monitorStategy'}); this.$router.push({path:'/resource/monitorStategy'});
}, },
// 监听事件 // 监听事件
callback(result, dataVal, formVal) { callback(result, dataVal, formVal) {

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="app-container"> <div class="app-container pageTopForm">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" label-width="auto"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" label-width="auto">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="搜索" prop="switchName"> <el-form-item label="搜索" prop="switchName">

View File

@@ -326,7 +326,7 @@
}, },
// 返回 // 返回
goBack() { goBack() {
this.$router.push({path:'/disRevenue/resource/monitorTemp'}); this.$router.push({path:'/resource/monitorTemp'});
}, },
// 监听事件 // 监听事件
callback(result, dataVal, formVal) { callback(result, dataVal, formVal) {

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="app-container"> <div class="app-container pageTopForm">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="130px"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="130px">
<el-form-item label="模版名称" prop="switchName"> <el-form-item label="模版名称" prop="switchName">
<el-col :span="4"> <el-col :span="4">

View File

@@ -112,13 +112,13 @@
} }
fnType(dataVal).then(response => { fnType(dataVal).then(response => {
this.$modal.msgSuccess(response.msg); this.$modal.msgSuccess(response.msg);
this.$router.push("/disRevenue/resource/register") this.$router.push("/resource/register")
}).catch(() => { }).catch(() => {
this.$modal.msgError("操作失败") this.$modal.msgError("操作失败")
}); });
break; break;
case 'cancle': case 'cancle':
this.$router.push("/disRevenue/resource/register") this.$router.push("/resource/register")
break; break;
default: default:

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="app-container"> <div class="app-container pageTopForm">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="auto"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="auto">
<el-form-item label="名称" prop="nameKey"> <el-form-item label="名称" prop="nameKey">
<el-col> <el-col>

View File

@@ -1,7 +1,7 @@
<template> <template>
<div class="app-container"> <div class="app-container pageTopForm">
<div style="height: 200px;"> <div style="height: 200px;">
<EchartsPie v-for="item of dataList" :dataList="item" class="w30 h100 disInlineBlock"></EchartsPie> <EchartsPie v-for="item of dataList" :dataList="item" style="width: 33%;" class="h100 disInlineBlock"></EchartsPie>
</div> </div>
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" label-width="auto"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" label-width="auto">
<el-col :span="7"> <el-col :span="7">
@@ -102,7 +102,7 @@
dataList: [{ dataList: [{
centerVal: '56', centerVal: '56',
unit: '台', unit: '台',
center: ['30%', '50%'], center: ['20%', '50%'],
color: ['#31bb42', '#f96602'], color: ['#31bb42', '#f96602'],
data: [ data: [
{ value: 36, name: '在线服务器' }, { value: 36, name: '在线服务器' },
@@ -111,7 +111,7 @@
},{ },{
centerVal: '10', centerVal: '10',
unit: '台', unit: '台',
center: ['30%', '50%'], center: ['20%', '50%'],
color: ['#1c7dbc', '#f80a4f'], color: ['#1c7dbc', '#f80a4f'],
data: [ data: [
{ value: 8, name: '在线交换机' }, { value: 8, name: '在线交换机' },

View File

@@ -73,13 +73,13 @@
} }
fnType(dataVal).then(response => { fnType(dataVal).then(response => {
this.$modal.msgSuccess(response.msg); this.$modal.msgSuccess(response.msg);
this.$router.push("/disRevenue/resource/topology") this.$router.push("/resource/topology")
}).catch(() => { }).catch(() => {
this.$modal.msgError("操作失败") this.$modal.msgError("操作失败")
}); });
break; break;
case 'cancle': case 'cancle':
this.$router.push("/disRevenue/resource/topology"); this.$router.push("/resource/topology");
break; break;
default: default:
} }

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="app-container"> <div class="app-container pageTopForm">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="130px"> <el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="130px">
<el-form-item label="交换机名称" prop="switchName"> <el-form-item label="交换机名称" prop="switchName">
<el-col :span="4"> <el-col :span="4">

View File

@@ -56,7 +56,7 @@
</el-form> </el-form>
<!-- 底部 --> <!-- 底部 -->
<div class="el-login-footer"> <div class="el-login-footer">
<span>Copyright © 2018-2025 ruoyi.vip All Rights Reserved.</span> <span>Copyright © 2018-2025 ZhiRongYun All Rights Reserved.</span>
</div> </div>
</div> </div>
</template> </template>

View File

@@ -61,7 +61,7 @@
</el-form> </el-form>
<!-- 底部 --> <!-- 底部 -->
<div class="el-register-footer"> <div class="el-register-footer">
<span>Copyright © 2018-2025 ruoyi.vip All Rights Reserved.</span> <span>Copyright © 2018-2025 ZhiRongYun All Rights Reserved.</span>
</div> </div>
</div> </div>
</template> </template>

View File

@@ -7,7 +7,7 @@ function resolve(dir) {
const CompressionPlugin = require('compression-webpack-plugin') const CompressionPlugin = require('compression-webpack-plugin')
const name = process.env.VUE_APP_TITLE || 'SAAS管理平台' // 网页标题 const name = process.env.VUE_APP_TITLE || 'SAAS综合管理平台' // 网页标题
const port = process.env.port || process.env.npm_config_port || 80 // 端口 const port = process.env.port || process.env.npm_config_port || 80 // 端口
@@ -32,9 +32,9 @@ module.exports = {
port: port, port: port,
open: true, open: true,
proxy: { proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy // detail: https://cli.vuejs.org/config/#devserver-proxy http://192.168.9.143:8080
[process.env.VUE_APP_BASE_API]: { [process.env.VUE_APP_BASE_API]: {
target: `http://192.168.9.143:8080`, target: `http://192.168.9.137:8080`,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: '' ['^' + process.env.VUE_APP_BASE_API]: ''