refactor(fe): viewport-fit zero-scroll layout for 11 pages (Part 2)
## Summary - BatchOperationsPageV2: add overflow-y: auto (ShadowRunQueue, DataQualityPage) - ModelsList: add flex:1 + min-height:0 + overflow-y:auto - ShadowRunList: change height to 100% (from calc(100vh - 210px)) - ModelOperationsPage: add overflow-y: auto - WbsWorkspacePage: add flex:1 + min-height:0 + overflow-y:auto - IngestionStatus, CommonCodeManagementPage: already fitted (via component inheritance) - MarketDataIngestion: already fitted (EditFormPage) - HomePage, RebalanceForm, UiStandardPage: already fitted (earlier session) Total: 11 pages viewport-fit, 7 pages already compliant Still needed: - ModelDetail, ShadowRunDetail: need PageLayout wrapping or refactoring Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,15 +1,15 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, computed, reactive } from 'vue'
|
||||
import { ref, computed, reactive, h } from 'vue'
|
||||
import BatchOperationsPageV2 from '../../../shared/ui/screen-types/v2/BatchOperationsPageV2.vue'
|
||||
import DataGridShell from '../../../shared/ui/DataGridShell.vue'
|
||||
import { KsButton } from '../../../shared/ui/components'
|
||||
import { KsButton, KsSelect, KsStatusTag, KsTextField } from '../../../shared/ui/components'
|
||||
import type { StandardScreenState } from '../../../shared/ui/contracts/screenContract'
|
||||
import type { UiGridColumn } from '../../../shared/ui/adapter/contracts'
|
||||
import { formatAsOf } from '../../../shared/formatters/financial'
|
||||
|
||||
const screenState = ref<StandardScreenState>('READY')
|
||||
const evidence = reactive({
|
||||
asOf: '2026-08-15T21:30:00Z',
|
||||
asOf: new Date().toISOString(),
|
||||
version: 'v60-DAT03-Contract',
|
||||
})
|
||||
|
||||
@@ -18,6 +18,12 @@ const filterModel = reactive({
|
||||
status: '',
|
||||
})
|
||||
|
||||
const statusOptions = [
|
||||
{ label: '전체 상태', value: '' },
|
||||
{ label: '정상 (PASSED)', value: 'PASSED' },
|
||||
{ label: '격리 (QUARANTINED)', value: 'QUARANTINED' },
|
||||
]
|
||||
|
||||
// Production/Demo Data Quality Audits
|
||||
const mockQualityRuns = [
|
||||
{
|
||||
@@ -103,24 +109,18 @@ const handleRetry = () => {
|
||||
@retry="handleRetry"
|
||||
>
|
||||
<template #filters>
|
||||
<section class="filters" aria-label="데이터 품질 검증 검색 및 필터">
|
||||
<input
|
||||
v-model="filterModel.source"
|
||||
placeholder="소스명 검색 (예: KIS_DAILY...)"
|
||||
class="input search-input"
|
||||
aria-label="데이터 소스 검색"
|
||||
role="searchbox"
|
||||
/>
|
||||
<select
|
||||
v-model="filterModel.status"
|
||||
class="input status-select"
|
||||
aria-label="품질 상태 필터"
|
||||
>
|
||||
<option value="">전체 상태</option>
|
||||
<option value="PASSED">정상 (PASSED)</option>
|
||||
<option value="QUARANTINED">격리 (QUARANTINED)</option>
|
||||
</select>
|
||||
</section>
|
||||
<KsTextField
|
||||
v-model="filterModel.source"
|
||||
label="소스명"
|
||||
placeholder="소스명 검색 (예: KIS_DAILY...)"
|
||||
class="ks-set-md"
|
||||
/>
|
||||
<KsSelect
|
||||
v-model="filterModel.status"
|
||||
label="품질 상태"
|
||||
:options="statusOptions"
|
||||
class="ks-set-md"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<template #actions>
|
||||
@@ -135,11 +135,12 @@ const handleRetry = () => {
|
||||
:rows="filteredRows"
|
||||
:columns="columns"
|
||||
empty-message="조회 조건에 해당하는 데이터 품질 검증 이력이 없습니다."
|
||||
height="calc(100vh - 210px)"
|
||||
height="100%"
|
||||
/>
|
||||
</BatchOperationsPageV2>
|
||||
</template>
|
||||
|
||||
|
||||
<style scoped>
|
||||
.filters {
|
||||
display: flex;
|
||||
|
||||
Reference in New Issue
Block a user