Portal 是面向公司员工的 C 端访问入口。员工登录后,使用管理员分配的 OpenClaw 实例进行 AI 对话。
两套用户体系
| 体系 | 表 | 入口 | 权限 |
|---|
| 管理员 | admin_users | admin.sayclaw.ai | 管理服务器、容器、实例、Portal 用户 |
| Portal 用户 | users | app.sayclaw.ai | 查看并使用自己的 OpenClaw 实例 |
实例分配模型
管理员在后台:选择 OC 实例 → 分配给指定员工
员工在前台:查看我的实例 → 点击 → 打开 WebChat
数据库映射:
Portal 前端技术栈
| 层 | 技术 |
|---|
| 框架 | Vue 3 + TypeScript + Vite |
| UI | shadcn/vue |
| Chat 窗口 | OpenClaw WebChat iframe |
| 认证 | Google OAuth(同 admin,独立 JWT) |
| 域名 | app.sayclaw.ai |
| API | portal-api(https://portal-api.sayclaw.ai) |
Portal 页面
| 页面 | 说明 |
|---|
| 登录 | Google OAuth + 账号密码 |
| 我的工作台 | 实例卡片列表(管理员分配的实例) |
| Chat 页面 | 选中实例后打开 OpenClaw WebChat iframe |
| 使用记录 | 本月 token 用量、对话历史 |
| 个人设置 | 修改名称、语言偏好 |
Admin 后台:Portal 用户管理
管理员在 的新增页面:
| 功能 | 说明 |
|---|
| Portal 用户列表 | 查看所有员工账号及状态 |
| 新增 Portal 用户 | 填写邮箱、姓名,发送邀请 |
| 停用账号 | 软删除,立即禁止登录 |
| 分配实例 | 选择员工 → 选择 OC 实例 → 确认分配 |
| 查看用量 | 该员工本月 token 消耗 |
Portal API(portal-api)
路径前缀:
| 接口 | 说明 |
|---|
| POST /auth/login | 账号密码登录 |
| GET /auth/google | Google OAuth 入口 |
| GET /auth/google/callback | OAuth 回调 → JWT |
| GET /me | 当前用户信息 |
| GET /me/instances | 我被分配的 OC 实例列表 |
| GET /me/usage | 使用量(今日 / 本月 token) |
| GET /me/history | 对话历史摘要 |
开发进度
| 里程碑 | 状态 |
|---|
| 用户体系设计(两套) | ✅ 已确认 |
| 实例分配模型 | ✅ 已确认 |
| Portal 前端初始化 | 📋 待开发 |
| Portal 登录页 | 📋 待开发 |
| 我的实例 + WebChat | 📋 待开发 |
| portal-api 实现 | 📋 待开发 |
| Admin 后台:Portal 用户管理页 | 📋 待开发 |
| Admin 后台:实例分配功能 | 📋 待开发 |
| app.sayclaw.ai DNS + Nginx + SSL | 📋 待开发 |