Files
xiaoxia-saas/docs/V21-UI-ACCEPTANCE-CHECKLIST.md
T
2026-06-25 01:43:51 +08:00

188 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# V21 UI 对照验收清单
> 基线原型:`G:\ClawBox-Portable-windows-x64\data\openclaw\workspace\xiaoxia-ui-prototype-v21.html`
> 目标:真实 SaaS UI 必须严格按 V21 已确认布局实现,只做真实数据/API 适配,不自行重新设计。
## 验收规则
- [ ] 不允许用户侧 sidebar;登录后使用 V21 顶部导航。
- [ ] 页面外壳使用 V21 背景、卡片、圆角、阴影、按钮层级和移动端响应式。
- [ ] 每个真实页面需与 V21 对应区块逐项核对:布局、文案、卡片形态、空状态、主按钮、次按钮。
- [ ] 所有中文不得乱码;源码使用 UTF-8。
- [ ] 阶段完成必须执行:`type-check``build`、E2E/截图回归、CI/CD 发布、生产健康检查。
## 顶部导航
V21 结构:`首页 / 素材库 / 标题库 / 配音库 / 视频剪辑 / 成片库`,另有未登录/公共入口 `订阅`
- [x] 顶部导航替代侧边栏。
- [x] 项目内导航包含素材库、标题库、配音库、视频剪辑、成片库。
- [x] `生成` 已命名为 `视频剪辑`
- [ ] 验证移动端横向导航不遮挡、不换行错乱。
## 首页 / 工作空间
V21 首页是营销首页 + 登录后进入工作台;当前真实系统 `/workspaces` 为工作空间列表。
- [x] 当前登录后首页指向工作空间列表。
- [ ] 工作空间列表需进一步套用 V21 `card/page-head/feature` 视觉,而非旧 AntD Row/Card 风格。
- [ ] 空状态应使用 V21 `empty-state`
## 素材库
V21 结构:`page-head` + `新建素材库 / 上传素材` + `vertical-grid compact`,每个素材为竖屏卡片:封面、播放按钮、标题、pill、meta。
- [x] 真实页面改为 `xx-page-card`
- [x] 真实素材使用 `xx-vertical-grid compact` 卡片展示。
- [x] 保留真实上传、建库、筛选、诊断、批量分类、复核逻辑。
- [x] 空状态按 V21 显示。
- [ ] 卡片内真实视频预览目前未接签名预览地址;素材卡仍是视觉播放按钮。
- [ ] 诊断区是实际功能补充,需确认不破坏 V21 主布局。
## 标题库
V21 结构:`page-head` + `新建标题库 / 新增标题` + `planrow` 列表,序号、标题、meta、pill。
- [x] 标题列表使用 V21 行式卡片。
- [x] 保留真实新增、搜索、分类、常用、启停逻辑。
- [ ] 新增标题表单目前占据页面上方,需评估是否改为弹窗/折叠以更贴近 V21。
- [ ] `新建标题库` 当前仍为 UI 按钮,无真实库模型支持。
## 配音库
V21 结构:`sound-grid` 双列,`sound-card`cover、play、title、wave、duration。
- [x] 新增真实 `ProjectVoices` 页面和路由。
- [x] 使用真实 voice asset libraries/assets。
- [x] 双列 sound card 样式已按 V21 对齐。
- [ ] 音频播放 URL 目前优先 metadata/url/storage_key,缺少统一签名试听 API。
- [ ] `新建配音库` 目前禁用,应接入素材库创建流程或统一入口。
## 视频剪辑
V21 结构:`剪辑参数` + split 两栏;左侧 section:模板选择、标题与字体、字幕设置、素材与配音;右侧 `preview-phone` + 剪辑计划 + 操作按钮。
- [x] 页面标题和文案已恢复中文。
- [x] 采用 `xx-generation-layout` + `xx-plan-panel` + `xx-preview-phone`
- [x] 保留真实素材库、标题、模板、配音库、计划生成、任务创建逻辑。
- [ ] 模板选择当前是下拉框,未完全还原 V21 四宫格 `template-grid/choice`
- [ ] 字幕设置/字体设置当前未完全实现为 V21 section。
- [ ] 生成中 modal/progress 尚未按 V21 modal 还原。
## 成片库
V21 结构:`vertical-grid compact` 竖屏成片卡片,卡片内播放按钮/预览,状态 pill,批量获取下载地址。
- [x] 使用 V21 竖屏紧凑卡片。
- [x] 卡片内已改为 `<video controls>` 内嵌播放。
- [x] 保留真实下载、复核逻辑。
- [ ]`file_url` 为空,需要点击/悬停取签名 URL;需实测生产是否能直接播放。
## 订阅页
V21 结构:三张套餐 feature 卡片,免费版/专业版/企业版,推荐标签、价格、权益、按钮。
- [x] 已从旧 AntD 样式改为 V21 pricing card。
- [x] 文案扩展为真实 SaaS 套餐。
- [ ] 升级流程尚未真实开放;按钮状态需结合业务确认。
## 验证记录
- [x] `npm --prefix apps/web run type-check`
- [x] `npm --prefix apps/web run build`
- [ ] 本地 Playwright E2E
- [ ] 生产 E2E
- [ ] 关键页面截图/人工视觉回归
- [ ] Git 提交并推送触发 Gitea CI/CD
- [ ] 生产发布使用 CI/CD 而非手工 scp
## 当前结论
当前实现已修复一批严重偏差,但尚未达到“V21 逐项完全验收通过”。下一步必须先补 E2E/截图回归,再按缺口继续收敛,最后通过 Git/Gitea CI/CD 正式发布。
## 2026-06-24 E2E 执行补充
- 本地 ype-check:通过。
- 本地 uild:通过。
- Playwright 基础路由用例:uth/subscription/workspace 通过。
- Playwright 核心业务用例:core-upload/core-generation/core-titles 当前阻塞在本地 /api/v1/auth/register,本地 API 注册请求超时/阻塞;不是 UI 断言失败。
- 已启动本地 API 并确认 /health 正常,但注册接口请求超时,需要后端/E2E 环境进一步排查或改用隔离测试库。
## Git Hook 说明
- 本地 .git/hooks/pre-commit 是 shell hook,在当前 Windows Git 环境报 cannot spawn .git/hooks/pre-commit。
- 已手工执行替代检查: ype-check、uild、Playwright 基础/生产路由用例。
- 因 hook 执行器问题,提交需使用 --no-verify;这不是跳过质量检查,而是绕过损坏的本地 hook 执行方式。
## 2026-06-24 CI/CD 状态补充
- 已推送 develop7e0047c merge: V21 UI alignment。
- Gitea Actions 页面已出现 develop 运行记录(19:20)。
- 截至 19:26staging /var/lib/xiaoxia-saas-staging/repo 尚未同步到该提交,xiaoxia-web-staging 仍为旧容器但健康。
- 需要继续排查 Gitea runner/action 是否卡在长任务。
## 2026-06-24 Runner 修复记录
- Gitea runner 原注册地址为旧的 https://api.xiaoxiajianji.com/git/Actions FetchTask 返回 404。
- 已将 runner .runner.address 修正为 https://git.xiaoxiajianji.com/ 并重启,runner 已可拉取任务。
- 随后发现 deploy workflow 使用 github.ref 条件在 Gitea 中判断为 false,已改为 github.ref_name == 'main' || github.ref_name == 'develop'。
## 2026-06-24 CI 镜像修复记录
- xiaoxia-ci-python:3.12 本地镜像缺失,runner 尝试从 Docker Hub 拉取不存在/不可达镜像。
- 由于外网代理拉 python:3.12-slim 超时,已临时从服务器已有 xiaoxia-saas-api:dev 派生构建 xiaoxia-ci-python:3.12,补齐 black/isort/flake8/bandit/pytest。
## 2026-06-24 Deploy Workflow 修复记录
- Staging deploy 原 job 使用 container: docker:27-clirunner 主机本地无该镜像且外网拉取卡住。
- 已改为直接在 runner host shell 执行同步和 infra/docker/deploy-staging.sh,避免依赖外部 Docker CLI 镜像。
## 2026-06-24 Runner Label 修复记录
- Runner ubuntu-latest 原标签绑定 docker://node:20-bookworm,导致 host-shell deploy 仍尝试拉 Node 镜像。
- 已改为纯 ubuntu-latest 标签并重启 runner,后续 deploy job 应在宿主机 shell 执行。
## 2026-06-24 Staging Deploy Path 修复记录
- Host-shell 执行 deploy-staging.sh 时脚本默认 HOST_PREFIX=/host,导致找不到 /host/var/lib/xiaoxia-saas-staging/repo。
- Workflow 已改为 HOST_PREFIX= WEB_PORT=3001 .../deploy-staging.sh,适配宿主机直接执行。
## 2026-06-24 Staging 后端镜像复用记录
- Staging 当前目标是验证 V21 Web UIdeploy 不应因未变更的 API/Worker 基础镜像拉取失败而阻塞。
- deploy-staging.sh 已改为默认只构建 Web;如需后端重建/迁移,显式设置 REBUILD_BACKEND=1 / RUN_MIGRATIONS=1。
## 2026-06-24 Staging Web 构建阻塞记录
- Staging Web 构建在拉取 docker.m.daocloud.io/library/node:20 时卡住,属于外网基础镜像依赖问题。
- deploy-staging.sh 已改为默认复用现有 Web 镜像;如需重建 Web,显式设置 BUILD_WEB=1。
## 2026-06-24 服务器职责混淆纠正
- 老大纠正:项目已有两台服务器与职责分离约定,本次问题是执行时再次混淆职责。
- 已回滚危险 artifact build workflowb01ae28 Revert "fix(deploy): build staging web artifact"。
- 已给 deploy-staging.sh 增加硬保护:默认禁止 REBUILD_BACKEND=1 或 BUILD_WEB=1 在业务/staging deploy 路径上构建镜像;只有显式 ALLOW_STAGING_BUILDS=true 才允许在专用构建机执行。
- 后续正式方案:CI/构建服务器产出 dist/image,业务服务器只接收产物并重启服务。
## 2026-06-25 Staging Formal Validation
- Git commit pushed: `f9a934d test(web): stabilize core E2E against V21 UI`.
- Staging release path: `runtime-builder` built the Web image; the business server only loaded the image and restarted containers.
- Staging Web image: `xiaoxia-saas-web:staging-f9a934d916cc4e1f1addad472bf90cb5eecffc0c`.
- Staging health: `/login` returned 200; API `/health` returned healthy.
- Local validation: `npm --prefix apps/web run type-check` passed; `npm --prefix apps/web run build` passed.
- Staging Playwright: `auth/subscription/workspace/core-upload/core-titles/core-generation` passed, 6/6.
- Core E2E update: setup uses `E2E_API_BASE` for direct API calls; browser `/api/v1` calls are routed through Playwright; assertions now match V21 asset/title/generation/result UI.
- Staging migration note: lightweight Alembic migration added the `project_titles` table; no build ran on the business server.