|
|
|
|
@ -679,10 +679,15 @@ watch(showKubeflowDetails, async () => {
|
|
|
|
|
<v-row>
|
|
|
|
|
<!-- Recent Run -->
|
|
|
|
|
<v-col cols="12" md="6">
|
|
|
|
|
<v-card class="pa-0" style="min-height: 450px; max-height: 450px">
|
|
|
|
|
<v-card
|
|
|
|
|
class="pa-0"
|
|
|
|
|
:elevation="0"
|
|
|
|
|
color="grey-lighten-4"
|
|
|
|
|
style="min-height: 450px; max-height: 450px"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
class="d-flex align-center justify-space-between w-100"
|
|
|
|
|
style="padding: 16px; border-bottom: 1px solid #ccc"
|
|
|
|
|
style="padding: 16px"
|
|
|
|
|
>
|
|
|
|
|
<h3 class="text-subtitle-1 font-weight-bold mb-0">Recent Run</h3>
|
|
|
|
|
|
|
|
|
|
@ -696,7 +701,7 @@ watch(showKubeflowDetails, async () => {
|
|
|
|
|
Go to Executions
|
|
|
|
|
</v-btn>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<v-divider />
|
|
|
|
|
<div style="overflow-y: auto; max-height: 380px; padding: 8px 16px">
|
|
|
|
|
<v-skeleton-loader
|
|
|
|
|
v-if="runsLoading"
|
|
|
|
|
@ -705,7 +710,7 @@ watch(showKubeflowDetails, async () => {
|
|
|
|
|
v-for="i in 4"
|
|
|
|
|
:key="i"
|
|
|
|
|
/>
|
|
|
|
|
<v-list v-else density="comfortable">
|
|
|
|
|
<v-list v-else density="comfortable" class="bg-transparent">
|
|
|
|
|
<v-list-item
|
|
|
|
|
v-for="(runRow, idx) in recentRuns"
|
|
|
|
|
:key="idx"
|
|
|
|
|
@ -761,10 +766,15 @@ watch(showKubeflowDetails, async () => {
|
|
|
|
|
|
|
|
|
|
<!-- Workflows -->
|
|
|
|
|
<v-col cols="12" md="6">
|
|
|
|
|
<v-card class="pa-0" style="min-height: 450px; max-height: 450px">
|
|
|
|
|
<v-card
|
|
|
|
|
class="pa-0"
|
|
|
|
|
:elevation="0"
|
|
|
|
|
color="grey-lighten-4"
|
|
|
|
|
style="min-height: 450px; max-height: 450px"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
class="d-flex align-center justify-space-between w-100"
|
|
|
|
|
style="padding: 16px; border-bottom: 1px solid #ccc"
|
|
|
|
|
style="padding: 16px"
|
|
|
|
|
>
|
|
|
|
|
<h3 class="text-subtitle-1 font-weight-bold mb-0">
|
|
|
|
|
Recently Registered Workflow
|
|
|
|
|
@ -779,9 +789,9 @@ watch(showKubeflowDetails, async () => {
|
|
|
|
|
Go to Workflows
|
|
|
|
|
</v-btn>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<v-divider />
|
|
|
|
|
<div style="overflow-y: auto; max-height: 380px; padding: 8px 16px">
|
|
|
|
|
<v-list density="comfortable" nav>
|
|
|
|
|
<v-list density="comfortable" class="bg-transparent" nav>
|
|
|
|
|
<v-list-item
|
|
|
|
|
v-for="wfRow in workflows
|
|
|
|
|
.slice(0, 10)
|
|
|
|
|
@ -793,7 +803,7 @@ watch(showKubeflowDetails, async () => {
|
|
|
|
|
<span class="text-body-2 font-weight-medium">{{
|
|
|
|
|
wfRow.name
|
|
|
|
|
}}</span>
|
|
|
|
|
<span class="text-caption text-grey-lighten-1">{{
|
|
|
|
|
<span class="text-caption text-body-2">{{
|
|
|
|
|
fmtYmdHm(wfRow.modDt)
|
|
|
|
|
}}</span>
|
|
|
|
|
</div>
|
|
|
|
|
@ -818,8 +828,13 @@ watch(showKubeflowDetails, async () => {
|
|
|
|
|
<!-- Kubeflow -->
|
|
|
|
|
|
|
|
|
|
<v-col cols="12" md="6">
|
|
|
|
|
<v-card class="pa-0" style="min-height: 450px; max-height: 450px">
|
|
|
|
|
<div style="padding: 16px; border-bottom: 1px solid #3a3a3a">
|
|
|
|
|
<v-card
|
|
|
|
|
class="pa-0"
|
|
|
|
|
:elevation="0"
|
|
|
|
|
color="grey-lighten-4"
|
|
|
|
|
style="min-height: 450px; max-height: 450px"
|
|
|
|
|
>
|
|
|
|
|
<div style="padding: 16px">
|
|
|
|
|
<div class="d-flex align-center justify-space-between w-100">
|
|
|
|
|
<h3 class="text-subtitle-1 font-weight-bold mb-0">
|
|
|
|
|
Run Status Overview
|
|
|
|
|
@ -860,7 +875,7 @@ watch(showKubeflowDetails, async () => {
|
|
|
|
|
</v-btn>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<v-divider />
|
|
|
|
|
<div style="height: 380px">
|
|
|
|
|
<!-- Only Chart -->
|
|
|
|
|
<div
|
|
|
|
|
@ -963,28 +978,30 @@ watch(showKubeflowDetails, async () => {
|
|
|
|
|
|
|
|
|
|
<!-- Dataset (fixed height, inner scroll, compact) -->
|
|
|
|
|
<v-col cols="12" md="6">
|
|
|
|
|
<v-card class="pa-0 d-flex flex-column" :height="450">
|
|
|
|
|
<!-- Header (고정 높이) -->
|
|
|
|
|
<div
|
|
|
|
|
class="d-flex align-center justify-space-between w-100 pa-4 flex-shrink-0"
|
|
|
|
|
>
|
|
|
|
|
<h3 class="text-subtitle-1 font-weight-bold mb-0">
|
|
|
|
|
DataGroup Update Activity
|
|
|
|
|
</h3>
|
|
|
|
|
<v-btn
|
|
|
|
|
variant="text"
|
|
|
|
|
class="text-caption font-weight-bold"
|
|
|
|
|
append-icon="mdi-arrow-right"
|
|
|
|
|
style="text-transform: none"
|
|
|
|
|
@click="goDatasets"
|
|
|
|
|
>
|
|
|
|
|
Go to DataGroup
|
|
|
|
|
</v-btn>
|
|
|
|
|
<v-card
|
|
|
|
|
class="pa-0"
|
|
|
|
|
:elevation="0"
|
|
|
|
|
color="grey-lighten-4"
|
|
|
|
|
style="min-height: 450px; max-height: 450px"
|
|
|
|
|
>
|
|
|
|
|
<div style="padding: 16px">
|
|
|
|
|
<div class="d-flex align-center justify-space-between w-100">
|
|
|
|
|
<h3 class="text-subtitle-1 font-weight-bold mb-0">
|
|
|
|
|
DataGroup Update Activity
|
|
|
|
|
</h3>
|
|
|
|
|
<v-btn
|
|
|
|
|
variant="text"
|
|
|
|
|
class="text-caption font-weight-bold"
|
|
|
|
|
append-icon="mdi-arrow-right"
|
|
|
|
|
style="text-transform: none"
|
|
|
|
|
@click="goDatasets"
|
|
|
|
|
>
|
|
|
|
|
Go to DataGroup
|
|
|
|
|
</v-btn>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<v-divider />
|
|
|
|
|
|
|
|
|
|
<!-- Body (남은 영역만 스크롤) -->
|
|
|
|
|
<v-sheet class="pa-3 flex-grow-1 overflow-auto">
|
|
|
|
|
<v-sheet class="pa-3 flex-grow-1 overflow-auto bg-transparent">
|
|
|
|
|
<v-skeleton-loader
|
|
|
|
|
v-if="dsLoading"
|
|
|
|
|
type="list-item-two-line"
|
|
|
|
|
@ -997,6 +1014,7 @@ watch(showKubeflowDetails, async () => {
|
|
|
|
|
<v-expansion-panel
|
|
|
|
|
v-for="g in groupSummaries"
|
|
|
|
|
:key="g.id"
|
|
|
|
|
:elevation="3"
|
|
|
|
|
@group:selected="
|
|
|
|
|
async (e: any) => {
|
|
|
|
|
if (e.value) await loadDatasetsForGroup(g.id, g.name);
|
|
|
|
|
|