fix(plan): P3 补全 Account/Job/Audit 管理页面

This commit is contained in:
zizi 2026-05-24 18:45:46 +08:00
parent 0969dbc3d1
commit eceaaedf35

View File

@ -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**