integrate-typical-case-api
修改CaseSearchContent.jsx和TypicalCaseDetailContent.jsx组件,集成CaseAPIService的多个API调用,实现典型案例查询、筛选、列表展示和详情查看的完整功能。重构查询条件布局,支持案例类型切换联动,并根据不同案例类型(调解案例/判决文书)展示对应的数据和详情内容。
当前"典型案例查询"功能使用的是静态mock数据和硬编码的筛选条件,无法提供真实的案例检索服务。需要集成后端API实现:
1. 动态查询条件:支持案例类型切换,联动加载纠纷类型、发生时间、纠纷发生地筛选数据
2. 真实数据展示:根据查询条件获取调解案例或判决文书列表
3. 分类详情展示:点击案例时根据类型展示不同的详情内容和字段映射
4. 优化用户体验:改进查询表单布局,提供Loading状态和错误处理机制
web-app/src/components/tools/CaseSearchContent.jsx - 重构查询条件、集成API调用和动态数据渲染web-app/src/components/tools/TypicalCaseDetailContent.jsx - 根据案例类型展示不同详情内容web-app/src/components/tools/TypicalCaseSearch.css - 新增关键词全宽样式CaseAPIService.getDisputeTypes(caseSource) - 获取纠纷类型下拉数据CaseAPIService.getYearStatistics() - 获取判决文书年份统计CaseAPIService.getMediationYearStatistics() - 获取调解案例年份统计CaseAPIService.getAreaStatistics(caseSource) - 获取纠纷发生地统计CaseAPIService.getCourtCases(params) - 查询判决文书列表CaseAPIService.getMediationCases(params) - 查询调解案例列表CaseAPIService.getCourtCaseDetail(id) - 获取判决文书详情CaseAPIService.getMediationCaseDetail(id) - 获取调解案例详情变更内容:
- 移除:纠纷发生时间RangePicker组件、案例类型筛选卡片
- 新增:案例类型单选按钮组(判决文书/调解案例),默认选中"判决文书"
- 调整:关键词拉长占满第一行,第二行显示案例类型+纠纷类型+查询/重置按钮
理由:
- 简化查询界面,主要筛选条件(发生时间、发生地)使用树形卡片更直观
- 案例类型作为核心切换维度,使用单选按钮组更符合交互习惯
- 避免表单组件过多导致的视觉混乱
实现方案:使用useEffect监听caseType变化,自动触发三个API调用javascript useEffect(() => { const caseSource = caseType === 'judgment' ? 'judgment' : 'mediation'; loadDisputeTypes(caseSource); // 纠纷类型下拉框 loadYearStatistics(); // 发生时间树形卡片 loadAreaStatistics(caseSource); // 纠纷发生地树形卡片 }, [caseType]);
理由:
- 确保筛选数据与案例类型保持一致
- 自动化联动减少用户操作,提升体验
调解案例字段映射:javascript { 标题: case_title, 发生时间: occur_time (格式化为 YYYY年MM月DD日), 发生地点: que_prov_name + "/" + que_city_name, 纠纷类型: case_type_first_name, 案例类型: "调解案例", id: id }
判决文书字段映射:javascript { 标题: case_name, 发生时间: judgment_date (格式化为 YYYY年MM月DD日), 发生地点: court, 纠纷类型: case_reason, 案例类型: "判决文书", id: cpws_case_info_id }
理由:
- API返回的字段名称不同,需要适配
- 日期统一格式化为"YYYY年MM月DD日"提升可读性
调解案例详情展示:
- 弹窗标题:典型案例详情
- 第一行:案件标题(case_title)
- 第二行:纠纷发生时间(occur_time)、发生地点(que_prov_name/que_city_name)、纠纷类型(case_type_first_name)
- 移除:调解组织字段
- 详情内容:仅显示案例概述(case_des)、原告诉讼请求(case_claim)、调解结果(agree_content)
判决文书详情展示:
- 弹窗标题:判决文书详情
- 第一行:案件标题(case_name)、案号(case_number)
- 第二行:判决日期(judgment_date)、发生地点(court)、纠纷类型(case_reason)
- 详情内容:案例概述(basic_case_info)、原告介绍(plaintiff)、被告介绍(defendant)、法院审理与判决(trial_finding)、审理经过(trial_process)、审理程序(trial_procedure)、调解结果(judgment)、案例相关法律条文(legal_basis)
- 移除:调解背景、双方立场
理由:
- 调解案例和判决文书的数据结构和关注点不同
- 精简调解案例详情,突出核心信息
- 判决文书详情更完整,满足专业用户需求
用户打开典型案例查询弹窗
↓
组件挂载,默认案例类型=judgment
↓
并行调用三个API加载筛选数据
├─ getDisputeTypes('judgment')
├─ getYearStatistics()
└─ getAreaStatistics('judgment')
↓
首次加载:调用getCourtCases获取列表数据
↓
用户切换案例类型为mediation
↓
重新加载筛选数据
├─ getDisputeTypes('mediation')
├─ getMediationYearStatistics()
└─ getAreaStatistics('mediation')
↓
用户选择筛选条件,点击查询
↓
根据案例类型调用对应API
├─ judgment → getCourtCases
└─ mediation → getMediationCases
↓
展示列表数据(根据案例类型映射字段)
↓
用户点击某个案例
↓
根据案例类型调用详情API
├─ judgment → getCourtCaseDetail
└─ mediation → getMediationCaseDetail
↓
弹窗展示详情(根据案例类型显示不同内容)