hi-ucs/front/src/views/capabilityCloud/components/Infrastructure.vue

221 lines
5.3 KiB
Vue

<!--
* @Author: hisense.liangjunhua
* @Date: 2022-06-19 10:15:33
* @LastEditors: hisense.liangjunhua
* @LastEditTime: 2022-07-30 17:33:54
* @Description: 告诉大家这是什么
-->
<template>
<div class="infrastructure">
<div class="infrastructure-top">
<span class="title">基础设施</span>
</div>
<div class="infrastructure-content">
<div class="infrastructure-content-son" v-for="(item, index) in myDataList" :key="index">
<div class="num-class"
:style="`background:url(${item.img}) no-repeat;background-position:top left;background-size:40%`">
<div>{{ item.title }}</div>
<div>{{ item.snum }}</div>
</div>
<div class="health-degree">
<div class="health-degree-title">健康度</div>
<a-progress :stroke-color="{
'0%': '#108ee9',
'100%': '#87d068',
}" :percent="item.percentage" :show-info="false" />
</div>
<div class="percentage" :style="fontFormat(item.title)">
{{ item.percentage }}%
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { infrastructureInfo } from '@/api/capabilityCloud'
const itShowXiHaiAn = whoShow.itShowXiHaiAn
let myDataList = ref([
{
title: '视频资源数量',
snum: '0',
percentage: '100',
img: require('../../../assets/capabilityCloud/infrastructure_sz.png'),
},
{
title: itShowXiHaiAn ? '单兵设备' : '云资源',
snum: itShowXiHaiAn ? '2' : 0,
percentage: itShowXiHaiAn ? '100' : '0',
img: require('../../../assets/capabilityCloud/infrastructure_yz.png'),
},
{
title: itShowXiHaiAn ? '无人机' : '感知资源',
snum: itShowXiHaiAn ? '2' : 0,
percentage: itShowXiHaiAn ? '100' : '0',
img: require('../../../assets/capabilityCloud/infrastructure_gz.png'),
},
])
function fontFormat(name) {
switch (name) {
case '视频资源数量':
return 'color: #32ff91;'
break
case itShowXiHaiAn ? '单兵设备' : '云资源':
return 'color: #f4fd25;'
break
case itShowXiHaiAn ? '无人机' : '感知资源':
return 'color: #ff1d18;'
break
}
}
const params = {
name: '',
pageNo: 1,
pageSize: 10,
}
infrastructureInfo().then((res) => {
console.log('基础设施======云图============>', res.data.data)
myDataList.value.forEach((val) => {
const obj = res.data.data.filter((item) => item.type === val.title)[0]
if (obj) {
val.snum = obj.amount
}
})
}).catch(err => {
console.log('err------------>', err);
})
</script>
<style lang="less" scoped>
.infrastructure {
width: 4.4rem;
height: 4.63rem;
position: relative;
background: rgba(0, 108, 188, 0.1);
border: 0.01rem rgba(0, 108, 188, 0.7) solid;
border-radius: 0.03rem;
padding: 0.2rem;
padding-top: 0;
text-decoration: none;
outline: none;
-webkit-transition: all 100ms ease-out;
-moz-transition: all 100ms ease-out;
transition: all 100ms ease-out;
.infrastructure-top {
width: 4.4rem;
height: 0.44rem;
position: absolute;
top: 0;
background: url('~@/assets/capabilityCloud/infrastructure_title.png') no-repeat;
background-size: cover;
background-position: center;
line-height: 0.44rem;
text-align: center;
.title {
font-size: 0.24rem;
}
}
.infrastructure-content {
width: 4rem;
margin-top: 0.62rem;
.infrastructure-content-son {
display: flex;
width: 4rem;
height: 1.17rem;
background: linear-gradient(to right, #214677, rgba(2, 20, 103, 0));
align-items: center;
margin-bottom: 0.14rem;
padding-left: 0.1rem;
}
.num-class {
width: 1.5rem;
height: 1rem;
text-align: center;
margin-right: 0.2rem;
&>div:first-child {
font-size: 0.18rem;
color: #ffffff;
margin-bottom: 0.1rem;
line-height: 0.18rem;
margin-top: 0.3rem;
}
&>div:last-child {
font-size: 0.36rem;
line-height: 0.36rem;
color: #1ce2e5;
}
}
.health-degree {
width: 1.35rem;
.health-degree-title {
font-size: 0.14rem;
color: rgba(255, 255, 255, 0.6);
margin-bottom: 0.08rem;
}
:deep(.ant-progress-outer) {
height: 0.27rem;
}
:deep(.ant-progress-inner) {
height: 0.27rem;
border-radius: 0.14rem;
border: 0.01rem solid rgba(8, 153, 231, 0.6);
background: rgba(21, 65, 123, 0.6);
div {
height: 0.27rem !important;
}
}
}
// .health-degree:
.percentage {
height: 0.57rem;
font-size: 0.24rem;
line-height: 0.24rem;
font-family: 'DIN-Bold';
margin-left: 0.1rem;
display: flex;
align-items: flex-end;
}
}
}
.infrastructure:hover {
border: 2px solid;
animation: turn 5s linear infinite;
}
@keyframes turn {
0% {
border-image: linear-gradient(to right, #003194, #00ffea) 1;
}
25% {
border-image: linear-gradient(to bottom, #003194, #00ffea) 1;
}
50% {
border-image: linear-gradient(to left, #003194, #00ffea) 1;
}
75% {
border-image: linear-gradient(to top, #003194, #00ffea) 1;
}
100% {
border-image: linear-gradient(to right, #003194, #00ffea) 1;
}
}
</style>