Commit Graph

25 Commits

Author SHA1 Message Date
zwt13703 3cd26b9e79 chore: gitignore .vite 2026-07-06 20:13:49 +08:00
zwt13703 a8604ebc34 feat: 模型测试功能 - 测试模型配置是否可用
- API: POST /api/v1/models/{id}/test 发送简单提示词验证模型连通性
- 前端: 模型列表新增测试按钮(实验图标),弹窗显示结果或错误详情
- 帮助用户快速定位配置问题(如 endpoint、api_key、model 参数错误)
2026-07-06 20:13:44 +08:00
zwt13703 ba2171e13e fix: 编辑回显 - 移除 destroyOnClose + setTimeout 延迟赋值
- 移除 Modal destroyOnClose 和 Form preserve={false},避免 DOM 生命周期冲突
- useEffect 内 setTimeout(fn, 0) 延迟到下一 tick,确保 Form 已挂载
- onCancel 时手动 form.resetFields()
2026-07-06 18:45:21 +08:00
zwt13703 e2133165b0 fix: 编辑回显问题 - setFieldsValue 改为 useEffect 在 Modal 打开后执行
- destroyOnClose 导致 Form 在 Modal 关闭时销毁,setFieldsValue 提前调用无效
- 改为 useEffect 监听 modalOpen,Modal 打开后延迟设置表单值
2026-07-06 18:41:12 +08:00
zwt13703 3a184742dc fix: 修复重复闭合括号 + 清除未使用变量 refFile 2026-07-06 18:34:25 +08:00
zwt13703 ae61eba662 chore: add backend/.vite to gitignore 2026-07-06 18:27:37 +08:00
zwt13703 57cdb01ec8 feat: 生成点表单重构 - 参考文件改为开关 + 备注字段
- 模型新增 need_ref_file(bool) + remark(text) 字段
- 生成点创建表单移除直接上传,改为「需要参考文件」开关 + 备注文本框
- 测试按钮:检测 need_ref → 弹出文件选择 → 上传后提取文本 + 调AI
- 生成任务:检查 ref_file_path,有则提取文本并入 prompt
- 前后端完整联调,TypeScript 零错误
2026-07-06 18:27:30 +08:00
zwt13703 c11ea22e88 fix: 占位符替换 - 新增 selected_text 字段彻底解决位置偏移问题
- 新增 generation_points.selected_text 字段存储用户实际选中的文本
- 生成任务优先使用 selected_text 直改 docx,不再依赖脆弱的位置偏移
- 前端创建生成点时同时传递选中文本内容
- 原始 docx 直改方案完美保留所有样式(加粗/标题/表格)
- 端到端验证: {{ placeholder }} → AI 内容替换成功,样式不变
2026-07-06 18:20:00 +08:00
zwt13703 e937449e6a fix: 样式丢失问题 - 生成任务改为直改原始 docx 保留样式
- generate.py: 直接加载原始 docx 用 python-docx 替换文本,不再经过 HTML→docx
- html_to_docx: 增强支持 bold/italic/heading 等基本格式
- text替换: 支持段落内 runs 和表格 cell 内的文本替换
- 结果: AI 内容正确插入,字体/加粗/标题等原始样式完全保留
2026-07-06 17:53:15 +08:00
zwt13703 3db8208c55 fix: Celery 异步任务 event loop 冲突修复
- 原因: 全局 async_session_factory 绑定在 Celery 主进程 event loop
- Celery fork worker 后创建新 loop,旧 connection 绑定冲突
- 修复: 每个任务内创建独立 async engine + session factory
- 任务完成后 dispose engine 释放连接
2026-07-06 17:45:05 +08:00
zwt13703 40b861cfcc fix: 核心 bug 修复 - API Key 加密/解密 + AI 调用 + 数据安全
- schema: 用 @field_serializer 掩码 api_key,不再直接修改 SQLAlchemy 对象
- API: 移除所有 model.api_key='***' 赋值,防止数据库被覆盖
- security: SHA256(SECRET_KEY) 派生合法 Fernet 32 字节密钥
- ai_adapter: CustomAdapter 改用 OpenAI-compatible messages 格式
- ai_adapter: trust_env=False 防止代理干扰,增加详细异常信息
- templates: bleach HTML 净化防止 XSS
- .env.example: CORS_ORIGINS 修复为 JSON 数组格式
- 端到端验证:单点测试 + 异步生成任务均通过
2026-07-06 17:26:32 +08:00
zwt13703 aeff8753ec feat: 补充完善 - 拖拽排序 + 系统设置 + 安全加固 + 文档更新
- 生成点拖拽排序: HTML5 Drag & Drop + batch-order API 持久化
- 系统设置 API: GET/PUT /api/v1/settings,前端接入 system_config 表
- 安全加固: bleach HTML 净化(XSS防护),文件类型白名单,上传大小限制
- 修复 Fernet 密钥: SHA256 派生合法 32 字节密钥
- README 更新: 修正技术栈版本,补充生产/开发部署步骤
2026-07-06 17:16:31 +08:00
zwt13703 c4c2b44434 fix: Fernet 密钥派生使用 SHA256 哈希生成合法 32 字节密钥
- 原因: key.ljust(44, b'=') 不产生合法的 Fernet 密钥
- 修复: SHA256(SECRET_KEY) → base64url 编码 → 有效 Fernet key
2026-07-06 17:03:55 +08:00
zwt13703 f0d61d5887 docs: 更新任务摘要 - 阶段五 2026-07-06 16:57:13 +08:00
zwt13703 017a19515c feat: 阶段五 - 部署上线与安全加固
- Dockerfile: backend (FastAPI), celery-worker, web (多阶段构建 + Nginx)
- docker-compose.yml: 完整 5 服务编排 (postgres + redis + backend + celery + nginx)
- Nginx 反向代理配置 + gzip 压缩 + API 代理
- 安全增强: 请求大小限制、文件类型白名单(.docx/.txt/.pdf)、安全中间件
- .dockerignore: 排除 venv/node_modules 等
- .env.example: 精简为生产关键变量
- package.json: postinstall 自动复制 TinyMCE 自托管文件
- deploy.sh: 一键部署脚本
2026-07-06 16:57:00 +08:00
zwt13703 5fecbab6bf fix: TinyMCE 恢复自托管 + GPL license_key 解决激活问题
- 恢复 tinymceScriptSrc 自托管引用 (/tinymce/tinymce.min.js)
- 添加 license_key: 'gpl' 支持内网部署免激活
- 恢复 public/tinymce/ 和 .gitignore 规则
2026-07-06 16:53:11 +08:00
zwt13703 d4349df507 fix: TinyMCE 从自托管切换到 CDN 模式 (apiKey=no-api-key)
- 移除 tinymceScriptSrc 自托管引用,改用云端 CDN
- 添加 apiKey='no-api-key' 开发者模式
- 清理 public/tinymce 目录和相关 .gitignore 规则
2026-07-06 16:48:54 +08:00
zwt13703 d8e497a33b docs: 更新任务执行摘要 2026-07-06 16:43:21 +08:00
zwt13703 0b23858159 chore: 修复 docker-compose 镜像版本 + 添加 Alembic 初始迁移
- postgres:18.3 -> postgres:16-alpine (18.3 尚未发布)
- 移除废弃的 version 字段
- 添加初始数据库迁移脚本
2026-07-06 16:43:05 +08:00
zwt13703 985a86154a feat: 阶段四 - 前端完整交互实现
- API 层: axios 封装 + 模型/模板/生成点/任务 4 组 API 调用
- TypeScript 类型定义 (AIModel, Template, GenerationPoint, GenerationTask)
- 模型管理页面: 表格列表 + 新增/编辑/删除弹窗 + 启用切换
- 模板列表页面: 表格 + 上传 docx + 在线编辑/下载/删除
- 模板编辑器(核心): TinyMCE 自托管 + 选区监听标注 + 浮动按钮创建生成点
  + 右侧生成点面板(测试/编辑/删除) + 触发生成任务 + 实时进度轮询 + 结果下载
- 任务历史页面: 状态标签 + 下载结果 + 取消任务
- 系统设置页面: 默认模型/并发/超时配置
- Vite 配置 API 代理 (3000->8000)
- TypeScript 编译零错误, Vite 构建成功
2026-07-06 16:32:16 +08:00
zwt13703 afabb6446a feat: 阶段三 - 异步任务与 AI 集成
- AI 调用适配器:工厂模式,支持 openai/azure/custom 三种供应商
- 参考文件解析器:提取 txt/docx/pdf 文本内容
- Celery 配置与生成任务:模板加载→生成点排序→参考解析→AI调用→HTML插入→文档保存
- 任务管理 API:触发/状态查询/结果下载(docx+pdf)/取消/列表
- 单点测试 API:生成点预览不保存文档
- 23 个 API 端点全部注册
2026-07-06 16:28:00 +08:00
zwt13703 aa84521449 feat: 阶段二 - 核心业务 API 实现
- Pydantic Schemas: AIModel, Template, GenerationPoint, GenerationTask
- 文档处理服务: docx↔HTML (Mammoth), docx→PDF (reportlab)
- AI 模型管理 API: CRUD + 启用/禁用切换 + API Key 加密
- 模板管理 API: 上传/转换HTML/在线编辑保存/下载(docx+pdf)
- 生成点管理 API: CRUD + 参考文件上传 + 批量排序
- 17 个 API 端点注册,后端启动验证通过
2026-07-06 16:18:23 +08:00
zwt13703 b5fa343bf8 feat: 阶段一 - 项目基础设施搭建
- 创建前后端项目目录结构
- docker-compose.yml (Postgres 18.3 + Redis 7)
- 后端:FastAPI + SQLAlchemy 异步引擎 + Alembic 迁移
- 5个ORM模型:AIModel, Template, GenerationPoint, GenerationTask, SystemConfig
- 核心模块:config, database, security(Fernet加密), file_storage
- 前端:Vite + React 18 + TS + Ant Design + React Router
- 侧边栏布局 + 5个占位页面
2026-07-06 16:16:23 +08:00
zwt13703 cc57cd1689 init 2026-07-06 15:38:24 +08:00
zhouwentao c95b4a6ad6 Initial commit 2026-07-06 15:13:00 +08:00