diff --git a/README.md b/README.md index 43671ed..13f5e62 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ Oxfmt 不负责代码质量,Oxlint 不负责 Vue 的完整类型推导;Vue S - 外层应用固定为视口高度;侧栏、顶栏、项目标题和工作流导航不会随正文滚动。 - 项目列表采用固定表头表格;剧本、分镜、身份与生产页的目录和详情独立滚动,其他工作区只滚动内容区。 +- 目录、详情、执行记录、折叠操作区、图片历史和 JSON 查看区统一使用 Naive UI `NScrollbar`;外层只负责尺寸与裁切,不再设置原生 `overflow: auto`。内边距与横向排列放在 `content-class` 内容层,避免双滚动条。 - 生成配置与批量操作放在可折叠区域,回执到达后自动展开;查询错误始终可见,不隐藏在折叠内容中。 - 右上角提供浅色、暗黑、跟随系统三种模式,默认跟随系统,选择保存在本机浏览器。存储被禁用时仍可在当前会话切换。 - 以黑白灰为主,仅错误、警告、成功等语义状态保留辅助色。Naive UI 和业务内容共用主题;加载前应用偏好,减少主题闪烁。 diff --git a/src/admin.css b/src/admin.css index 9fda452..9a4d9bf 100644 --- a/src/admin.css +++ b/src/admin.css @@ -123,10 +123,13 @@ body { .project-tabs .n-tabs-nav { border: 0; } -.project-notices { +.project-notices.n-scrollbar { flex-shrink: 0; + height: auto; max-height: 100px; - overflow: auto; + overflow: hidden; +} +.project-notices-content { padding: 8px 24px; display: grid; gap: 5px; @@ -147,12 +150,14 @@ body { min-height: 0; overflow: hidden; } -.workspace-heading { +.workspace-heading-scroll.n-scrollbar { flex-shrink: 0; + height: auto; + max-height: min(35dvh, 260px); + overflow: hidden; +} +.workspace-heading { padding: 16px 24px 12px; - max-height: 35%; - overflow: auto; - overscroll-behavior: contain; } .workspace-heading h2 { font-size: 16px; @@ -189,28 +194,27 @@ body { margin: 0; flex-shrink: 0; } -.workspace-overview { +.workspace-overview.n-scrollbar { flex-shrink: 0; - max-height: 42%; - overflow: auto; - padding: 10px 14px; + height: auto; + max-height: min(36dvh, 420px); + overflow: hidden; background: var(--app-surface); border: 1px solid var(--app-border); border-radius: 6px; } -.workspace-feedback { +.overview-scroll-content { + padding: 10px 14px; +} +.workspace-feedback.n-scrollbar { flex-shrink: 0; - max-height: 24%; - overflow: auto; + height: auto; + max-height: min(24dvh, 160px); + overflow: hidden; } .workspace-feedback .n-alert + .n-alert { margin-top: 8px; } -.workspace-split > .n-alert { - flex-shrink: 0; - max-height: 24%; - overflow: auto; -} .script-section { flex: 1; display: flex; @@ -259,11 +263,11 @@ body { } .production-shot-list { max-height: none; - overflow: auto; + overflow: hidden; min-height: 0; } .production-workspace > article { - overflow: auto; + overflow: hidden; min-height: 0; overscroll-behavior: contain; } @@ -278,7 +282,7 @@ body { } .identity-workspace > div { min-height: 0; - overflow: auto; + overflow: hidden; overscroll-behavior: contain; } .identity-subject-list { @@ -292,7 +296,7 @@ body { } .storyboard-workspace > article, .storyboard-workspace .shot-list { - overflow: auto; + overflow: hidden; min-height: 0; height: 100%; max-height: none; @@ -306,7 +310,7 @@ body { .content-with-history > aside, .script-page { min-height: 0; - overflow: auto; + overflow: hidden; overscroll-behavior: contain; } .script-workspace { @@ -315,6 +319,84 @@ body { .episode-list { max-height: none; min-height: 0; + overflow: hidden; +} +/* 面板只负责尺寸与裁切;滚动和深浅主题滚动条统一交给 Naive UI。 */ +.panel-scroll.n-scrollbar { + height: 100%; + min-height: 0; + min-width: 0; + overflow: hidden; +} +.n-scrollbar > .n-scrollbar-container { + overscroll-behavior: contain; +} +.production-shot-list, +.production-detail, +.storyboard-detail, +.shot-list, +.episode-list, +.content-with-history > main { + min-width: 0; + min-height: 0; +} +.script-page, +.history-panel, +.production-shot-list, +.shot-list, +.episode-list { + padding: 0; +} +.production-shot-list-content { + padding-block: 8px; +} +.shot-list-content { + padding: 0 8px 20px; +} +.episode-list-content { + padding: 0 7px 20px; +} +.script-page-content { + padding: 36px 40px; +} +.history-content { + padding: 23px 21px; +} +.production-shot-list-content, +.shot-list-content, +.episode-list-content, +.identity-subject-list-content { + display: flex; + flex-direction: column; +} +.n-button.production-shot-link, +.n-button.shot-link, +.n-button.episode-link, +.n-button.identity-subject-item { + display: flex; + width: 100%; + flex-shrink: 0; +} +.image-history.n-scrollbar, +.table-scroll.n-scrollbar { + height: auto; + overflow: hidden; +} +.image-history-content { + display: flex; + gap: 12px; + padding: 4px 4px 8px; + width: max-content; +} +.code-scroll.n-scrollbar { + height: auto; + max-height: 420px; + overflow: hidden; +} +.code-scroll .json-view, +.code-scroll .storyboard-json { + max-height: none; + overflow: visible; } .project-table-area { flex: 1; @@ -522,18 +604,39 @@ body { grid-template-rows: 110px minmax(0, 1fr); } .production-shot-list { - display: flex; - overflow-x: auto; + display: block; + overflow: hidden; height: 110px; } - .production-shot-link { - flex-shrink: 0; + .production-shot-list-content { + flex-direction: row; + width: max-content; + } + .n-button.production-shot-link { + width: 180px; + min-height: 98px; } .identity-workspace { grid-template-columns: minmax(0, 1fr); grid-template-rows: 180px minmax(0, 1fr); gap: 10px; } + .identity-workspace > aside { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + grid-template-rows: auto auto minmax(0, 1fr) auto; + gap: 6px 8px; + padding: 10px; + } + .identity-workspace > aside > * { + margin-top: 0; + min-width: 0; + } + .identity-workspace > aside > h3, + .identity-workspace > aside > .identity-subject-list, + .identity-workspace > aside > .n-button { + grid-column: 1 / -1; + } .storyboard-workspace { grid-template-columns: 120px minmax(0, 1fr); } @@ -545,7 +648,7 @@ body { grid-template-rows: minmax(0, 1fr) 130px; } .history-panel { - overflow: auto; + overflow: hidden; min-height: 0; } .script-workspace { @@ -560,6 +663,9 @@ body { width: 100%; } .script-page { + padding: 0; + } + .script-page-content { padding: 18px; } .project-search { diff --git a/src/components/ui/WorkspacePage.vue b/src/components/ui/WorkspacePage.vue index b427875..59cbd72 100644 --- a/src/components/ui/WorkspacePage.vue +++ b/src/components/ui/WorkspacePage.vue @@ -5,7 +5,9 @@ defineProps<{ split?: boolean }>()