Files
ttstd-infinite-canvas/DEPLOYMENT_GUIDE.md

213 lines
5.8 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.
# 模型目录开关功能部署指南
## 问题修复
已解决以下问题:
1. ✅ 后端路由未注册 - 已在 `cmd/server/main.go` 中注册 `RegisterModelCatalogRoutes`
2. ✅ 前端初始化仍调用旧接口 - 已修改 `user-session.ts` 在登录和刷新时调用统一目录接口
3. ✅ 前端菜单未根据开关隐藏 - 已修改 `admin-shell.tsx` 根据 `frontendModelsEnabled` 过滤菜单
4. ✅ 路由未拦截直接访问 - 已在 `router.tsx` 中添加 `RequireFeature` 检查
## 部署步骤
### 1. 重新编译后端
```bash
cd /Users/catdd/Desktop/work/infinite-canvas/backend
go build -o bin/server ./cmd/server
```
### 2. 重启后端服务
```bash
# 停止当前服务
pkill -f "infinite-canvas.*server"
# 启动新服务
./bin/server
```
### 3. 验证后端接口
```bash
# 测试统一目录接口
curl http://localhost:3000/api/model-catalog
# 应该返回类似:
# {
# "source": "frontend",
# "models": [...]
# }
```
### 4. 编译前端
```bash
cd /Users/catdd/Desktop/work/infinite-canvas/web
npm run build
```
### 5. 刷新浏览器
清除浏览器缓存并刷新页面,确保加载最新的前端代码。
## 功能测试
### 测试场景 1:前台模型开启(默认)
1. 登录管理后台
2. 进入"功能开放"页面
3. 确认"前台模型"开关为**开启**状态
4. 观察左侧菜单:应显示"前台模型"菜单项
5. 进入创作页面,查看模型选择器:应显示前台模型
6. 创建任务:应使用 `logicalModelId`
### 测试场景 2:关闭前台模型
1. 在"功能开放"页面,点击"前台模型"开关关闭
2. 确认二次确认对话框,点击"确认关闭"
3. 观察左侧菜单:**"前台模型"菜单项应消失**
4. 尝试直接访问 `/admin/models`:应显示"前台模型暂未开放"提示
5. 刷新页面,进入创作页面
6. 查看模型选择器:**应显示系统渠道中的模型**(不再是前台模型)
7. 创建任务:应使用 `channelId + model`(不再有 logicalModelId)
### 测试场景 3:重新开启前台模型
1. 在"功能开放"页面,点击"前台模型"开关开启
2. 观察左侧菜单:应重新显示"前台模型"菜单项
3. 刷新页面,进入创作页面
4. 查看模型选择器:应重新显示前台模型
## 关键验证点
### ✓ 管理后台
- [ ] "管理后台功能"卡片正常显示
- [ ] "前台模型"开关可以正常切换
- [ ] 关闭时显示二次确认对话框
- [ ] 关闭后左侧菜单隐藏"前台模型"项
- [ ] 开启后左侧菜单显示"前台模型"项
### ✓ 用户端(前台模型开启)
- [ ] 模型选择器显示前台模型列表
- [ ] 创建任务时带 `logicalModelId`
- [ ] 任务正常执行
### ✓ 用户端(前台模型关闭)
- [ ] 模型选择器显示系统渠道模型列表
- [ ] 创建任务时带 `channelId + model`,不带 `logicalModelId`
- [ ] 任务正常执行
- [ ] 刷新页面后仍然显示系统渠道模型
### ✓ 接口调用
- [ ] `/api/model-catalog` 返回正确的数据
- [ ] 开启时 `source: "frontend"`
- [ ] 关闭时 `source: "system"`
## 常见问题排查
### 问题1:接口返回 404
**原因**:后端未重启或路由未注册
**解决**:
```bash
# 确认路由注册
grep "RegisterModelCatalogRoutes" /Users/catdd/Desktop/work/infinite-canvas/backend/cmd/server/main.go
# 重新编译并重启
cd backend
go build -o bin/server ./cmd/server
./bin/server
```
### 问题2:关闭开关后仍显示前台模型
**原因**:前端未刷新或浏览器缓存
**解决**:
1. 硬刷新浏览器(Cmd+Shift+R / Ctrl+Shift+F5)
2. 清除浏览器缓存
3. 检查浏览器控制台是否有错误
### 问题3:菜单未隐藏
**原因**:前端代码未更新
**解决**:
```bash
cd web
npm run build
# 清除浏览器缓存并刷新
```
### 问题4:模型选择器为空
**原因**:系统渠道无可用模型或接口异常
**解决**:
1. 检查浏览器控制台网络请求
2. 查看 `/api/model-catalog` 返回的数据
3. 确认系统渠道中有启用且配置价格的模型
## API 对照表
| 场景 | 旧接口 | 新接口 | 返回数据 |
|------|--------|--------|----------|
| 前台模型开启 | `/api/models` | `/api/model-catalog` | `{source:"frontend", models:[...]}` |
| 前台模型关闭 | - | `/api/model-catalog` | `{source:"system", channels:[...]}` |
## 数据流图
### 前台模型开启
```
用户登录
↓
前端调用 /api/model-catalog
↓
后端检查 frontendModelsEnabled = true
↓
返回 {source:"frontend", models:[前台模型]}
↓
前端加载前台模型到选择器
↓
用户创建任务(带 logicalModelId)
```
### 前台模型关闭
```
用户登录
↓
前端调用 /api/model-catalog
↓
后端检查 frontendModelsEnabled = false
↓
返回 {source:"system", channels:[系统渠道模型]}
↓
前端加载系统渠道模型到选择器
↓
用户创建任务(带 channelId + model)
```
## 文件修改清单
### 后端
- ✅ `cmd/server/main.go` - 注册路由
- ✅ `internal/handler/model_catalog.go` - 新增统一目录接口
- ✅ `internal/service/model_catalog.go` - 实现目录逻辑
- ✅ `internal/service/task_creation.go` - 任务创建分流
- ✅ `internal/service/feature_availability.go` - 添加开关
### 前端
- ✅ `services/api/logical-models.ts` - 新增API函数
- ✅ `lib/user-session.ts` - 调用统一目录接口
- ✅ `stores/use-user-store.ts` - 添加类型定义
- ✅ `pages/admin/components/feature-availability-panel.tsx` - 添加开关UI
- ✅ `pages/admin/components/admin-shell.tsx` - 菜单过滤
- ✅ `components/auth/require-feature.tsx` - 添加权限检查
- ✅ `router.tsx` - 路由拦截
## 下一步工作
1. [ ] 数据库迁移(创建 logical_model_price_skus 表)
2. [ ] 编写单元测试
3. [ ] 压力测试
4. [ ] 文档更新
---
**创建时间**: 2026-08-22
**状态**: 待部署测试