refactor(fe): P3 pages standardize to screen-type v2 templates
Refactored 4 feature pages to use standard screen-type v2 layouts: 1. HomePage → ScorecardDashboardPage - Exception-driven work queue metrics + dashboard layout - KPI cards, filters, operational guides - Viewport-fit ready, no page-level scrolling 2. ModelsList → MasterDetailCrudPage - Master list + detail panel layout - Model grid with phase/performance metrics - Search, filter, pagination 3. ModelDetail → DetailReadPage - Read-only model detail view - State management (LOADING/ERROR/READY) - Metric display (PBO, DSR, Return) 4. ShadowRunDetail → DetailReadPage - Shadow run detail view - State management (LOADING/ERROR/READY) - Performance metrics (PBO, DSR, OOS) Pattern Applied: - Remove PageLayout, use screen-type component - Add StandardScreenProps (state, evidence) - State computed from query status - Slot structure maintained or aligned - No functional changes, pure standardization Benefits: - Consistent layout across pages - Standardized state management - Improved viewport-fit compliance - Better component reusability Next: Viewport-fit final validation + viewport-fit edge cases Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
<script setup lang="ts">
|
||||
import { computed } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { DetailReadPage } from '../../../shared/ui/screen-types/v2'
|
||||
import { SkeletonLoader } from '../../../shared/ui/components'
|
||||
import { useShadowRunDetail } from '../composables/useShadowRuns'
|
||||
import type { StandardScreenProps } from '../../../shared/ui/contracts/screenContract'
|
||||
|
||||
const route = useRoute()
|
||||
|
||||
@@ -11,10 +13,22 @@ const runId = computed(() => route.params.runId as string)
|
||||
const shadowRunQuery = useShadowRunDetail(runId.value)
|
||||
|
||||
const run = computed(() => shadowRunQuery.data as any)
|
||||
|
||||
const screenState = computed<StandardScreenProps['state']>(() => {
|
||||
if (shadowRunQuery.isPending) return 'LOADING'
|
||||
if (shadowRunQuery.isError) return 'ERROR'
|
||||
return 'READY'
|
||||
})
|
||||
const screenEvidence = { asOf: new Date().toISOString(), version: '1.0' }
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="shadow-run-detail-page">
|
||||
<DetailReadPage
|
||||
:title="`Shadow Run #${runId}`"
|
||||
:state="screenState"
|
||||
:evidence="screenEvidence"
|
||||
>
|
||||
<template #primary>
|
||||
<header class="page-header">
|
||||
<h1>Shadow Run Details</h1>
|
||||
</header>
|
||||
@@ -57,7 +71,8 @@ const run = computed(() => shadowRunQuery.data as any)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</DetailReadPage>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
Reference in New Issue
Block a user