This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
cyber-narrator-cn-ui/src/views/entityExplorer/entityList/Row.vue

232 lines
9.9 KiB
Vue
Raw Normal View History

<template>
<div class="cn-entity--list" :style="{ zIndex: !isCollapse ? 1 : 'unset' }">
2021-12-16 18:22:47 +08:00
<!-- 左侧下拉按钮 -->
<div class="cn-entity__collapse">
2023-04-27 16:53:12 +08:00
<span @click="switchCollapse" :class="{ 'reg-down': !isCollapse }">
<i class="cn-icon cn-icon-arrow-right"></i>
</span>
2021-12-16 18:22:47 +08:00
</div>
<div class="cn-entity__case">
<div class="cn-entity__icon"><i :class="iconClass"></i></div>
<div class="cn-entity__row">
2023-06-16 10:14:44 +08:00
<div class="cn-entity__header">
{{ entityData.ipAddr || entityData.domainName || entityData.appName || 'Unknown' }}
<!-- <div class="cn-entity__header" style="display: flex">-->
<!-- <span class="cn-entity__header-title">{{ entityData.ipAddr || entityData.domainName || entityData.appName || 'Unknown' }}</span>-->
<!-- <span class="entity-detail" style="display: flex">-->
<!-- <span style="width: 62px;" class="entity-tag entity-tag&#45;&#45;small entity-tag&#45;&#45;level-two-positive margin-r-6">信息技术</span>-->
<!-- <span style="width: 50px;" class="entity-tag entity-tag&#45;&#45;small entity-tag&#45;&#45;level-two-normal margin-r-6">互联网</span>-->
<!-- </span>-->
</div>
2021-12-16 18:22:47 +08:00
<div class="cn-entity__body">
<div class="body__basic-info">
<div class="basic-info">
<template v-if="entityData.entityType === 'ip'">
<div class="basic-info__item">
<i class="cn-icon cn-icon-country"></i>
<span>{{ $t('overall.country') }}&nbsp;:&nbsp;&nbsp;</span>
<span>{{ entityData.ipLocationCountry || '-' }}</span>
2021-12-16 18:22:47 +08:00
</div>
<div class="basic-info__item">
<i class="cn-icon cn-icon-position"></i>
<span>{{ $t('overall.region') }}&nbsp;:&nbsp;&nbsp;</span>
<span>{{ ipLocationRegion(entityData) }}</span>
2021-12-16 18:22:47 +08:00
</div>
<div class="basic-info__item">
<i class="cn-icon cn-icon-cloud"></i>
<span>{{ $t('entities.asn') }}&nbsp;:&nbsp;&nbsp;</span>
<span>{{ entityData.ipAsn || '-' }}</span>
2021-12-16 18:22:47 +08:00
</div>
</template>
<template v-else-if="entityData.entityType === 'domain'">
<div class="basic-info__item">
<i class="cn-icon cn-icon-category"></i>
2023-04-27 16:53:12 +08:00
<span>{{ $t('entities.domainDetail.categoryGroup') }}&nbsp;:&nbsp;&nbsp;</span>
<span>{{ entityData.domainCategoryGroup || '-' }}</span>
2021-12-16 18:22:47 +08:00
</div>
<div class="basic-info__item">
<i class="cn-icon cn-icon-sub-category"></i>
<span>{{ $t('entities.category') }}&nbsp;:&nbsp;&nbsp;</span>
<span>{{ entityData.domainCategory || '-' }}</span>
2021-12-16 18:22:47 +08:00
</div>
<div class="basic-info__item">
<i class="cn-icon cn-icon-credit"></i>
2023-04-27 16:53:12 +08:00
<span>{{ $t('entities.reputationLevel') }}&nbsp;:&nbsp;&nbsp;</span>
<span>{{ entityData.domainReputationScore || '-' }}</span>
2021-12-16 18:22:47 +08:00
</div>
</template>
<template v-else-if="entityData.entityType === 'app'">
<div class="basic-info__item">
<i class="cn-icon cn-icon-id"></i>
<span>{{ $t('entities.category') }}&nbsp;:&nbsp;&nbsp;</span>
<span>{{ entityData.appCategory || '-' }}</span>
2021-12-16 18:22:47 +08:00
</div>
<div class="basic-info__item">
<i class="cn-icon cn-icon-category"></i>
2023-04-27 16:53:12 +08:00
<span>{{ $t('entities.subcategory') }}&nbsp;:&nbsp;&nbsp;</span>
<span>{{ entityData.appSubcategory || '-' }}</span>
2021-12-16 18:22:47 +08:00
</div>
<div class="basic-info__item">
<i class="cn-icon cn-icon-sub-category"></i>
<span>{{ $t('entities.risk') }}&nbsp;:&nbsp;&nbsp;</span>
<span>{{ appRisk(entityData.appRisk) || '-' }}</span>
2021-12-16 18:22:47 +08:00
</div>
</template>
<!-- 通用字段 -->
<div class="basic-info__item">
<div class="item__box">
<i class="cn-icon cn-icon-rise"></i>
2023-04-27 16:53:12 +08:00
<span>{{ $t('entities.sentThroughput') }}&nbsp;:&nbsp;&nbsp;</span>
<span>
{{
entityData.bytesSentRate ? unitConvert(entityData.bytesSentRate, unitTypes.byte).join(' ') + 'ps' : '-'
}}
</span>
<!-- 曲线-->
<div class="item-box-loading">
2022-05-26 17:14:00 +08:00
<loading :loading="loading" size="small"></loading>
<div
class="row__charts"
:id="`entityDetailSend${entityType}${listMode}`"
2023-04-27 16:53:12 +08:00
v-if="entityData.entityType === 'domain'">
</div>
<div
class="row__charts"
:id="`entityDetailSend${entityType}${listMode}`"
2023-04-27 16:53:12 +08:00
v-if="entityData.entityType === 'app'">
</div>
<div
class="row__charts"
:id="`entityDetailSend${entityType}${listMode}`"
2023-04-27 16:53:12 +08:00
v-if="entityData.entityType === 'ip'">
</div>
</div>
</div>
2021-12-16 18:22:47 +08:00
</div>
2021-12-16 18:22:47 +08:00
<div class="basic-info__item">
<div class="item__box">
<i class="cn-icon cn-icon-fall"></i>
2023-04-27 16:53:12 +08:00
<span>{{ $t('entities.receivedThroughput') }}&nbsp;:&nbsp;&nbsp;</span>
<span>
{{
entityData.bytesReceivedRate ? unitConvert(entityData.bytesReceivedRate, unitTypes.byte).join(' ') + 'ps' : '-'
}}
</span>
<div class="item-box-loading">
2022-05-26 17:14:00 +08:00
<loading :loading="loading" size="small"></loading>
<div
2023-04-27 16:53:12 +08:00
class="row__charts"
:id="`entityDetailReceived${entityType}${listMode}`"
v-if="entityData.entityType === 'domain'">
</div>
<div
2023-04-27 16:53:12 +08:00
class="row__charts"
:id="`entityDetailReceived${entityType}${listMode}`"
v-if="entityData.entityType === 'app'">
</div>
<div
2023-04-27 16:53:12 +08:00
class="row__charts"
:id="`entityDetailReceived${entityType}${listMode}`"
v-if="entityData.entityType === 'ip'">
</div>
</div>
</div>
2021-12-16 18:22:47 +08:00
</div>
2023-06-16 10:14:44 +08:00
<!--新版实体列表改版去除这一段-->
<div class="basic-info__item">
<i class="cn-icon cn-icon-entity-alert"></i>
<span>{{ $t('entities.recentAlert') }}&nbsp;:&nbsp;&nbsp;</span>
<span>{{ entityData.performanceCount }}</span>
</div>
<div class="basic-info__item">
<i class="cn-icon cn-icon-safe"></i>
<span>{{ $t('entities.recentSecurity') }}&nbsp;:&nbsp;&nbsp;</span>
<span>{{ entityData.securityCount }}</span>
</div>
<!--新版实体列表改版去除这一段-->
2021-12-16 18:22:47 +08:00
</div>
2023-06-16 10:14:44 +08:00
<div class="show-detail" @click="showDetail">
{{ $t('overall.detail') }}>
</div>
2023-06-16 10:14:44 +08:00
<!-- 新版实体列表改版后续记得解开-->
<!-- <div class="show-detail">-->
<!-- <div @click="showDetail"><i class="cn-icon cn-icon-detail"></i>{{ $t('overall.detail') }} ></div>-->
<!-- <div><i class="cn-icon cn-icon-graph"></i>{{ $t('entities.graph') }} ></div>-->
<!-- </div>-->
2021-12-16 18:22:47 +08:00
</div>
</div>
</div>
<el-collapse-transition>
2022-01-11 11:20:17 +08:00
<div class="cn-entity__detail-overview" v-if="!isCollapse">
<el-divider></el-divider>
2023-04-27 16:53:12 +08:00
<detail-overview :entity="entityData" :time-filter="timeFilter"/>
</div>
</el-collapse-transition>
2021-12-16 18:22:47 +08:00
</div>
</div>
</template>
<script>
import DetailOverview from '@/views/entityExplorer/entityList/detailOverview/DetailOverview'
2022-03-27 13:04:47 +08:00
import entityListMixin from './entityListMixin'
import relatedServer from '@/mixins/relatedServer'
import Loading from '@/components/common/Loading'
export default {
2021-12-16 18:22:47 +08:00
name: 'Row',
2021-12-17 20:56:25 +08:00
props: {
2021-12-31 10:40:37 +08:00
index: Number,
2022-03-27 13:04:47 +08:00
timeFilter: Object,
listMode: String
2021-12-17 20:56:25 +08:00
},
components: {
Loading,
DetailOverview
},
2022-03-27 13:04:47 +08:00
mixins: [entityListMixin, relatedServer],
data () {
2021-12-16 23:03:39 +08:00
return {
loading: false,
2022-03-27 13:04:47 +08:00
isCollapse: true // 是否是折叠状态
2021-12-16 23:03:39 +08:00
}
},
computed: {
ipLocationRegion () {
return function (entityData) {
const hasProvinceAndCity =
2023-04-27 16:53:12 +08:00
entityData.ipLocationProvince &&
entityData.ipLocationCity &&
entityData.ipLocationProvince !== 'null' &&
entityData.ipLocationCity !== 'null'
const hasProvince =
2023-04-27 16:53:12 +08:00
entityData.ipLocationProvince &&
entityData.ipLocationProvince !== 'null'
const hasCity =
2023-04-27 16:53:12 +08:00
entityData.ipLocationCity && entityData.ipLocationCity !== 'null'
if (hasProvinceAndCity) {
return `${entityData.ipLocationProvince}, ${entityData.ipLocationCity}`
} else if (hasProvince) {
return entityData.ipLocationProvince
} else if (hasCity) {
return entityData.ipLocationCity
} else {
return '-'
}
}
}
},
2021-12-16 23:03:39 +08:00
methods: {
/* 切换折叠状态 */
switchCollapse () {
2021-12-16 23:03:39 +08:00
this.isCollapse = !this.isCollapse
this.$emit('switchCollapse', this.isCollapse, this.index)
2021-12-17 20:56:25 +08:00
},
/* 设为折叠状态 */
collapse () {
this.isCollapse = true
}
}
}
</script>