后端生成闸+多项修复;前端全站更新;QA 审计与报告

后端:
- 新增 celery_health 生成前置闸——无 worker 在线时图片/视频生成入口
  一律 503,防"提交到 ARK 后无人轮询、结果悬空+额度冻结"的数据丢失
- 拼接导出:帧率跟随源众数、字幕逐句重映射、原声/BGM 混音修复
- 资金核算审计脚本 + genesis 账目回填 + 滞留预留清理命令
- 接入 yunqi provider 与豆包 TTS 模型(catalog/migrations/bootstrap 命令)

前端:全站页面更新(pipeline/library/products/projects/team/account 等),
新增共享 pager 分页组件

QA:刷新 function-audit 全量输出,新增 full-qa 报告
文档:BP 产品介绍资料、design/CLAUDE.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
zyc
2026-06-15 10:06:15 +08:00
co-authored by Claude Fable 5
parent 890cb9ab67
commit 216a711291
92 changed files with 5114 additions and 2027 deletions
+64 -1
View File
@@ -1483,6 +1483,38 @@ select.duration-select:focus,
color: rgba(255, 255, 255, .7);
letter-spacing: .04em;
}
/* ─── 通用列表分页器(components/pager.tsx,视觉同向导 pp-pager)─── */
.list-pager {
display: flex; align-items: center; gap: 16px;
margin-top: 18px; padding-top: 14px;
border-top: 1px solid var(--border-faint);
font-size: 12.5px; color: var(--black-alpha-56);
}
.list-pager .total { font-family: var(--font-mono); letter-spacing: .02em; }
.list-pager .pages { display: inline-flex; gap: 4px; margin-left: auto; }
.list-pager .pages button {
min-width: 28px; height: 28px; padding: 0 8px;
border: 1px solid var(--border-faint); background: var(--surface);
border-radius: var(--r-sm);
cursor: pointer; font-size: 12.5px; color: var(--black-alpha-72); font-family: inherit;
transition: border-color var(--t-base), background var(--t-base), color var(--t-base);
}
.list-pager .pages button:hover:not(.active):not(:disabled) { border-color: var(--black-alpha-32); color: var(--accent-black); }
.list-pager .pages button.active { background: var(--heat); color: var(--accent-white); border-color: var(--heat); font-weight: 600; }
.list-pager .pages button:disabled { opacity: .4; cursor: not-allowed; }
.list-pager .pages .ellipsis { min-width: 22px; height: 28px; display: inline-flex; align-items: center; justify-content: center; color: var(--black-alpha-48); }
.list-pager .page-size { font-family: var(--font-mono); letter-spacing: .02em; }
/* 音频试听面板:灯箱内居中,音符 + 原生播放器 */
.np-lightbox .lb-audio {
display: flex; flex-direction: column; align-items: center; gap: 20px;
background: rgba(255, 255, 255, .08);
border-radius: var(--r-md);
padding: 36px 44px;
cursor: default;
}
.np-lightbox .lb-audio svg { width: 34px; height: 34px; color: rgba(255, 255, 255, .8); }
.np-lightbox .lb-audio audio { width: min(420px, 76vw); }
/* Bullet list · 弹窗内 (复用样式) */
.np-body .bullet-list { list-style: none; padding: 0; }
@@ -2121,14 +2153,45 @@ table.t tbody tr:hover { background: var(--black-alpha-4); }
}
/* ─── Responsive ─── */
/* 桌面端汉堡键不出现(基础态,放在 @media 前,避免被后置规则覆盖) */
.mobile-nav-btn { display: none; }
@media (max-width: 1100px) {
.app { grid-template-columns: 1fr; }
aside.sidebar { display: none; }
/* 窄屏:侧栏改为左侧抽屉(默认移出视口),汉堡键拉出;桌面收窄键隐藏 */
aside.sidebar {
display: block;
position: fixed; top: 0; left: 0; bottom: 0;
width: 248px;
z-index: 1200;
transform: translateX(-100%);
transition: transform .28s cubic-bezier(.32, .72, 0, 1);
box-shadow: 0 0 40px rgba(0, 0, 0, .18);
}
/* 抽屉里收窄态不适用,强制展开宽度,避免 body.sidebar-collapsed 把抽屉压成 96px */
body.sidebar-collapsed aside.sidebar { width: 248px; }
aside.sidebar.mobile-open { transform: translateX(0); }
.sidebar-toggle { display: none; }
/* 抽屉内汉堡键无意义,藏掉,留出顶部空间给页面自己的汉堡 */
.mobile-nav-btn {
display: flex; flex-direction: column; gap: 4px; justify-content: center; align-items: center;
position: fixed; top: 14px; left: 14px; z-index: 60;
width: 38px; height: 38px;
background: var(--surface); border: 1px solid var(--border-faint); border-radius: var(--r-sm);
cursor: pointer;
}
.mobile-nav-btn span { display: block; width: 16px; height: 1.6px; background: var(--accent-black); border-radius: 2px; }
.mobile-nav-backdrop { position: fixed; inset: 0; z-index: 1150; background: rgba(21, 20, 15, .42); }
/* 顶栏给汉堡键让出左侧空间 */
.topbar { padding-left: 64px; }
.stats { grid-template-columns: repeat(2, 1fr); }
.stat:nth-child(2) { border-right: 0; }
.stat:nth-child(1), .stat:nth-child(2) { border-bottom: 1px solid var(--border-faint); }
/* 统计卡标签不要被挤到逐字竖排 */
.stat .lbl { white-space: nowrap; }
.content { padding: 28px 24px 48px; }
/* 宽数据表(项目列表/成员表/账单表)在窄屏改横向滚动,否则右侧列被裁切、点不到 */
#list-view, .members-table-wrap, .billing-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.members-table, .billing-table, #list-view table.t { min-width: 640px; }
}
/* ─── Spinner ─── */