NEZ-3424 feat: Asset information chart 组件更新
This commit is contained in:
@@ -1041,3 +1041,63 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.chart-detail-new{
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 10px;
|
||||||
|
width: calc(100% - 20px);
|
||||||
|
height: calc(100% - 20px);
|
||||||
|
overflow: auto;
|
||||||
|
.asset-info{
|
||||||
|
border: 1px solid $--border-color-light;
|
||||||
|
border-bottom: none;
|
||||||
|
.el-collapse{
|
||||||
|
border: none;
|
||||||
|
.el-collapse-item__header{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row-reverse;
|
||||||
|
justify-content: flex-end;
|
||||||
|
background: transparent;
|
||||||
|
border-bottom: 1px solid $--border-color-light;
|
||||||
|
font-size: 14px;
|
||||||
|
.el-collapse-item__arrow{
|
||||||
|
margin: 0 20px 0 20px;
|
||||||
|
}
|
||||||
|
.asset-info-collapse{
|
||||||
|
i{
|
||||||
|
margin-right: 2px;
|
||||||
|
}
|
||||||
|
span{
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-collapse-item__wrap{
|
||||||
|
background: transparent;
|
||||||
|
border-color: $--border-color-light;
|
||||||
|
.el-collapse-item__content{
|
||||||
|
padding: 15px 53px;
|
||||||
|
.asset-info-list{
|
||||||
|
.asset-info-row{
|
||||||
|
margin-bottom: 15px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
.asset-info-title{
|
||||||
|
font-size: 14px;
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
.asset-info-value{
|
||||||
|
font-size: 14px;
|
||||||
|
background: $--background-color-2;
|
||||||
|
padding: 0 5px;
|
||||||
|
height: 32px;
|
||||||
|
line-height: 32px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -135,9 +135,6 @@
|
|||||||
border-bottom: 1px solid $--border-color-light;
|
border-bottom: 1px solid $--border-color-light;
|
||||||
border-top: 1px solid $--border-color-light;
|
border-top: 1px solid $--border-color-light;
|
||||||
}
|
}
|
||||||
.el-collapse-item__header:nth-of-type(1) {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
.el-collapse-item__header {
|
.el-collapse-item__header {
|
||||||
border-bottom: 1px solid $--border-color-light;
|
border-bottom: 1px solid $--border-color-light;
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -5,6 +5,41 @@
|
|||||||
"css_prefix_text": "nz-icon-",
|
"css_prefix_text": "nz-icon-",
|
||||||
"description": "",
|
"description": "",
|
||||||
"glyphs": [
|
"glyphs": [
|
||||||
|
{
|
||||||
|
"icon_id": "2112052",
|
||||||
|
"name": "磁盘",
|
||||||
|
"font_class": "disk",
|
||||||
|
"unicode": "e602",
|
||||||
|
"unicode_decimal": 58882
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "4843814",
|
||||||
|
"name": "基本信息",
|
||||||
|
"font_class": "basic-info",
|
||||||
|
"unicode": "e647",
|
||||||
|
"unicode_decimal": 58951
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "6582325",
|
||||||
|
"name": "网络2",
|
||||||
|
"font_class": "network",
|
||||||
|
"unicode": "e62d",
|
||||||
|
"unicode_decimal": 58925
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "20009305",
|
||||||
|
"name": "cpu处理器",
|
||||||
|
"font_class": "cpu",
|
||||||
|
"unicode": "e6de",
|
||||||
|
"unicode_decimal": 59102
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"icon_id": "37552061",
|
||||||
|
"name": "内存",
|
||||||
|
"font_class": "memory",
|
||||||
|
"unicode": "e7b1",
|
||||||
|
"unicode_decimal": 59313
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"icon_id": "38284763",
|
"icon_id": "38284763",
|
||||||
"name": "Notification",
|
"name": "Notification",
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -1,13 +1,17 @@
|
|||||||
<template>
|
<template>
|
||||||
<chart-detail :chart-info="chartInfo" :chart-detail="chartData" :from="from"></chart-detail>
|
<chart-detail-new v-if="chartData.feature&&!isEmpty(chartData.feature)" :chart-info="chartInfo" :chart-detail="chartData" :from="from"></chart-detail-new>
|
||||||
|
<chart-detail v-else :chart-info="chartInfo" :chart-detail="chartData" :from="from"></chart-detail>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import chartDetail from '@/components/chart/chartDetail'
|
import chartDetail from '@/components/chart/chartDetail'
|
||||||
|
import chartDetailNew from '@/components/chart/chartDetailNew'
|
||||||
|
import lodash from 'lodash'
|
||||||
export default {
|
export default {
|
||||||
name: 'chartAssetInfo',
|
name: 'chartAssetInfo',
|
||||||
components: {
|
components: {
|
||||||
chartDetail
|
chartDetail,
|
||||||
|
chartDetailNew
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
from: String,
|
from: String,
|
||||||
@@ -20,9 +24,11 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
resize () {
|
isEmpty (obj) {
|
||||||
|
return lodash.isEmpty(obj)
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
191
nezha-fronted/src/components/chart/chartDetailNew.vue
Normal file
191
nezha-fronted/src/components/chart/chartDetailNew.vue
Normal file
@@ -0,0 +1,191 @@
|
|||||||
|
<template>
|
||||||
|
<div class="chart-detail-new">
|
||||||
|
<div class="asset-info">
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item>
|
||||||
|
<template slot="title">
|
||||||
|
<div class="asset-info-collapse">
|
||||||
|
<i class="nz-icon nz-icon-basic-info"></i>
|
||||||
|
<span>{{$t('asset.information')}}</span>
|
||||||
|
<span>{{chartDetail.feature.os.hostname}}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div class="asset-info-list">
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('license.hostname')}}</div>
|
||||||
|
<div class="asset-info-value">{{chartDetail.feature.os.hostname}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.boottime')}}</div>
|
||||||
|
<div class="asset-info-value">{{utcTimeToTimezoneStr(chartDetail.feature.os.boottime)}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.platform')}}</div>
|
||||||
|
<div class="asset-info-value">{{chartDetail.feature.os.platform}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.platformFamily')}}</div>
|
||||||
|
<div class="asset-info-value">{{chartDetail.feature.os.family}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.platformVersion')}}</div>
|
||||||
|
<div class="asset-info-value">{{chartDetail.feature.os.versionInfo}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
|
||||||
|
<el-collapse-item>
|
||||||
|
<template slot="title">
|
||||||
|
<div class="asset-info-collapse">
|
||||||
|
<i class="nz-icon nz-icon-cpu"></i>
|
||||||
|
<span>{{$t('asset.cpu')}}</span>
|
||||||
|
<span v-for="(item,index) in chartDetail.feature.cpu" :key="index">
|
||||||
|
{{item.name}}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div class="asset-info-list" v-for="(item,index) in chartDetail.feature.cpu" :key="index">
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.vendorID')}}</div>
|
||||||
|
<div class="asset-info-value">{{item.vendor}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.moduleName')}}</div>
|
||||||
|
<div class="asset-info-value">{{item.name}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.packageCount')}}</div>
|
||||||
|
<div class="asset-info-value">{{item.physicalPackageCount}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.processorCount')}}</div>
|
||||||
|
<div class="asset-info-value">{{item.physicalProcessorCount}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('backup.frequency')}}</div>
|
||||||
|
<div class="asset-info-value">{{Hertz(item.logicalProcessorCount,0,0)}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
|
||||||
|
<el-collapse-item>
|
||||||
|
<template slot="title">
|
||||||
|
<div class="asset-info-collapse">
|
||||||
|
<i class="nz-icon nz-icon-memory"></i>
|
||||||
|
<span>{{$t('asset.memory')}}</span>
|
||||||
|
<span>{{bits(chartDetail.feature.memory.total,0,0)}}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div class="asset-info-list">
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.memorySize')}}</div>
|
||||||
|
<div class="asset-info-value">{{bits(chartDetail.feature.memory.total,0,0)}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.swaptotal')}}</div>
|
||||||
|
<div class="asset-info-value">{{bits(chartDetail.feature.memory.swaptotal,0,0)}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.pagesize')}}</div>
|
||||||
|
<div class="asset-info-value">{{bits(chartDetail.feature.memory.pagesize,0,0)}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
|
||||||
|
<el-collapse-item>
|
||||||
|
<template slot="title">
|
||||||
|
<div class="asset-info-collapse">
|
||||||
|
<i class="nz-icon nz-icon-disk"></i>
|
||||||
|
<span>{{$t('asset.disk')}}</span>
|
||||||
|
<span>{{bits(calcTotal(chartDetail.feature.disk, 'size'),0,0)}}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div class="asset-info-list" v-for="(item,index) in chartDetail.feature.disk" :key="index">
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.diskName')}}</div>
|
||||||
|
<div class="asset-info-value">{{item.name}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.diskModel')}}</div>
|
||||||
|
<div class="asset-info-value">{{item.model}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.diskSize')}}</div>
|
||||||
|
<div class="asset-info-value">{{bits(item.size,0,0)}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
|
||||||
|
<el-collapse-item>
|
||||||
|
<template slot="title">
|
||||||
|
<div class="asset-info-collapse">
|
||||||
|
<i class="nz-icon nz-icon-network"></i>
|
||||||
|
<span>{{$t('asset.interface')}}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div class="asset-info-list" v-for="(item,index) in chartDetail.feature.interface" :key="index">
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.interfaceName')}}</div>
|
||||||
|
<div class="asset-info-value">{{item.name}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">iPv4addr</div>
|
||||||
|
<div class="asset-info-value">{{item.iPv4addr}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">iPv6addr</div>
|
||||||
|
<div class="asset-info-value">{{item.iPv6addr}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">macaddr</div>
|
||||||
|
<div class="asset-info-value">{{item.macaddr}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.subnetMasks')}}</div>
|
||||||
|
<div class="asset-info-value">{{item.subnetMasks}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">mtu</div>
|
||||||
|
<div class="asset-info-value">{{item.mtu}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="asset-info-row">
|
||||||
|
<div class="asset-info-title">{{$t('asset.ifOperStatus')}}</div>
|
||||||
|
<div class="asset-info-value">
|
||||||
|
<span v-if="item.ifOperStatus==1">up</span>
|
||||||
|
<span v-else-if="item.ifOperStatus==2">down</span>
|
||||||
|
<span v-else-if="item.ifOperStatus==3">testing</span>
|
||||||
|
<span v-else-if="item.ifOperStatus==4">unknown</span>
|
||||||
|
<span v-else-if="item.ifOperStatus==5">dormant</span>
|
||||||
|
<span v-else-if="item.ifOperStatus==6">notPresent</span>
|
||||||
|
<span v-else-if="item.ifOperStatus==7">lowerLayerDown</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import chartDataFormat from '@/components/chart/chartDataFormat'
|
||||||
|
export default {
|
||||||
|
name: 'chartDetailNew',
|
||||||
|
props: {
|
||||||
|
from: String,
|
||||||
|
chartDetail: Object,
|
||||||
|
chartInfo: Object
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
bits: chartDataFormat.getUnit(6).compute,
|
||||||
|
Hertz: chartDataFormat.getUnit(26).compute,
|
||||||
|
calcTotal (arr, key) {
|
||||||
|
return arr.reduce((acc, curr) => acc + Number(curr[key]), 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -478,7 +478,7 @@ export default {
|
|||||||
linkId = this.chartDetailInfo && this.chartDetailInfo.id
|
linkId = this.chartDetailInfo && this.chartDetailInfo.id
|
||||||
}
|
}
|
||||||
if (this.chartInfo.type === 'assetInfo') {
|
if (this.chartInfo.type === 'assetInfo') {
|
||||||
this.$get('asset/asset/' + linkId).then(res => {
|
this.$get('asset/asset/' + linkId + '?feature=1').then(res => {
|
||||||
this.chartData = res.data
|
this.chartData = res.data
|
||||||
this.loading = false
|
this.loading = false
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user