188 lines
9.5 KiB
Markdown
188 lines
9.5 KiB
Markdown
# 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 状态补充
|
||
|
||
- 已推送 develop:7e0047c merge: V21 UI alignment。
|
||
- Gitea Actions 页面已出现 develop 运行记录(19:20)。
|
||
- 截至 19:26,staging /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-cli,runner 主机本地无该镜像且外网拉取卡住。
|
||
- 已改为直接在 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 UI,deploy 不应因未变更的 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 workflow:b01ae28 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.
|