feat 车辆数据展示 以及负载展示

master
rouchen 2024-06-04 21:35:02 +08:00
parent 360a217220
commit d5e55ec67a
4 changed files with 86 additions and 44 deletions

View File

@ -13,3 +13,11 @@ export function selectCarList(){
method: 'post' method: 'post'
}) })
} }
export function selectNode(){
return request({
url: '/connect/selectNode',
method: 'post',
})
}

View File

@ -73,7 +73,7 @@ service.interceptors.request.use(config => {
// 响应拦截器 // 响应拦截器
service.interceptors.response.use(res => { service.interceptors.response.use(res => {
debugger
// 未设置状态码则默认成功状态 // 未设置状态码则默认成功状态
const code = res.data.code || 200; const code = res.data.code || 200;
// 获取错误信息 // 获取错误信息

View File

@ -12,9 +12,9 @@
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="isShowInfo ? 8 : 24" style="height: 725px; overflow-x: auto"> <el-col :span="isShowInfo ? 8 : 24" style="height: 725px; overflow-x: auto">
<el-col :span="isShowInfo ? 24 : 8" v-for="nodeInfo in nodeList" > <el-col :span="isShowInfo ? 24 : 8" v-for="nodeInfo in nodeList" >
<el-card class="box-card" :key="nodeInfo.nodeId"> <el-card class="box-card" :key="nodeInfo.id">
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>节点名称{{nodeInfo.nodeId}}</span> <span>节点名称{{nodeInfo.nodeName}}</span>
<el-button style="float: right; padding: 3px 0" <el-button style="float: right; padding: 3px 0"
@click="showNodeInfo(nodeInfo)" @click="showNodeInfo(nodeInfo)"
type="text">查看详情</el-button> type="text">查看详情</el-button>
@ -29,15 +29,15 @@
</el-descriptions> </el-descriptions>
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="8"> <el-col :span="8">
<el-progress type="dashboard" :percentage="nodeInfo.cpu" :color="colors"></el-progress> <el-progress type="dashboard" :percentage="nodeInfo.cpuUsage" :color="colors"></el-progress>
<div style="margin-left: 45px; width: 35px;">CPU</div> <div style="margin-left: 45px; width: 35px;">CPU</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-progress type="dashboard" :percentage="nodeInfo.memory" :color="colors"></el-progress> <el-progress type="dashboard" :percentage="nodeInfo.memoryUseRate" :color="colors"></el-progress>
<div style="margin-left: 45px; width: 35px;">内存</div> <div style="margin-left: 45px; width: 35px;">内存</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-progress type="dashboard" :percentage="nodeInfo.load" :color="colors"></el-progress> <el-progress type="dashboard" :percentage="nodeInfo.nodeWeights" :color="colors"></el-progress>
<div style="margin-left: 45px; width: 35px;">负载</div> <div style="margin-left: 45px; width: 35px;">负载</div>
</el-col> </el-col>
</el-row> </el-row>
@ -76,6 +76,7 @@
<script> <script>
import PanelGroup from './dashboard/PanelGroup' import PanelGroup from './dashboard/PanelGroup'
import {selectNode} from "@/api/connect/connect";
export default { export default {
name: "nodeList", name: "nodeList",
components: { components: {
@ -106,31 +107,36 @@ export default {
this.nodeInfo = nodeInfo this.nodeInfo = nodeInfo
this.isShowInfo = true this.isShowInfo = true
}, },
initNodeList: function () { // initNodeList: function () {
for (let i = 0; i < 10; i++) { // for (let i = 0; i < 10; i++) {
let number = parseInt(Math.random() * 100); // let number = parseInt(Math.random() * 100);
let cpuNumber = parseInt(Math.random() * 10); // let cpuNumber = parseInt(Math.random() * 10);
let memoryNumber = parseInt(Math.random() * 10); // let memoryNumber = parseInt(Math.random() * 10);
let loadNumber = parseInt(Math.random() * 10); // let loadNumber = parseInt(Math.random() * 10);
let nodeInfo = { // let nodeInfo = {
nodeId: "node-gateway-" + (i), // nodeId: "node-gateway-" + (i),
cpu: (number - cpuNumber) < 0 ? number : number - cpuNumber, // cpu: (number - cpuNumber) < 0 ? number : number - cpuNumber,
memory: (number - memoryNumber) < 0 ? number : number - memoryNumber, // memory: (number - memoryNumber) < 0 ? number : number - memoryNumber,
load: (number - loadNumber) < 0 ? number : number - loadNumber // load: (number - loadNumber) < 0 ? number : number - loadNumber
}; // };
let vehicleInfoList = []; // let vehicleInfoList = [];
// // //
for (let j = 0; j < nodeInfo.load; j++) { // for (let j = 0; j < nodeInfo.load; j++) {
vehicleInfoList.push({ // vehicleInfoList.push({
vin: "VIN"+parseInt(Math.random() * 10000000000000), // vin: "VIN"+parseInt(Math.random() * 10000000000000),
topic: nodeInfo.nodeId, // topic: nodeInfo.nodeId,
zoning: parseInt(Math.random() * 100 % 16), // zoning: parseInt(Math.random() * 100 % 16),
// })
// }
// nodeInfo.vehicleInfoList = vehicleInfoList;
// this.nodeList.push(nodeInfo)
// }
initNodeList(){
selectNode().then(res =>{
console.log("res",res)
this.nodeList = res.data
}) })
} }
nodeInfo.vehicleInfoList = vehicleInfoList;
this.nodeList.push(nodeInfo)
}
}
} }
} }
</script> </script>

View File

@ -57,18 +57,18 @@
<el-row :gutter="32"> <el-row :gutter="32">
<el-col :lg="8" :sm="24" :xs="24"> <el-col :lg="8" :sm="24" :xs="24">
<div class="chart-wrapper"> <div class="chart-wrapper">
<el-tabs v-model="car" type="card"> <el-tabs v-model="activeTopName" type="card">
<el-tab-pane label="TOP10" name="TOP10"> <el-tab-pane label="TOP10" name="TOP10">
<el-card class="box-card"> <el-card class="box-card">
<div v-for="o in 10" :key="o" class="text item"> <div v-for="o in car" :key="o.id" class="text item">
{{ + (o - 1) }} <span style="float:right;">{{ 55- o }}分钟</span> {{ o.vin }} <span style="float:right;">{{ getMinutesSinceMidnight(o.timestamp) }}分钟</span>
</div> </div>
</el-card> </el-card>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="最新上线车辆" name="最新上线车辆"> <el-tab-pane label="最新上线车辆" name="最新上线车辆">
<el-card class="box-card"> <el-card class="box-card">
<div v-for="o in 10" :key="o" class="text item"> <div v-for="o in car" :key="o.id" class="text item">
{{ + (o - 1) }} <span style="float:right;">{{ car.timestamp + (o - 1) }}</span> {{ o.vin }} <span style="float:right;">{{ getDateTime(o.timestamp) }}</span>
</div> </div>
</el-card> </el-card>
</el-tab-pane> </el-tab-pane>
@ -83,14 +83,15 @@
<el-switch <el-switch
style="float: right; display: block" style="float: right; display: block"
v-model="value1" v-model="value1"
@change="selectNode(value1)"
active-color="#13ce66" active-color="#13ce66"
inactive-color="#5ab1ef" inactive-color="#5ab1ef"
active-text="正序" active-text="正序"
inactive-text="倒序"> inactive-text="倒序">
</el-switch> </el-switch>
</div> </div>
<div v-for="o in 10" :key="o" class="text item"> <div v-for="o in node" :key="o.id" class="text item">
{{'node-gateway-' + (o - 1) }} <span style="float:right;">{{(10-o)}}%</span> {{o.nodeName }} <span style="float:right;">{{o.nodeWeights}}%</span>
</div> </div>
</el-card> </el-card>
</div> </div>
@ -126,7 +127,7 @@ import LineChart from './dashboard/LineChart'
import RaddarChart from './dashboard/RaddarChart' import RaddarChart from './dashboard/RaddarChart'
import PieChart from './dashboard/PieChart' import PieChart from './dashboard/PieChart'
import BarChart from './dashboard/BarChart' import BarChart from './dashboard/BarChart'
import {selectCarList} from "@/api/connect/connect"; import {selectCarList, selectNode} from "@/api/connect/connect";
const yType = { const yType = {
@ -175,22 +176,20 @@ export default {
user: '近7天', user: '近7天',
region: '关闭' region: '关闭'
}, },
activeName: 1, activeName: 0,
activeTopName: "最长在线TOP10", activeTopName: "最长在线TOP10",
value1: true, value1: true,
value2: true, value2: true,
car:[] car:[],
node:[]
} }
}, },
created() { created() {
this.selectCarList() this.selectCarList()
}, },
mounted() {
//
this.currentTimestamp = Date.now();
},
methods: { methods: {
handleSetLineChartData(type) { handleSetLineChartData(type) {
console.log("type",type)
if (type){ if (type){
lineChartData[type].yType = yType[this.formInline.user] lineChartData[type].yType = yType[this.formInline.user]
this.lineChartData = lineChartData[type] this.lineChartData = lineChartData[type]
@ -203,6 +202,35 @@ export default {
console.log('res',res) console.log('res',res)
this.car = res.data this.car = res.data
}) })
},
//
getMinutesSinceMidnight(timestampString){
// - timestampString
var nowInMilliseconds = Date.now();
var date = new Date(timestampString);
//
var differenceInMilliseconds = nowInMilliseconds - date;
return Math.floor(differenceInMilliseconds / (1000 * 60));
},
//
getDateTime(timestamp){
const date = new Date(timestamp);
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
return `${year}-${month}-${day}`;
},
selectNode(value1) {
selectNode().then(res => {
console.log('node', res)
if (value1){
this.node = res.data
}else {
this.node = res.data.reverse()
}
})
} }
} }
} }