7.9 KiB
7.9 KiB
许可事项管理筛选器实现报告
概述
应需求改进,原有的许可事项管理页面使用传统的"区域选择-许可事项"方式已改为现代化的筛选器浏览形式,支持多维度筛选(地区、关联部门、主题等),提供更高效的浏览体验。
实现内容
1. 后端API开发
新增API接口
1.1 高级筛选接口
- 路径:
POST/GET /fs-ai-asistant/api/workflow/lawrisk/admin/permits/advanced-filter - 功能: 支持多维度筛选许可事项
- 参数:
region: 行政区域筛选theme: 主题筛选department: 关联部门筛选search_text: 许可名称关键词搜索limit: 返回数量限制(默认100)offset: 分页偏移(默认0)
- 特性:
- 支持GET和POST两种请求方式
- 返回结构化数据,包含分页信息
- 自动计算总数和页数
1.2 筛选选项接口
- 路径:
GET /fs-ai-asistant/api/workflow/lawrisk/admin/permits/filter-options - 功能: 获取所有可用的筛选选项
- 返回数据:
{ "regions": [...], // 所有行政区域 "themes": [...], // 所有主题 "departments": [...] // 所有服务部门 }
新增数据函数
filter_permits_advanced()
- 位置:
lawrisk/services/licensing_repo.py - 功能: 多维度筛选许可事项的数据库查询函数
- 特性:
- 支持区域、主题、部门、关键词四种筛选维度
- 包含风险数量统计
- 支持主题去重和聚合
- 提供总数统计用于分页
- 使用窗口函数优化性能
2. 前端页面开发
许可事项浏览页面
- 文件:
static/permit_browser.html - 功能特性:
-
多维度筛选器
- 行政区域下拉选择
- 主题下拉选择
- 关联部门下拉选择
- 许可名称关键词搜索输入框
-
筛选结果展示
- 表格形式展示许可事项
- 显示许可名称、所属区域、主题标签、风险数量
- 支持主题标签展示(一个许可可能有多个主题)
- 每行提供"查看"操作按钮
-
分页功能
- 每页50条记录
- 显示总数量和页码信息
- 上一页/下一页按钮
- 自动禁用边界按钮
-
用户体验优化
- 加载状态提示
- 错误信息展示
- 空状态友好提示
- 回车键快速搜索
- 响应式设计
3. 数据库查询优化
查询语句特点
SELECT DISTINCT
p.id AS permit_id,
p.name AS permit_name,
rtp.region_id,
r.name AS region_name,
rtp.theme_id,
t.name AS theme_name,
COUNT(rpr.risk_id) OVER (PARTITION BY rtp.permit_id, rtp.region_id) AS risk_count,
COUNT(DISTINCT rtp.theme_id) OVER (PARTITION BY rtp.permit_id, rtp.region_id) AS theme_count
FROM region_theme_permits rtp
JOIN permits p ON p.id = rtp.permit_id
JOIN regions r ON r.id = rtp.region_id
LEFT JOIN themes t ON t.id = rtp.theme_id
LEFT JOIN region_permit_risks rpr ON ...
LEFT JOIN permit_sources ps ON ...
WHERE 1=1
AND (条件筛选)
ORDER BY LOWER(p.name), LOWER(r.name), LOWER(COALESCE(t.name, ''))
LIMIT %s OFFSET %s
性能优化措施
- DISTINCT去重: 避免同一许可在不同主题下重复出现
- 窗口函数: 高效计算风险数量和主题数量,无需子查询
- 索引优化: 充分利用现有索引(region_id, permit_id, theme_id)
- 分页查询: 避免一次返回大量数据
- 统一排序: 确保分页结果稳定一致
4. 数据结构设计
筛选结果数据结构
{
"permits": [
{
"id": "permit-uuid",
"name": "许可名称",
"region": {
"id": "region-uuid",
"name": "区域名称"
},
"themes": [
{
"id": "theme-uuid",
"name": "主题名称"
}
],
"risk_count": 5,
"theme_count": 3
}
],
"pagination": {
"total": 150,
"limit": 50,
"offset": 0,
"count": 50
}
}
技术特性
安全性
- ✅ 所有API都需要管理员权限验证
- ✅ 参数化查询防止SQL注入
- ✅ 输入数据验证和清理
性能
- ✅ 数据库查询优化,使用窗口函数
- ✅ 分页查询减少数据传输
- ✅ 前端缓存筛选选项
- ✅ 支持大数据集分页浏览
可维护性
- ✅ 统一API响应格式
- ✅ 清晰的错误处理和日志记录
- ✅ 模块化代码结构
- ✅ 完整的文档注释
使用指南
访问地址
许可事项浏览页面: http://localhost:8000/static/permit_browser.html
使用流程
-
打开页面
- 访问许可事项浏览页面
- 页面自动加载所有筛选选项
-
选择筛选条件
- 从下拉列表选择行政区域(或保持"全部区域")
- 从下拉列表选择主题(或保持"全部主题")
- 从下拉列表选择关联部门(或保持"全部部门")
- 在搜索框输入许可名称关键词(可选)
-
执行筛选
- 点击"应用筛选"按钮
- 或在搜索框按回车键
-
浏览结果
- 查看许可事项列表
- 查看每个许可的详细信息(区域、主题、风险数)
- 点击"查看"按钮查看详情(功能待完善)
-
翻页浏览
- 使用"上一页"/"下一页"按钮翻页
- 查看页码信息了解当前位置
-
重置筛选
- 点击"重置筛选"清除所有条件
筛选维度说明
1. 行政区域
- 说明: 许可事项所属的行政区域
- 选项: 市级、禅城区、南海区、顺德区、三水区、高明区
- 筛选逻辑: 精确匹配指定区域的许可事项
2. 主题
- 说明: 许可事项关联的法律主题
- 选项: 所有已配置的主题列表
- 筛选逻辑: 精确匹配指定主题的许可事项
3. 关联部门
- 说明: 上传或绑定许可的部门单位
- 选项: 所有服务部门(市级单位、区级单位)
- 筛选逻辑: 匹配上传部门或绑定部门的许可事项
4. 搜索关键词
- 说明: 在许可名称中进行模糊搜索
- 输入: 任意关键词(支持中文)
- 筛选逻辑: 许可名称包含关键词即可匹配
与原有系统的对比
| 特性 | 原有方式 | 新方式 |
|---|---|---|
| 筛选维度 | 单一(区域) | 多维度(区域、主题、部门、关键词) |
| 浏览方式 | 区域选择 → 事项列表 | 筛选器 → 事项列表 |
| 主题支持 | 不明确 | 明确显示主题标签 |
| 风险统计 | 无 | 显示风险数量 |
| 分页支持 | 无 | 支持分页浏览 |
| 搜索功能 | 无 | 支持关键词搜索 |
| 部门关联 | 无 | 支持部门筛选 |
| 响应式设计 | 一般 | 完全响应式 |
测试建议
功能测试
-
筛选功能测试
- 单个维度筛选测试
- 多个维度组合筛选测试
- 关键词搜索测试
- 无结果场景测试
-
分页功能测试
- 正常分页浏览
- 边界页面访问(第一页、最后一页)
- 总数统计准确性
-
用户体验测试
- 页面加载速度
- 筛选响应时间
- 错误处理验证
性能测试
- 大量数据筛选响应时间
- 复杂条件组合查询性能
- 并发访问压力测试
未来改进方向
-
高级筛选功能
- 支持多选筛选(一个字段可选多个值)
- 支持日期范围筛选
- 支持自定义排序
-
数据展示优化
- 添加许可详情弹窗
- 支持列表视图和卡片视图切换
- 添加数据导出功能
-
性能优化
- 添加查询结果缓存
- 实现虚拟滚动(大数据量)
- 添加数据预加载
总结
本次改进成功将许可事项管理从传统的"区域选择-事项列表"模式升级为现代化的多维度筛选浏览模式,大大提升了用户体验和查询效率。新系统支持更丰富的筛选维度、更直观的展示形式,并具有良好的扩展性和维护性。
实施日期: 2025-11-19 版本: v1.0 状态: ✅ 已完成