实现首页"人工接管"按钮的完整功能,包括API对接、状态更新、UI反馈和状态持久化。
当前首页已存在"人工接管"按钮(位于 FloatingControlPanel 组件),但仅有简单的确认对话框和提示,未对接真实API,也未实现状态持久化和UI状态展示。
ProcessAPIService.takeover API 实现真实的人工接管功能caseId 获取策略(按优先级):
1. URL 参数 caseId
2. localStorage case_data_timeline.case_id
3. Context caseData.case_id
userName 获取策略:
- localStorage currentUser.user_name,不存在时默认 "No User"
根据案件 state 字段判断按钮显示状态:
- state === 1(调解中):显示"人工接管"按钮
- state === 2(调解成功):隐藏按钮
- state === 3(调解失败):隐藏按钮
- state === 4(人工接管):显示"已人工接管"印章
CSS 实现方案:
```css
.takeover-stamp {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 10px 24px;
font-size: 1rem;
font-weight: 600;
color: #e63946;
background: linear-gradient(135deg, #ffeaea 0%, #ffe0e0 100%);
border: 3px solid #e63946;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(230, 57, 70, 0.2);
transform: rotate(-3deg);
user-select: none;
cursor: default;
}
.takeover-stamp::before {
content: '';
position: absolute;
inset: 2px;
border: 1px solid rgba(230, 57, 70, 0.3);
border-radius: 6px;
}
.takeover-stamp-text {
display: flex;
align-items: center;
gap: 8px;
letter-spacing: 2px;
}
```
HTML 结构:jsx <div className="takeover-stamp"> <span className="takeover-stamp-text"> <i className="fas fa-stamp"></i> 已人工接管 </span> </div>
graph TD
A[用户点击人工接管按钮] --> B{显示确认对话框}
B -->|取消| Z[结束]
B -->|确认| C[显示Loading状态]
C --> D[调用ProcessAPIService.takeover]
D --> E{API响应}
E -->|成功200| F[隐藏按钮]
F --> G[显示印章效果]
G --> H[刷新案件数据]
H --> I[显示成功提示]
E -->|失败400| J{错误类型判断}
J -->|已被接管| K[隐藏按钮]
K --> L[重新加载页面]
J -->|其他错误| M[显示错误提示]
M --> N[恢复按钮状态]
| 错误场景 | HTTP状态码 | 处理方式 |
|---|---|---|
| 案件已被接管 | 400 | 隐藏按钮 + 重新加载页面 |
| 调解已成功/失败 | 400 | 隐藏按钮(不提示) |
| 网络错误 | - | 显示错误提示 + 恢复按钮 |
| 其他错误 | 4xx/5xx | 显示错误提示 + 恢复按钮 |
web-app/src/components/dashboard/FloatingControlPanel.jsx - 核心逻辑实现web-app/src/App.css - 新增印章样式web-app/src/contexts/CaseDataContext.jsx - 案件数据Contextweb-app/src/services/ProcessAPIService.js - API服务(已存在)web-app/src/utils/stateTranslator.js - 状态翻译工具ProcessAPIService.takeover)见 tasks.md
API文档.md - PUT /api/v1/mediation-timeline/v2/case/{caseId}/takeoverweb-app/src/components/dashboard/FloatingControlPanel.jsxweb-app/src/contexts/CaseDataContext.jsx