Initial project baseline

This commit is contained in:
2026-07-04 02:40:45 +08:00
commit d5d8caef2f
86 changed files with 15590 additions and 0 deletions
+84
View File
@@ -0,0 +1,84 @@
# 更新日志
## 2026-06-13 — 从词云生成器升级为完整创作工作流
> 本次更新在原有「词云生成」核心能力之上,**完整新增了「模板中心」与「画布工作室」两大模块**。系统从一个单纯的词云生成工具,升级为支持「选模板 → 生成词云 → 拖拽排版 → 导出成品」的一站式创作平台。
---
## 🆕 新增:模板中心(TemplateHome
- **模板展示页面**:新增独立的模板中心入口,可浏览、筛选、管理设计模板。
- **模板预览弹窗**:点击模板缩略图弹出预览窗口,并支持在弹窗内**切换多张预览图**查看,而非固定单张大图。
- **异步 SVG 预览生成**:模板弹窗中的预览图改为异步生成,避免阻塞主线程,提升打开速度。
- **模板 CRUD 接口**:后端新增 `/api/design-templates` 相关接口,支持模板的上传、更新、删除。
---
## 🆕 新增:画布工作室(CanvasStudio
- **独立画布编辑器**:新增完整的可视化画布页面,支持多图层自由排版。
- **词云作为贴纸导入**:生成的词云可一键作为贴纸插入画布,支持拖拽移动、缩放、旋转。
- **贴纸库面板**:新增贴纸库,可浏览、上传、删除贴纸资源。
- **组内元素联动缩放**:当调整词云大小时,同组内的底图/背景元素会按相同比例同步缩放,保持整体构图一致。
- **SVG 导出自动内联后端资源**:导出成品 SVG 时,自动从后端拉取贴纸、底图等资源并转为 data URL 内嵌,确保导出的文件独立可用、图片不会缺失。
- **图层导出 ZIP**:支持按图层批量导出资源包。
---
## 🆕 新增:后端贴纸库(完全替代 localStorage
- **贴纸文件全部迁移到后端**:原先贴纸存在浏览器 `localStorage`,容易触发 `QuotaExceededError` 并导致贴纸丢失;现在统一通过 `/api/assets` 接口存取,文件保存在服务器。
- **资源类型体系**:后端 `/api/assets` 支持 `wordcloud` / `upload` / `shape` / `sticker` 等类型。
- **元数据 + 文件分离**:贴纸的元数据存在后端 JSON,文件存在后端磁盘,前端仅保存轻量引用。
---
## 🔧 问题修复
| 问题 | 原因 | 修复方案 |
|------|------|----------|
| 词云导入画布时生成两个重复贴纸 | React StrictMode 双重触发 effectpending 状态未提交就被二次消费 | 增加 `importingStickerRef` 引用锁,防止同一词云重复导入 |
| 调整词云大小时底图不同步缩放 | resize handler 只更新被拖拽的元素 | 记录 `groupId` 与组内元素初始尺寸,按比例同步缩放同组伙伴 |
| 导出的 SVG 图片错误/缺失 | `serializeDocument` 把后端 URL 当作 SVG 文本处理 | 将 `serializeDocument` 改为异步,fetch 后端资源并内联为 data URL |
| 贴纸/词云上传报 413 | Nginx 默认 `client_max_body_size` 仅 1MB | 前端 Nginx 配置 `client_max_body_size 100M` |
| 生成任务进度连接超时断开 | Nginx 默认 60 秒 read timeout | Nginx 配置 `proxy_read_timeout` / `proxy_send_timeout` 3600 秒,关闭 buffering |
| Docker 部署后词云任务失败 | release 包漏掉 `wordcloud_generate_hybrid.py` | 补回脚本并在 `backend/Dockerfile` 中显式复制 |
---
## 🐳 新增:Docker Compose 一键部署
- **新增 `docker-compose.yml`**:编排 frontend + backend 服务,含健康检查与 5 个持久化卷。
- **新增 `frontend/Dockerfile`**Node 多阶段构建 → Nginx 静态服务。
- **新增 `backend/Dockerfile`**Python 3.10 + 编译 `EfficientWordCloud` C++ 扩展,healthcheck 已安装 `curl`
- **新增 `frontend/nginx.conf`**:静态资源服务、`/api` 反向代理、SSE 长连接优化、大文件上传支持。
- **新增 `frontend/.dockerignore``backend/.dockerignore`**:避免构建时带入 `node_modules``.venv``__pycache__` 等。
### 便捷命令
- **新增 `Makefile`**
- `make build` / `make up` / `make down`
- `make logs` / `make logs-backend` / `make logs-frontend`
- `make restart` / `make clean` / `make shell-backend`
### 部署文档
- **新增 `DOCKER.md`**:环境要求、快速开始、数据持久化说明、端口配置、常见问题排查。
### Release 包
- **新增 `release/` 目录与 `release.tar.gz`**:仅包含源代码 + Docker 部署所需文件(已排除 `node_modules``.venv`、编译产物、测试输出等)。
- 包大小约 28 MB(主要为 `backend/assets/fonts/STHeiti Medium.ttc` 字体文件)。
---
## 📦 依赖
- 后端 `requirements.txt` 新增 `fastapi>=0.136.0``uvicorn[standard]>=0.32.0``python-multipart>=0.0.27``pydantic>=2.10.0``pillow>=10.0.0``numpy>=2.0.0``matplotlib>=3.10.0``pandas>=2.0.0``openpyxl>=3.1.0`
- 前端保持 React 18 + Vite 5 技术栈,新增 `xlsx` 用于 Excel 解析。
---
## 📝 其他说明
- **数据持久化**Docker Compose 使用 5 个命名卷保存任务工作区、贴纸资源、项目文件、设计模板、上传字体,容器重建不会丢失用户数据。
- **API 调用**:前端统一使用相对路径 `/api/*`,本地开发由 Vite 代理到 `localhost:8000`,生产环境由 Nginx 代理到后端容器。
- **原有词云生成功能保留**`TestWorkbench` 作为原始生成工作台继续可用,新增强的模板中心与画布工作室与其并行。