- 新增 BUG_TRACKER.md 记录已修复和开放的bug - 新增 TEST_EXECUTION_2026-04-30.md 自动化测试执行报告 - 新增 TEST_PROGRESS.md 测试进度跟踪文档 - 修复 Android SDK connectedCheck 内存不足问题 - 修复 Android sample-app CAMERA 权限 lint 失败 - 修复 Android UpdateSDK longVersionCode minSdk lint 失败 - 修复 RN Chat Demo Jest 无法解析本地 SDK 源码包 - 修复 Python Server SDK 回调消息解析与顶层导出错误 - 修复 Vue3 SDK package exports 条件顺序警告 - 修复 im-service 群消息不进入会话聚合列表问题 - 修复 im-service 对外时间字段单位不一致问题 - 修复 RN SDK 历史消息 upsert 丢失回推状态问题 - 修复 Android 黑名单操作静默失败问题 - 修复 AppSecret 调用无鉴权安全问题 - 修复 IM Token 无过期信息问题 - 修复 RN SDK 草稿同步服务端数据污染问题 - 修复 Vue3 SDK 撤回编辑后依赖 WS 刷新延迟问题 - 修复 im-service 消息摘要不支持媒体类型问题 |
||
|---|---|---|
| docs | ||
| docs-site | ||
| nginx | ||
| ops-platform | ||
| tenant-platform | ||
| .gitignore | ||
| .nvmrc | ||
| Dockerfile | ||
| Jenkinsfile | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| yarn.lock | ||
XuqmGroup Web 前端文档
当前推荐阅读入口:
/docs/web/README.md
仓库内联调文档:docs/ACCESS.md
该文档保留为仓库内说明,线上访问地址、初始化管理员账号与最新前端联调信息请以最新文档为准。
Vue 3.5 · TypeScript · Vite 6 · Element Plus 2.9 · Pinia 3
工程结构
XuqmGroup-Web/
├── package.json # Yarn Workspace 根配置
├── tenant-platform/ # 租户开放平台 :5173
└── ops-platform/ # 运营管理平台 :5174
启动
cd XuqmGroup-Web
yarn install
# 分别启动(两个终端)
yarn workspace tenant-platform dev
yarn workspace ops-platform dev
租户开放平台(tenant-platform):5173
用户自助注册、管理应用、配置功能服务的对外平台。
路由结构
| 路径 | 组件 | 说明 |
|---|---|---|
/login |
LoginView | 登录(图形验证码) |
/register |
RegisterView | 注册(邮箱验证码 60s 倒计时) |
/forgot-password |
ForgotPasswordView | 忘记密码 |
/dashboard |
DashboardView | 控制台首页(需登录) |
/apps |
AppListView | 应用列表(需登录) |
/apps/:id |
AppDetailView | 应用详情(需登录) |
/accounts |
SubAccountView | 子账号管理(需登录) |
认证流程
登录 → POST /api/auth/login → 获得 JWT
↓
Pinia authStore.setToken(jwt)
↓
localStorage 持久化
↓
axios 拦截器自动附加 Authorization: Bearer <jwt>
↓
401 响应 → 清除 Token → 跳转 /login
API 模块(src/api/)
| 文件 | 接口 | 说明 |
|---|---|---|
auth.ts |
authApi |
验证码、注册、登录、找回密码 |
app.ts |
appApi |
应用 CRUD |
account.ts |
accountApi |
子账号管理 |
Pinia Store
authStore(src/stores/auth.ts)
const auth = useAuthStore()
auth.token // JWT 原始字符串
auth.payload.sub // 租户 ID
auth.payload.username
auth.payload.nickname
auth.payload.type // MAIN | SUB
auth.setToken(jwt) // 登录后调用
auth.logout() // 清除并跳转 /login
JWT Payload 由 atob(token.split('.')[1]) 解析,无需额外请求。
应用详情页(AppDetailView)
- 平台 Tab 切换:
ANDROID/IOS/HARMONY - 每个平台下显示
IM/推送/版本管理三个服务卡片 - 支持一键开关服务、复制 secretKey、重新生成 secretKey
子账号管理(SubAccountView)
创建子账号两步流程:
- 输入邮箱 → 发送验证码 → 验证通过(Redis 标记 24h 有效)
- 填写账号信息 → 创建子账号
运营管理平台(ops-platform):5174
内部使用,管理所有租户、查看统计数据。独立账号体系。
路由结构
| 路径 | 组件 | 说明 |
|---|---|---|
/login |
LoginView | 运营管理员登录 |
/tenants |
TenantListView | 租户列表(搜索/分页/启用禁用) |
/statistics |
StatisticsView | 数据统计 |
认证
localStorage 存储 ops_token(与租户平台 token 隔离)。
API 请求通过 src/api/client.ts 中的 axios 实例统一附加,401 跳回 /login。
租户管理功能
- 关键词搜索(用户名/邮箱)
- 分页展示(每页 20 条)
- 类型标签:主账号(蓝色)/ 子账号(灰色)
- 状态标签:正常(绿色)/ 禁用(红色)
- 一键启用/禁用
统计卡片
| 指标 | 接口字段 |
|---|---|
| 总租户数 | totalTenants |
| 今日新增 | todayNew |
| 活跃应用 | activeApps |
| 在线用户 | onlineUsers |
环境变量
在各平台根目录创建 .env.local:
# tenant-platform
VITE_API_BASE_URL=https://api.xuqm.com/api
# ops-platform
VITE_API_BASE_URL=https://api.xuqm.com/api
未设置时默认代理到 http://localhost:8081(Vite dev server proxy)。
构建部署
# 构建
yarn workspace tenant-platform build
yarn workspace ops-platform build
# 产物在各平台的 dist/ 目录,部署至 Nginx 或 CDN
Nginx 配置示例(SPA history 模式):
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://127.0.0.1:8081/api/;
}