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:
@@ -2,7 +2,7 @@
|
||||
import { ref } from 'vue'
|
||||
import { RouterLink } from 'vue-router'
|
||||
import {
|
||||
PageLayout,
|
||||
ScorecardDashboardPage,
|
||||
QueryStateBoundary,
|
||||
KArtsellMetricCard,
|
||||
KsButton,
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
KsDateField,
|
||||
KsStatusTag,
|
||||
} from '../../../shared/ui'
|
||||
import type { StandardScreenProps } from '../../../shared/ui/contracts/screenContract'
|
||||
|
||||
|
||||
// KBX v60 Exception-Driven Work Queue Metrics (§2.4 Exception Driven)
|
||||
@@ -37,6 +38,10 @@ const operationalGuides = [
|
||||
{ title: '자동주문 차단', desc: '현재 KIS 실제 주문 제출 기능은 OFF 상태이며 오직 Shadow 평가 모드만 동작합니다.' },
|
||||
]
|
||||
|
||||
// Screen state (ScorecardDashboardPage contract)
|
||||
const screenState = ref<StandardScreenProps['state']>('READY')
|
||||
const screenEvidence = { asOf: new Date().toISOString(), version: '1.0' }
|
||||
|
||||
// Filter & Search states
|
||||
const activeFilter = ref('all')
|
||||
const selectedModule = ref('all')
|
||||
@@ -64,9 +69,11 @@ const handleSearch = () => {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<PageLayout
|
||||
<ScorecardDashboardPage
|
||||
title="업무 워크스페이스 (Work Queue & Reconcile)"
|
||||
subtitle="Exception Driven 업무 큐 및 시스템 헬스 관제 센터"
|
||||
:state="screenState"
|
||||
:evidence="screenEvidence"
|
||||
>
|
||||
<!-- Top-Right Actions Slot -->
|
||||
<template #actions>
|
||||
@@ -198,7 +205,7 @@ const handleSearch = () => {
|
||||
</section>
|
||||
</div>
|
||||
</QueryStateBoundary>
|
||||
</PageLayout>
|
||||
</ScorecardDashboardPage>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
Reference in New Issue
Block a user