6091d61612b1a54491914cfdfd5802c01484cae7
- 支持每轮提交 1–5 个候选稿并按指定稿验收 - 保留历史轮次只读并兼容单候选稿版本接口 - 同步 SQLite/PostgreSQL schema、迁移验证、测试与项目文档
交付工作台(Delivery Desk)
面向图文作品交付与客户验收的响应式 Web 工作台。业务层级为“运营组 → 项目 → 作品交付集 → 作品 → 验收轮次 → 候选稿”。运营人员负责上传和处理反馈,客户通过项目链接完成查看、批注与验收。
当前能力
- 平台管理员、组管理员、光影叙事三类账号及运营组数据隔离
- 项目、作品交付集、作品和多候选稿验收轮次管理
- 多图上传、封面预览、图片排序和腾讯云 COS 存储
- 图片坐标批注、标题/正文批注、总体反馈和验收记录
- 客户项目密码、访问期限和独立验收入口
- 平台级/项目级 API Key、审计日志和账号管理
- SQLite 本地开发、PostgreSQL 正式运行及迁移脚本
- Docker 单机部署
尚未落地的范围见 初版交接说明。
技术结构
- React 18、TypeScript、Vite、Tailwind CSS
- Express API
- 本地开发:SQLite 与本地
uploads - 正式环境:PostgreSQL、腾讯云 COS
- COS SecretId/SecretKey 由平台管理员在前端配置,服务端使用 AES-256-GCM 加密,接口不返回明文
本地开发
要求 Node.js 22+ 和 pnpm。
pnpm install
pnpm dev
- 前端:
http://localhost:5180 - API:
http://localhost:3010 - 健康检查:
http://localhost:3010/api/health
未配置 DATABASE_URL 时使用 data/app.db;本地图片保存在 uploads/。这两个目录包含运行数据、账号信息或用户文件,已排除在 Git 之外。
SQLite 首次启动会创建开发账号并要求首次登录改密。不要把这些开发账号用于公网环境。
环境配置
复制 .env.example 为 .env,再按环境填写。关键变量:
| 变量 | 用途 |
|---|---|
DATABASE_URL |
PostgreSQL 连接串;留空时使用 SQLite |
PGSSL / PG_POOL_MAX |
PostgreSQL SSL 与连接池配置 |
CORS_ORIGIN |
允许携带凭据访问 API 的前端来源,多个值以逗号分隔 |
COS_CONFIG_ENCRYPTION_KEY |
加密前端保存的 COS 凭证,至少 32 个随机字符 |
INITIAL_ADMIN_PASSWORD |
空 PostgreSQL 首次初始化的平台管理员临时密码 |
COS_CONFIG_ENCRYPTION_KEY 一经用于保存 COS 配置后必须稳定保管,更换会导致旧密文无法解密。真实 COS 凭证不得写入 .env.example、源码、镜像或日志。
PostgreSQL 迁移
pnpm db:postgres:validate
pnpm db:postgres:migrate
目标数据库已有数据时迁移会拒绝覆盖。确认替换时才可执行:
pnpm db:postgres:migrate -- --replace
Docker 部署
在 .env 中至少设置 POSTGRES_PASSWORD、COS_CONFIG_ENCRYPTION_KEY 和 INITIAL_ADMIN_PASSWORD,然后运行:
docker compose up -d --build
应用通过 http://服务器地址:3010 同时提供前端与 API。公网环境应在前面配置 HTTPS 反向代理;生产 Cookie 会自动添加 Secure。
文档与检查
pnpm check
pnpm lint
pnpm build
pnpm test:review-rounds
pnpm test:collection-status
pnpm test:postgres-runtime
pnpm db:postgres:validate
Description
Languages
TypeScript
84.3%
Python
9.4%
PLpgSQL
3.9%
PowerShell
1%
JavaScript
0.6%
Other
0.8%