From f3e930d027687fd6d781dfc42ad5c83cab437f9a Mon Sep 17 00:00:00 2001 From: qian Date: Tue, 15 Sep 2026 00:29:29 +0800 Subject: [PATCH] =?UTF-8?q?improve(ui):=E4=BC=98=E5=8C=96=E7=A7=9F?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=E9=A1=B5=E9=9D=A2=E6=98=BE=E7=A4=BA=E6=95=88?= =?UTF-8?q?=E6=9E=9C=201.=20=E8=A1=A8=E6=A0=BC=E5=8D=A0=E4=BD=8D=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E5=B1=85=E4=B8=AD=E6=98=BE=E7=A4=BA=202.=20=E5=9C=A8?= =?UTF-8?q?=E7=BA=BF=E4=BD=93=E9=AA=8C=E8=8F=9C=E5=8D=95=E5=89=8D=E7=A7=BB?= =?UTF-8?q?=203.=20=E5=9C=A8=E7=BA=BF=E4=BD=93=E9=AA=8C=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=88=87=E6=8D=A2tab=E4=BB=BB=E5=8A=A1=E4=B8=8D=E4=B8=A2?= =?UTF-8?q?=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/tenant/src/router/tenant.ts | 22 ++++---- web/tenant/src/styles/main.css | 10 ++++ .../src/views/service/PlaygroundPage.vue | 34 ++++++++--- .../src/views/service/playground/ImageTab.vue | 56 ++++++++----------- .../src/views/service/playground/VideoTab.vue | 51 ++++++----------- 5 files changed, 84 insertions(+), 89 deletions(-) diff --git a/web/tenant/src/router/tenant.ts b/web/tenant/src/router/tenant.ts index f1e0298..4858bb0 100644 --- a/web/tenant/src/router/tenant.ts +++ b/web/tenant/src/router/tenant.ts @@ -109,35 +109,41 @@ const tenantRoutes: RouteRecordRaw[] = [ component: () => import('@/views/service/ModelsPage.vue'), meta: { title: '可用模型', icon: 'cube', sort: 30, roles: ['owner', 'admin', 'member'] }, }, + { + path: 'playground', + name: 'TenantPlayground', + component: () => import('@/views/service/PlaygroundPage.vue'), + meta: { title: '在线体验', icon: 'terminal', sort: 31, roles: ['owner', 'admin', 'member'], badge: '⚡' }, + }, { path: 'model-comparison', name: 'TenantModelComparison', component: () => import('@/views/service/ModelComparisonPage.vue'), - meta: { title: '模型对比', icon: 'chart', sort: 31, roles: ['owner', 'admin', 'member'] }, + meta: { title: '模型对比', icon: 'chart', sort: 32, roles: ['owner', 'admin', 'member'] }, }, { path: 'api-keys', name: 'TenantApiKeys', component: () => import('@/views/service/ApiKeysPage.vue'), - meta: { title: 'API 密钥', icon: 'key', sort: 32, roles: ['owner', 'admin', 'member'], viewportTable: true }, + meta: { title: 'API 密钥', icon: 'key', sort: 33, roles: ['owner', 'admin', 'member'], viewportTable: true }, }, { path: 'usage-logs', name: 'TenantUsageLogs', component: () => import('@/views/service/UsageLogsPage.vue'), - meta: { title: '用量日志', icon: 'chart', sort: 33, roles: ['owner', 'admin', 'member'], viewportTable: true }, + meta: { title: '用量日志', icon: 'chart', sort: 34, roles: ['owner', 'admin', 'member'], viewportTable: true }, }, { path: 'request-audit-logs', name: 'TenantRequestAuditLogs', component: () => import('@/views/service/RequestAuditLogsPage.vue'), - meta: { title: '请求审计日志', icon: 'clipboard', sort: 34, roles: ['owner', 'admin'], viewportTable: true }, + meta: { title: '请求审计日志', icon: 'clipboard', sort: 35, roles: ['owner', 'admin'], viewportTable: true }, }, { path: 'task-logs', name: 'TenantTaskLogs', component: () => import('@/views/service/TaskLogsPage.vue'), - meta: { title: '任务日志', icon: 'clock', sort: 35, roles: ['owner', 'admin', 'member'], viewportTable: true }, + meta: { title: '任务日志', icon: 'clock', sort: 36, roles: ['owner', 'admin', 'member'], viewportTable: true }, }, // 财务 (40-49) { @@ -177,12 +183,6 @@ const tenantRoutes: RouteRecordRaw[] = [ component: () => import('@/views/notification/NotificationPreferencesPage.vue'), meta: { title: '通知偏好', roles: ['owner', 'admin'] }, }, - { - path: 'playground', - name: 'TenantPlayground', - component: () => import('@/views/service/PlaygroundPage.vue'), - meta: { title: '在线体验', icon: 'terminal', sort: 50, roles: ['owner', 'admin', 'member'], badge: '⚡' }, - }, { path: 'tickets', name: 'TenantTickets', diff --git a/web/tenant/src/styles/main.css b/web/tenant/src/styles/main.css index dd42ecc..faa91ca 100644 --- a/web/tenant/src/styles/main.css +++ b/web/tenant/src/styles/main.css @@ -459,6 +459,16 @@ body.modal-open { flex: 0 0 auto; } } + +/* Naive UI flex-height 表格空态垂直居中:空态节点 .n-data-table-empty 自带 flex-grow:1 + 居中, + 但其父级滚动 content(.n-scrollbar-content)默认高度塌成内容高且非 flex 容器,flex-grow 无从生效, + 「暂无数据」会顶在表体上方。空数据时把 content 拉满表体高度并转纵向 flex 即可; + 限定 :has(空态节点) 保证有数据时表格布局零影响 */ +.n-data-table--flex-height .n-data-table-base-table-body .n-scrollbar-content:has(> .n-data-table-empty) { + min-height: 100%; + display: flex; + flex-direction: column; +} .table-container-flush { border: 0; border-radius: 0; diff --git a/web/tenant/src/views/service/PlaygroundPage.vue b/web/tenant/src/views/service/PlaygroundPage.vue index ace4f5b..6b9c67f 100644 --- a/web/tenant/src/views/service/PlaygroundPage.vue +++ b/web/tenant/src/views/service/PlaygroundPage.vue @@ -1,5 +1,5 @@