feat(admin): Phase 4 质量词 Admin(平台单层) — QualityWord + 生成侧读配置(无配置回落) + 质量词页

后端:apps/ai QualityWord(stage/slot/text/sort/enabled)+ migration;services.py quality_words/quality_suffix,
4 个 builder 接入(person/model_tryon/storyboard/video)无配置回落原写死值零回归;adminpanel CRUD + 审计。
前端:adminApi quality 系列;Admin 质量词页(按 stage 分组卡 + 编辑模式开关 + 行内增改删 chip)。
测试:adminpanel 23 + accounts 22 = 45 单测过(CRUD/权限/生成读配置+回落/停用词不取);
无头 e2e _admin-p4.mjs 4 断言过 + 0 console error + live 库零残留;tsc+build 绿。
注:apps.ai 3 个 image_edit 路由测试失败为进场前既有(已 stash 比对 HEAD 同样失败),非本 Phase 引入。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
seaislee1209
2026-06-19 21:52:41 +08:00
co-authored by Claude Opus 4.8
parent 6560633959
commit 01d4f235ed
14 changed files with 535 additions and 5 deletions
+51
View File
@@ -144,3 +144,54 @@
.admin-detail-meta .v { font-size: 14px; color: var(--accent-black); }
.admin-detail-subhead { font-size: 13px; font-weight: 500; color: var(--accent-black); margin: 8px 0 10px; }
.admin-inline-pill { margin-left: 8px; }
/* ── 质量词:按 stage 分组 + 编辑模式 chip ── */
.qw-stages { display: flex; flex-direction: column; gap: 16px; }
.qw-stage { padding: 18px 20px; }
.qw-stage-h { display: flex; align-items: baseline; gap: 10px; margin-bottom: 12px; }
.qw-stage-title { font-size: 14px; font-weight: 500; color: var(--accent-black); }
.qw-stage-hint { font-size: 11px; color: var(--black-alpha-48); }
.qw-empty { font-size: 12px; color: var(--black-alpha-48); }
.qw-chips { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.qw-chip {
display: inline-flex;
align-items: center;
gap: 6px;
height: 28px;
padding: 0 12px;
background: var(--heat-12);
border: 1px solid var(--heat-20);
border-radius: var(--r-pill);
font-size: 12.5px;
color: var(--heat);
}
.qw-chip.editing { background: var(--surface); border-color: var(--border-faint); padding: 0 6px 0 10px; }
.qw-chip-input {
border: 0;
background: transparent;
outline: none;
font: inherit;
color: var(--accent-black);
width: 110px;
height: 26px;
font-size: 12.5px;
}
.qw-add .qw-chip-input {
width: 150px;
border: 1px dashed var(--black-alpha-24);
border-radius: var(--r-pill);
padding: 0 12px;
height: 28px;
}
.qw-del {
display: inline-grid;
place-items: center;
width: 18px;
height: 18px;
border: 0;
background: transparent;
color: var(--black-alpha-48);
cursor: pointer;
border-radius: 50%;
}
.qw-del:hover { color: var(--accent-crimson); background: var(--black-alpha-4); }