63 lines
2.6 KiB
Markdown
63 lines
2.6 KiB
Markdown
# Tiku SaaS Web
|
||
|
||
租户建站与学生端前端。项目是单应用双 Shell:学生端使用 Tailwind CSS,租户后台使用 Ant Design。当前版本优先完成一次性 Owner 激活、建站引导、主题和首页模块配置、预览与发布闭环。
|
||
|
||
## 开发
|
||
|
||
要求 Node.js 24+ 与 npm 11+。
|
||
|
||
```bash
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
默认访问 `http://localhost:5180/__demo`,创建或重置租户并复制一次性激活链接。Mock 数据按开发模拟 Host 保存在浏览器 `localStorage`,刷新页面不会丢失。
|
||
|
||
```bash
|
||
npm test
|
||
npm run check:production
|
||
```
|
||
|
||
## 数据模式
|
||
|
||
复制 `.env.example` 为 `.env.local`:
|
||
|
||
```dotenv
|
||
VITE_DATA_MODE=mock
|
||
VITE_API_BASE_URL=
|
||
```
|
||
|
||
- `mock`:仅 Development 动态加载 MSW;生产构建不会包含 Worker、启动器、示例 Token 或 Mock 状态。
|
||
- `api`:使用同源 `/api`,也可在开发期通过 `VITE_API_BASE_URL` 代理到 .NET API。
|
||
|
||
页面只能调用 `src/api` 下的领域 Client,不能直接调用 `fetch`。前端请求不携带任意 `tenantId`;真实租户由 Host 与受保护 Session 决定。
|
||
|
||
## 路由和权限
|
||
|
||
| 路由 | 行为 |
|
||
| --- | --- |
|
||
| `/` | 学生端;根据 Runtime 的站点状态显示内容、筹备、暂停或域名接入页面 |
|
||
| `/activate/:activationId#token=...` | 一次性 Owner 激活;Token 读入后立即从地址栏移除 |
|
||
| `/manage/login` | 租户后台登录 |
|
||
| `/manage/*` | 必须通过租户 Backoffice Bootstrap;无 Permission 的账号统一显示 404 |
|
||
| `/__demo` | 仅开发环境存在的生命周期启动器 |
|
||
|
||
后台菜单来自 `GET /api/backoffice/tenant/bootstrap`。进入站点设计还必须包含 `tenant:settings:manage`,前端隐藏菜单不能替代后端 401/403。
|
||
|
||
## 前后端契约
|
||
|
||
当前前端 Facade 对齐以下接口:
|
||
|
||
- `GET /api/runtime/bootstrap`
|
||
- `POST /api/browser-auth/activation/complete`
|
||
- `POST /api/browser-auth/login/password`
|
||
- `GET /api/backoffice/tenant/bootstrap`
|
||
- `GET /api/tenant-onboarding/status`
|
||
- `GET|PUT|POST /api/tenant-admin/frontend-config/**`
|
||
|
||
后端目前已有 `/api/auth/activation/complete`,但只返回 204。目标 Browser Auth 激活接口需要在完成密码设置后签发 HttpOnly Session Cookie,并返回当前用户摘要,前端才能安全地自动进入建站向导。
|
||
|
||
## 与旧系统的边界
|
||
|
||
旧 `tiki-web` 仅作为学生业务页面、响应式布局和交互体验的功能参考。本仓库不得引入 PocketBase、`MockBackend`、`tenant.config.ts`,也不得在浏览器保存支付、短信或对象存储 Secret。Logo 的本地 Data URL 仅用于当前前端原型;真实接入时改为后端签发的上传凭证或预签名 URL。
|