fix(plan): P3 补全 Account/Job/Audit 管理页面
This commit is contained in:
parent
0969dbc3d1
commit
eceaaedf35
@ -22,7 +22,7 @@
|
||||
|
||||
```bash
|
||||
mkdir -p muse-admin/apps/web-antd/src/views/{governance,ai,knowledge,market,account,jobs,audit}
|
||||
mkdir -p muse-admin/apps/web-antd/src/api/muse/{governance,ai,knowledge,market,account,jobs}
|
||||
mkdir -p muse-admin/apps/web-antd/src/api/muse/{governance,ai,knowledge,market,account,jobs,audit}
|
||||
```
|
||||
|
||||
- [ ] **Step 2: 检查现有结构**
|
||||
@ -227,6 +227,184 @@ git add -A && git commit -m "feat(governance): 实现 MetaSchema 列表页(Vbe
|
||||
|
||||
---
|
||||
|
||||
### Task 2.6: Account 管理页面
|
||||
|
||||
**文件:**
|
||||
- 创建: `apps/web-antd/src/api/muse/account/index.ts`
|
||||
|
||||
**页面清单:**
|
||||
|
||||
| 页面 | 路由 | 说明 |
|
||||
|------|------|------|
|
||||
| 用户权益列表 | `/account/entitlements` | 表格:用户 + 权益类型 + 上限 + 已用 + 过期时间 |
|
||||
| 配额调整表单 | `/account/quota-adjustments` | 弹窗:用户 + 资源类型 + 调整量 + 原因 + commandId |
|
||||
| New-API 绑定状态 | `/account/new-api-bindings` | 表格:用户 + 绑定状态 + 同步状态 |
|
||||
| 购买/使用记录 | `/account/records` | 只读汇总表格 |
|
||||
|
||||
**API endpoints:**
|
||||
|
||||
```
|
||||
GET /admin-api/muse/account/users # 用户列表
|
||||
GET /admin-api/muse/account/users/{userId}/entitlements # 用户权益
|
||||
POST /admin-api/muse/account/users/{userId}/quota-adjustments # 配额调整
|
||||
GET /admin-api/muse/account/new-api-bindings # New-API 绑定状态
|
||||
```
|
||||
|
||||
**代码示例 — API service:**
|
||||
|
||||
```typescript
|
||||
// apps/web-antd/src/api/muse/account/index.ts
|
||||
import { museAdminApi } from '../client';
|
||||
|
||||
export interface UserEntitlement {
|
||||
userId: string;
|
||||
entitlementType: string;
|
||||
limit: number;
|
||||
used: number;
|
||||
expiry: string;
|
||||
}
|
||||
|
||||
export interface QuotaAdjustment {
|
||||
userId: string;
|
||||
resourceType: string;
|
||||
adjustmentAmount: number;
|
||||
reason: string;
|
||||
commandId: string;
|
||||
}
|
||||
|
||||
export function getAccountUsers(params: { pageNo: number; pageSize: number }) {
|
||||
return museAdminApi.get<{ total: number; list: any[] }>('/account/users', params);
|
||||
}
|
||||
|
||||
export function getUserEntitlements(userId: string) {
|
||||
return museAdminApi.get<UserEntitlement[]>(`/account/users/${userId}/entitlements`);
|
||||
}
|
||||
|
||||
export function adjustQuota(userId: string, data: QuotaAdjustment) {
|
||||
return museAdminApi.post<void>(`/account/users/${userId}/quota-adjustments`, data);
|
||||
}
|
||||
|
||||
export function getNewApiBindings(params: { pageNo: number; pageSize: number }) {
|
||||
return museAdminApi.get<{ total: number; list: any[] }>('/account/new-api-bindings', params);
|
||||
}
|
||||
```
|
||||
|
||||
### Task 2.7: 任务监控页面
|
||||
|
||||
**文件:**
|
||||
- 创建: `apps/web-antd/src/api/muse/jobs/index.ts`
|
||||
|
||||
**页面清单:**
|
||||
|
||||
| 页面 | 路由 | 说明 |
|
||||
|------|------|------|
|
||||
| 任务列表 | `/jobs` | 表格:job ID + 类型 + 状态 + 创建时间 + 重试次数 |
|
||||
| 任务详情 | `/jobs/:jobId` | 状态 + 失败原因 + 重试/取消按钮 |
|
||||
| 源事件列表 | `/jobs/source-events` | 表格:事件类型 + 来源 + 状态 + 影响摘要 |
|
||||
|
||||
**API endpoints:**
|
||||
|
||||
```
|
||||
GET /admin-api/muse/jobs # 任务列表
|
||||
GET /admin-api/muse/jobs/{jobId} # 任务详情
|
||||
POST /admin-api/muse/jobs/{jobId}/retry # 重试任务
|
||||
GET /admin-api/muse/source-events # 源事件列表
|
||||
```
|
||||
|
||||
**代码示例 — API service:**
|
||||
|
||||
```typescript
|
||||
// apps/web-antd/src/api/muse/jobs/index.ts
|
||||
import { museAdminApi } from '../client';
|
||||
|
||||
export interface JobSummary {
|
||||
jobId: string;
|
||||
jobType: string;
|
||||
status: string;
|
||||
createdAt: string;
|
||||
retryCount: number;
|
||||
}
|
||||
|
||||
export interface JobDetail extends JobSummary {
|
||||
failureReason?: string;
|
||||
payload?: Record<string, unknown>;
|
||||
result?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export interface SourceEvent {
|
||||
eventType: string;
|
||||
source: string;
|
||||
status: string;
|
||||
impactSummary: string;
|
||||
createdAt: string;
|
||||
}
|
||||
|
||||
export function listJobs(params: { pageNo: number; pageSize: number; status?: string }) {
|
||||
return museAdminApi.get<{ total: number; list: JobSummary[] }>('/jobs', params);
|
||||
}
|
||||
|
||||
export function getJob(jobId: string) {
|
||||
return museAdminApi.get<JobDetail>(`/jobs/${jobId}`);
|
||||
}
|
||||
|
||||
export function retryJob(jobId: string) {
|
||||
return museAdminApi.post<void>(`/jobs/${jobId}/retry`);
|
||||
}
|
||||
|
||||
export function listSourceEvents(params: { pageNo: number; pageSize: number }) {
|
||||
return museAdminApi.get<{ total: number; list: SourceEvent[] }>('/source-events', params);
|
||||
}
|
||||
```
|
||||
|
||||
### Task 2.8: 审计日志页面
|
||||
|
||||
**文件:**
|
||||
- 创建: `apps/web-antd/src/api/muse/audit/index.ts`
|
||||
|
||||
**页面清单:**
|
||||
|
||||
| 页面 | 路由 | 说明 |
|
||||
|------|------|------|
|
||||
| 业务审计事件列表 | `/audit/business-events` | 表格:时间戳 + 操作者 + 操作 + 目标 + 结果 |
|
||||
| 审计详情 | `/audit/business-events/:eventId` | 完整 before/after 快照对比 |
|
||||
|
||||
**API endpoints:**
|
||||
|
||||
```
|
||||
GET /admin-api/muse/audit/business-events # 业务审计事件列表
|
||||
```
|
||||
|
||||
**代码示例 — API service:**
|
||||
|
||||
```typescript
|
||||
// apps/web-antd/src/api/muse/audit/index.ts
|
||||
import { museAdminApi } from '../client';
|
||||
|
||||
export interface BusinessAuditEvent {
|
||||
eventId: string;
|
||||
timestamp: string;
|
||||
actor: string;
|
||||
action: string;
|
||||
target: string;
|
||||
result: string;
|
||||
}
|
||||
|
||||
export interface BusinessAuditDetail extends BusinessAuditEvent {
|
||||
beforeSnapshot?: Record<string, unknown>;
|
||||
afterSnapshot?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export function listBusinessAuditEvents(params: { pageNo: number; pageSize: number; actor?: string; action?: string }) {
|
||||
return museAdminApi.get<{ total: number; list: BusinessAuditEvent[] }>('/audit/business-events', params);
|
||||
}
|
||||
|
||||
export function getBusinessAuditDetail(eventId: string) {
|
||||
return museAdminApi.get<BusinessAuditDetail>(`/audit/business-events/${eventId}`);
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 3: Mock API 配置
|
||||
|
||||
- [ ] **Step 1: 配置 MSW 或 Vben 内置 Mock**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user