feat(fe): display system version and contract version in app footer
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 70 KiB |
@@ -15,7 +15,9 @@ const currentYear = new Date().getFullYear()
|
|||||||
<a href="#" class="ks-footer__link">지원</a>
|
<a href="#" class="ks-footer__link">지원</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="ks-footer__section">
|
<div class="ks-footer__section">
|
||||||
<span class="ks-footer__version">v0.1.0</span>
|
<span class="ks-footer__version">System: v0.1.0</span>
|
||||||
|
<span class="ks-footer__divider">|</span>
|
||||||
|
<span class="ks-footer__version-contract">Contract: v60-T08-Contract</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
@@ -69,6 +71,19 @@ const currentYear = new Date().getFullYear()
|
|||||||
.ks-footer__version {
|
.ks-footer__version {
|
||||||
color: var(--color-text-tertiary);
|
color: var(--color-text-tertiary);
|
||||||
font-size: var(--font-size-xs);
|
font-size: var(--font-size-xs);
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ks-footer__divider {
|
||||||
|
color: var(--ks-color-neutral-300);
|
||||||
|
margin: 0 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ks-footer__version-contract {
|
||||||
|
color: var(--ks-color-action);
|
||||||
|
font-size: var(--font-size-xs);
|
||||||
|
font-weight: 600;
|
||||||
|
font-family: monospace;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
<script setup lang="ts">import { computed } from 'vue'; import PageLayout from '../../layouts/PageLayout.vue'; import StandardScreenBoundary from './StandardScreenBoundary.vue'; import type { StandardScreenProps } from '../../contracts/screenContract'; const props=defineProps<StandardScreenProps>(); const contentBlocked = computed(() => ['LOADING','ERROR','UNAUTHORIZED','FORBIDDEN','CONFLICT','EXPIRED','READONLY','PROCESSING'].includes(props.state ?? 'READY')); defineEmits<{retry:[]}>()</script>
|
<script setup lang="ts">import { computed } from 'vue'; import PageLayout from '../../layouts/PageLayout.vue'; import StandardScreenBoundary from './StandardScreenBoundary.vue'; import type { StandardScreenProps } from '../../contracts/screenContract'; const props=defineProps<StandardScreenProps>(); const contentBlocked = computed(() => ['LOADING','ERROR','UNAUTHORIZED','FORBIDDEN','CONFLICT','EXPIRED','READONLY','PROCESSING'].includes(props.state ?? 'READY')); defineEmits<{retry:[]}>()</script>
|
||||||
<template><PageLayout :title="props.title" :subtitle="props.subtitle" :status="props.state" :as-of="props.evidence?.asOf" :version="props.evidence?.version"><template #actions><slot name="actions"/></template><template #summary><slot name="runSummary"/></template><template #filters><slot name="filters"/></template><StandardScreenBoundary :state="props.state" :warning="props.warning" @retry="$emit('retry')"><section v-if="!contentBlocked" class="ks-stack ks-batch-page-section"><div v-if="$slots.timeline" class="ks-card ks-section"><slot name="timeline"/></div><div v-if="$slots.records" class="ks-card ks-section"><slot name="records"/></div><div v-if="$slots.reprocess" class="ks-card ks-section"><slot name="reprocess"/></div><slot /></section></StandardScreenBoundary><template #aside><slot name="runbook"/></template></PageLayout></template>
|
<template><PageLayout :title="props.title" :subtitle="props.subtitle" :status="props.state" :as-of="props.evidence?.asOf" :version="props.evidence?.version"><template #actions><slot name="actions"/></template><template #summary><slot name="runSummary"/></template><template #filters><slot name="filters"/></template><StandardScreenBoundary :state="props.state" :warning="props.warning" @retry="$emit('retry')"><section v-if="!contentBlocked" class="ks-stack ks-batch-page-section"><div v-if="$slots.timeline" class="ks-card ks-section"><slot name="timeline"/></div><div v-if="$slots.records" class="ks-card ks-section"><slot name="records"/></div><div v-if="$slots.reprocess" class="ks-card ks-section"><slot name="reprocess"/></div><slot /></section></StandardScreenBoundary><template #aside><slot name="runbook"/></template><template #footer><slot name="footer"/></template></PageLayout></template>
|
||||||
<style scoped>.ks-section{padding:var(--ks-space-4)}.ks-batch-page-section{display:flex;flex-direction:column;flex:1;min-height:0;height:100%}</style>
|
<style scoped>.ks-section{padding:var(--ks-space-4)}.ks-batch-page-section{display:flex;flex-direction:column;flex:1;min-height:0;height:100%}</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user