P8 平台轻量化改造 + SSG修复 + 编程导师 + 文档完善
- Prisma: Tool 模型加 affiliateLink;免费用户沙盒 10→5 次/日 - 后端: Tools API + /admin/tools CRUD 5 端点;Practices 完整模块 - 导航: 主菜单隐藏企业版/社区(URL 可访问) - 首页: 重定位为 AI 工具指南;新增精选工具区块;Feature 重写 - 工具页: affiliateLink 绿色推荐 Badge - SSG 修复: config.ts 构建时直连 localhost:4000,页面 108→127 - 沙盒: 新增编程导师场景(苏格拉底教学法) - 练习系统: Practices 多场景练习(含结构化评分) - 技能广场: 6 个付费 Skill(标题大师/回款助手等) - 管理后台: Models/Posts/Practices CRUD 页面 - 文档: README + progress.md 全面更新;AGENTS.md 同步定位 - 清理: .env.example 移除;tsbuildinfo gitignore
This commit is contained in:
Executable
+232
@@ -0,0 +1,232 @@
|
||||
# 项目进度追踪
|
||||
|
||||
## 当前阶段:P4 — 支付闭环 + 部署
|
||||
|
||||
### Phase 1-4 — 全部完成 ✅
|
||||
|
||||
### P0 — 全局优化(全部完成 ✅)
|
||||
| 子项 | 说明 | 状态 |
|
||||
|------|------|------|
|
||||
| **P0a** | i18n 基础设施 + 翻译文件 + LanguageProvider + useT hook | ✅ |
|
||||
| **P0b** | UI 统一 — Design Token + 共享组件库 | ✅ |
|
||||
| **P0c** | 逐页翻译 + 语言切换 — 沙盒页面 useT 化 | ✅ |
|
||||
| **P0d** | 会员定价页重构(用量可视化) | ✅ |
|
||||
| **P0e** | 模型选择器升级(卡片式 + 能力标签) | ✅ |
|
||||
| **P0f** | 会话分享链接 — HMAC 签名 + 分享查看页 | ✅ |
|
||||
|
||||
### P1 — 学习技能包(全部完成 ✅)
|
||||
| 子项 | 说明 | 状态 |
|
||||
|------|------|------|
|
||||
| **后端** | SkillsModule + 8 技能定义 + 过滤/详情 API | ✅ |
|
||||
| **前端** | /skills 市场 + /skills/[id] 详情 + header 入口 | ✅ |
|
||||
| **沙盒集成** | 替代硬编码 SCENES,从 API 动态加载,?skill=xxx 支持 | ✅ |
|
||||
|
||||
### P2 — CSS 统一(全部完成 ✅)
|
||||
| 子项 | 说明 | 状态 |
|
||||
|------|------|------|
|
||||
| **Mobile variables.css** | Design Token 变量定义(Web/Mobile 统一) | ✅ |
|
||||
| **Mobile 全站 18 页** | 批量替换 hardcoded color → CSS vars | ✅ |
|
||||
| **PC 响应式** | header/compare/sandbox/member/workshop 移动端修复 | ✅ |
|
||||
|
||||
### P3 — 体验增强(全部完成 ✅)
|
||||
| 优先级 | 项目 | 说明 | 状态 |
|
||||
|--------|------|------|------|
|
||||
| **P4a** | 多模态 — 图片上传 + 沙盒 Vision | ✅ 完成 |
|
||||
| **P4b** | 代码语法高亮 | highlight.js + CodeBlock 组件 | ✅ |
|
||||
| **P3c** | 会话重命名 | PATCH endpoint + 双击编辑 | ✅ |
|
||||
| — | SDK / 共享 UI 包 | 远期规划 | 📋 |
|
||||
|
||||
### P4 — 支付闭环 + 统一网关(已完成 ✅)
|
||||
| 子项 | 说明 | 状态 |
|
||||
|------|------|------|
|
||||
| **P4a** | 统一支付网关集成 — `GatewayPayService` HMAC-SHA256 对接 yzrcloud.cn 网关,支持支付宝/微信 | ✅ |
|
||||
| **P4b** | 会员页双支付按钮 — 支付宝/微信可选,统一走网关 | ✅ |
|
||||
| **P4c** | 网关 Webhook 接收 — `POST /api/v1/payment/gateway/webhook`,处理 `recharge.completed` / `order.refunded` | ✅ |
|
||||
| **P4d** | 管理后台订单增强 — 搜索/分页/渠道筛选/退款弹窗/标记已付 | ✅ |
|
||||
| **P4e** | Mock 降级 — 网关不可达时自动 mock 完成支付,不影响开发 | ✅ |
|
||||
| — | 订阅到期提醒 / 自动续费 | 📋 远期 |
|
||||
|
||||
### P5 — 运营助手(已完成 ✅)
|
||||
| 子项 | 说明 | 状态 |
|
||||
|------|------|------|
|
||||
| **P5a** | 新增 `POST /admin/ai-assistant/chat` 端点 — 管理员专用 AI 聊天 | ✅ |
|
||||
| **P5b** | `AdminAiAssistantService` — 19 个可执行工具定义 | ✅ |
|
||||
| **P5c** | `POST /admin/ai-assistant/action` — 工具执行 + AI 总结 | ✅ |
|
||||
| **P5d** | 前端 Tool Calling 架构 — AI 自动识别意图→调用→解释→展示 | ✅ |
|
||||
| **P5e** | system prompt 动态注入工具列表 | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 部署架构
|
||||
|
||||
### 域名概况
|
||||
|
||||
| 域名 | 类型 | 说明 | 状态 |
|
||||
|------|------|------|------|
|
||||
| **www.yuzhiran.com** | AI 学习平台 | 前端静态导出 + NestJS 后端 | 🟢 线上 |
|
||||
| **trade.yuzhiran.com** | 另一项目(非 AI 平台) | SPA 应用,独立后端 8002 端口 | 🟢 线上 |
|
||||
| **alvnc.yuzhiran.com** | 其他服务 | — | 🟢 线上 |
|
||||
|
||||
### www.yuzhiran.com 部署详情
|
||||
|
||||
```
|
||||
用户 → Nginx (443/80) → /api/* → backend (127.0.0.1:4000)
|
||||
→ /* → static files (/www/wwwroot/www.yuzhiran.com/)
|
||||
```
|
||||
|
||||
| 组件 | 技术栈 | 运行方式 | 端口 |
|
||||
|------|--------|---------|------|
|
||||
| **前端** | Next.js 14 App Router → `output: 'export'` 静态 HTML | Nginx 直接提供 `/www/wwwroot/www.yuzhiran.com/` | 443/80 |
|
||||
| **后端** | NestJS + Prisma + MySQL | PM2 (`yuzhiran-api`) | 4000 |
|
||||
| **数据库** | MySQL 8.0 | systemd (`ai_leaning`) | 3306 |
|
||||
| **Web 服务器** | Nginx (宝塔面板) | systemd | 443/80 |
|
||||
| **支付网关** | yzrcloud.cn 统一网关 | 外部服务 | 8100(内网) |
|
||||
|
||||
**Nginx 配置** (`/www/server/panel/vhost/nginx/www.yuzhiran.com.conf`):
|
||||
- 静态资源 `/` → `try_files $uri $uri.html $uri/index.html =404`
|
||||
- API 代理 `/api/` → `proxy_pass http://127.0.0.1:4000`
|
||||
- 静态资源缓存: `_next/static/` 365 天, 图片 30 天, JS/CSS 12 小时
|
||||
|
||||
**部署流程**:
|
||||
```bash
|
||||
# 前端
|
||||
cd frontend && npm run build # 生成 out/
|
||||
cp -r out/* /www/wwwroot/www.yuzhiran.com/
|
||||
|
||||
# 后端
|
||||
cd backend && npm run build # 生成 dist/
|
||||
pm2 restart yuzhiran-api
|
||||
```
|
||||
|
||||
### trade.yuzhiran.com(独立项目)
|
||||
|
||||
非 AI 学习平台项目,独立部署:
|
||||
- 前端 SPA (React),root at `/www/wwwroot/trade.yuzhiran.com/`
|
||||
- 后端 API at `127.0.0.1:8002`
|
||||
- 路由: `/admin/` → SPA fallback, `/workspace/` → SPA fallback
|
||||
|
||||
---
|
||||
|
||||
## 支付对接
|
||||
|
||||
### 架构总览
|
||||
|
||||
```
|
||||
前端 (会员页) → POST /orders/create → GatewayPayService → HMAC-SHA256 → yzrcloud.cn 网关
|
||||
├── 支付宝 PC 网站
|
||||
└── 微信 Native 扫码
|
||||
网关回调 → POST /api/v1/payment/gateway/webhook → 更新订单 + 激活订阅
|
||||
```
|
||||
|
||||
### 统一支付网关对接参数
|
||||
|
||||
| 参数 | 值 | 来源 |
|
||||
|------|-----|------|
|
||||
| 网关地址(内网) | `http://localhost:8100` | `.env` |
|
||||
| 网关地址(外网) | `https://www.yzrcloud.cn/api/gateway` | 未启用 |
|
||||
| API Key | `pay_2ac89d9831244c2ebdbb2a24` | AI学习平台.key |
|
||||
| API Secret | `6a2e6c6801384bd0800849ef42ad5e8ef51898819895478a` | AI学习平台.key |
|
||||
| 签名算法 | HMAC-SHA256 | `sign_str = "{method}\n{path}\n{timestamp}\n{body_sha256}"` |
|
||||
| Webhook | `POST /api/v1/payment/gateway/webhook` | 后端接收 |
|
||||
| 支付方式 | `alipay` / `wechat` | 网关统一处理 |
|
||||
| Mock 模式 | `GATEWAY_PAY_MOCK=true` | 开发环境启用 |
|
||||
|
||||
### 后端对接文件
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `backend/src/modules/payment/gateway-pay.service.ts` | 核心网关服务,HMAC 签名 + 下单/查询/退款/Webhook |
|
||||
| `backend/src/modules/payment/payment.controller.ts` | `/api/v1/payment/gateway/webhook` 等端点 |
|
||||
| `backend/src/modules/orders/orders.service.ts` | 下单路由,统一走网关 |
|
||||
| `backend/.env` | `GATEWAY_PAY_*` 配置项 |
|
||||
|
||||
### API 端点一览
|
||||
|
||||
| 方法 | 路径 | 说明 | 认证 |
|
||||
|------|------|------|------|
|
||||
| POST | `/api/v1/payment/gateway/webhook` | 网关支付成功/退款回调 | 无(网关签名在 body 中) |
|
||||
| GET | `/api/v1/payment/wxpay/query?outTradeNo=xxx` | 订单状态查询(转网关) | JWT |
|
||||
| POST | `/api/v1/payment/wxpay/refund` | 退款(转网关) | JWT |
|
||||
| POST | `/api/v1/orders/create` | 创建订单+发起支付 | JWT |
|
||||
| GET | `/api/v1/admin/orders?page=&search=&status=&payChannel=` | 管理员订单搜索 | Admin JWT |
|
||||
| POST | `/api/v1/admin/orders/:orderNo/refund` | 管理员退款 | Admin JWT |
|
||||
| POST | `/api/v1/admin/orders/:orderNo/mark-paid` | 标记人工已付 | Admin JWT |
|
||||
|
||||
### 商户密钥文件
|
||||
|
||||
备份位置: `/root/hermes-workspace/backup/网关支付/pay-api/merchants/AI学习平台.key`
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-31 Session (下午)
|
||||
|
||||
### Changes Made
|
||||
- **AI 助手架构升级**: 用户端 + 管理后台双 AI 助手均采用完整 Tool Calling 架构
|
||||
- **新增 `UserAiAssistantService`**: 后台工具执行服务,18 个工具(搜索/技能/学情/通知/个人信息/模型/提示词/课程/订单)
|
||||
- **新增 `AiAssistantController`**: `POST /api/v1/ai-assistant/chat` + `/action` 端点
|
||||
- **新增 `AiAssistantModule`**: 注册 SkillsModule + AIModule 依赖
|
||||
- **重写前端 `ai-assistant.tsx`**: Tool Calling 架构 + 页面感知上下文 + 登录控制
|
||||
- **更新前端 `admin-ai-assistant.tsx`**: 新增 search/mark-all-notifications-read 工具描述 + 更多 starter
|
||||
- **新增后台 `search`/`mark-all-notifications-read` 工具**: 全局搜索用户/订单/课程/内容 + 通知批量已读
|
||||
- **重构 `assistant-actions.ts`**: 统一 `executeClientAction()` API,支持所有客户端操作
|
||||
- **清理 `assistant-context.ts`**: 精简为纯上下文数据源,移除旧 action 格式
|
||||
|
||||
### 用户端 AI 助手可用操作
|
||||
| 分类 | 工具 |
|
||||
|------|------|
|
||||
| 🧭 导航 | `navigate` — 跳转到任意页面 |
|
||||
| 🔍 搜索 | `search` — 全局搜索课程/提示词/工具/文章 |
|
||||
| 🎯 技能 | `list-skills` / `get-skill` / `get-skill-categories` |
|
||||
| 📊 学情 | `get-learning-analytics` / `get-learning-path` |
|
||||
| 🔔 通知 | `list-notifications` / `get-unread-count` / `mark-notification-read` / `mark-all-read` |
|
||||
| 👤 个人 | `get-profile` / `list-user-orders` / `get-current-subscription` |
|
||||
| 📚 内容 | `list-models` / `list-prompts` / `list-courses` |
|
||||
| ⚡ 客户端 | `setModel` / `startChat` / `openSkill` / `setParameter` |
|
||||
|
||||
### 管理后台新增工具
|
||||
| 工具 | 说明 |
|
||||
|------|------|
|
||||
| `search` | 全局搜索用户/订单/课程/内容 |
|
||||
| `mark-all-notifications-read` | 批量标记所有通知已读 |
|
||||
|
||||
### Verification
|
||||
- ✅ 后端 92 项测试全部通过
|
||||
- ✅ 后端 TypeScript 编译无错误
|
||||
- ✅ 前端 83 静态页面全部生成成功(含 8 个 /practices/[id] 页面)
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-10 Session (续) — ¥9.9 用量包 + 企业版 MVP
|
||||
|
||||
### ¥9.9 用量包系统
|
||||
- **User 模型**: 新增 `sandboxExtra Int @default(0)` 字段(购买的额外配额)
|
||||
- **配额逻辑改造** (`SandboxService`): 优先消耗每日免费 → 不足时扣除 `sandboxExtra`;`getQuota()` 返回 `dailyRemaining` + `extra` + `totalRemaining`
|
||||
- **Orders 支持 `PACKAGE`**: `completeMockPayment()` 检测 `PACKAGE` 时按金额增加 extra 配额(¥9.9→50次, ¥49→300次)
|
||||
- **前端沙盒**: 配额显示双层(今日已用 + 剩余额外),超限跳转购买页
|
||||
- **新增 `/practices/packages`**: 三档用量包购买页(¥4.9/10次, ¥9.9/50次, ¥49/300次),复用现有支付流程
|
||||
|
||||
### 企业版 MVP
|
||||
- **后端**: 11 enterprise API 端点 + Organization/OrganizationMember 模型 + 完整 CRUD(已有)
|
||||
- **新增 `/enterprise`**: 营销着陆页 — Shadow AI 数据隔离故事、六大功能、定价、FAQ
|
||||
- **新增 `/enterprise/dashboard`**: 团队管理后台 — 创建组织/邀请成员/使用报告
|
||||
- **Header 导航**: 新增「企业版」入口
|
||||
- **i18n**: 完整 `enterprise.*` 翻译 keys
|
||||
|
||||
### Files Created
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `frontend/src/app/practices/packages/page.tsx` | 用量包购买页 |
|
||||
| `frontend/src/app/enterprise/page.tsx` | 企业版营销着陆页 |
|
||||
| `frontend/src/app/enterprise/dashboard/page.tsx` | 团队管理后台 |
|
||||
|
||||
### Verification
|
||||
- ✅ 后端 92 项测试全部通过
|
||||
- ✅ Prisma migrate 成功
|
||||
- ✅ 前端 86 个静态页面全部生成成功
|
||||
- ✅ Header 导航已更新(练习 + 企业版)
|
||||
- ✅ i18n 中英文完整翻译
|
||||
|
||||
### Verification
|
||||
- ✅ 后端 92 项测试全部通过
|
||||
- ✅ 后端 TypeScript 编译无错误
|
||||
- ✅ 前端 75 静态页面全部生成成功
|
||||
Reference in New Issue
Block a user