Files
short-drama-agent-front/src/components/ui/WorkspacePage.vue
T

84 lines
2.3 KiB
Vue

<script setup lang="ts">
import { NScrollbar } from 'naive-ui'
/** 工作区固定标题和操作区;仅内容容器滚动,不向 document 传播滚动。 */
defineProps<{ split?: boolean; compact?: boolean }>()
</script>
<template>
<section class="workspace-page" :class="{ 'content-first-workspace': compact }">
<NScrollbar v-if="$slots.header" class="workspace-heading-scroll"
><header class="workspace-heading"><slot name="header" /></header
></NScrollbar>
<div v-if="split" class="workspace-split"><slot /></div>
<NScrollbar v-else class="workspace-scroll" content-class="workspace-scroll-content"><slot /></NScrollbar>
</section>
</template>
<style>
/* 本组件专属布局与 Naive 内部结构覆盖。 */
@reference "../../styles/styles.css";
.workspace-page {
@apply relative h-full flex flex-col min-h-0 overflow-hidden;
}
.workspace-heading-scroll.n-scrollbar {
@apply shrink-0 h-auto max-h-[min(35dvh,260px)] overflow-hidden;
}
.workspace-heading {
@apply pt-4 px-6 pb-3;
}
.content-first-workspace .workspace-heading {
@apply py-2 px-5;
}
.content-first-workspace .workspace-split {
@apply pt-0 px-5 pb-3 gap-2;
}
.content-first-workspace .workspace-scroll-content {
@apply pt-0 px-5 pb-4;
}
.workspace-heading h2 {
@apply text-base;
}
.workspace-heading .text-sm {
@apply text-xs;
}
.workspace-heading .production-controls {
@apply gap-3;
}
.workspace-heading .n-input-number {
@apply w-full;
}
.workspace-scroll {
@apply flex-1 min-h-0;
}
.workspace-scroll-content {
@apply pt-1 px-6 pb-6;
}
.workspace-scroll > .n-scrollbar-container {
@apply overscroll-contain;
}
.workspace-split {
@apply flex flex-col flex-1 min-h-0 overflow-hidden pt-1 px-6 pb-5 gap-3;
}
.workspace-split > .my-6 {
@apply m-0 shrink-0;
}
@media (max-width: 760px) {
.workspace-heading {
@apply p-3;
}
.content-first-workspace .workspace-heading {
@apply py-2 px-3;
}
.content-first-workspace .workspace-split,
.content-first-workspace .workspace-scroll-content {
@apply pt-0 px-3 pb-3;
}
.workspace-scroll-content,
.workspace-split {
@apply pt-0 px-3 pb-3;
}
.workspace-heading .production-controls {
@apply grid-cols-[minmax(100px,_1fr)_80px];
}
}
</style>