frontend/src/components/DeploymentDetails.vue
<template>
<div class="deployment-details" v-if="selectedResource">
<div class="details-header">
<span class="details-icon">🚀</span>
<span class="details-name">{{ selectedResource.metadata.name }}</span>
</div>
<div class="details-content">
<div class="details-row">
<span class="label">Name:</span>
<span class="value">{{ selectedResource.metadata.name }}</span>
</div>
<div class="details-row">
<span class="label">Namespace:</span>
<span class="value">{{ selectedResource.metadata.namespace }}</span>
</div>
<div class="details-row">
<span class="label">Replicas:</span>
<span class="value">{{ selectedResource.spec.replicas }}</span>
</div>
<div class="details-row">
<span class="label">Strategy:</span>
<span class="value">{{ selectedResource.spec.strategy?.type }}</span>
</div>
<div class="details-row">
<span class="label">Created:</span>
<span class="value">{{ formatDateTime(selectedResource.metadata.creationTimestamp) }}</span>
</div>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent, PropType } from 'vue';
import { KubernetesDeployment } from '../types/kubernetes';
export default defineComponent({
name: 'DeploymentDetails',
props: {
selectedResource: {
type: Object as PropType<KubernetesDeployment | null>,
required: false,
default: null
}
},
methods: {
formatDateTime(timestamp: string): string {
return new Date(timestamp).toLocaleString();
}
}
});
</script>
<style scoped>
.deployment-details {
padding: 16px;
height: 100%;
overflow-y: auto;
background-color: #1e1e1e;
}
.details-header {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 16px;
}
.details-icon {
font-size: 20px;
}
.details-name {
font-size: 16px;
font-weight: 500;
color: #ffffff;
}
.details-content {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 8px;
}
.details-row {
display: flex;
gap: 8px;
}
.details-row .label {
color: #858585;
min-width: 100px;
}
.details-row .value {
color: #cccccc;
}
</style>