Files
luo c1a7118d35
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 4m40s
fix: 将导出列表分成三个模块
2026-07-09 15:20:28 +08:00

68 lines
4.5 KiB
Markdown

## Context
导出任务能力已经具备统一 API、通用列表页面、详情页面和创建弹窗。现有列表页面通过 `scene` 搜索项区分设备、IOT 卡和订单任务,但新的产品方案要求用三个固定场景页面替代该筛选方式,并让三个页面按钮权限相互独立。
## Goals / Non-Goals
- Goals: 在导出管理下提供“导出设备”“导出IOT卡”“导出订单”三个页面。
- Goals: 三个页面固定传入各自 `scene`,去掉页面中的“导出场景”筛选。
- Goals: 三个页面及其按钮/操作使用场景级独立权限编码。
- Goals: 尽量复用现有导出任务列表和详情实现,避免复制三份完整页面逻辑。
- Non-Goals: 不新增导出任务后端 API。
- Non-Goals: 不改变创建导出任务的 `scene` 值和 `query` 快照语义。
- Non-Goals: 不调整导出任务状态流转、文件生成或下载地址生成逻辑。
## Decisions
- Decision: 使用一个可复用导出任务列表实现,通过路由配置或组件 props 注入固定场景、页面标题和权限映射。
- Rationale: 三个页面除固定 `scene` 和权限外,分页、状态筛选、时间筛选、下载、取消逻辑一致,复用可以减少重复代码和后续维护成本。
- Decision: 页面查询参数由页面固定注入 `scene`,不从搜索表单读取“导出场景”。
- Rationale: 页面已经按场景拆分,继续暴露场景筛选会造成入口语义冲突,也可能让用户在“导出设备”页面查到 IOT 卡或订单任务。
- Decision: 权限编码按场景和操作拆分,默认建议如下。
- Rationale: 用户明确要求三个界面的按钮权限编码不同;列表访问、详情、下载、取消均需要避免跨场景复用。
| 场景 | 页面访问 | 详情 | 下载 | 取消 |
| --- | --- | --- | --- | --- |
| 导出设备 | `export_task:device:list` | `export_task:device:detail` | `export_task:device:download` | `export_task:device:cancel` |
| 导出IOT卡 | `export_task:iot_card:list` | `export_task:iot_card:detail` | `export_task:iot_card:download` | `export_task:iot_card:cancel` |
| 导出订单 | `export_task:order:list` | `export_task:order:detail` | `export_task:order:download` | `export_task:order:cancel` |
- Decision: 业务列表创建导出任务按钮继续使用来源业务权限,默认建议如下。
- Rationale: 创建导出任务属于来源业务列表能力,不应因为拥有某个导出任务管理页面权限就获得业务列表导出入口。
| 入口 | 创建导出任务权限 | scene |
| --- | --- | --- |
| 设备管理 | `devices:export` | `device` |
| IOT 卡管理 | `iot_card:export` | `iot_card` |
| 订单列表 | `orders:export` | `order` |
- Decision: 详情页可继续复用同一组件,但必须根据任务场景或来源页面使用对应场景的详情、下载、取消权限。
- Rationale: 详情页面本身也包含下载和取消按钮,若继续使用通用权限会绕过三个列表页面的按钮隔离要求。
## Risks / Trade-offs
- Risk: 后端或权限配置已经发放了通用 `export_task:*` 权限,切换为场景级权限后用户可能暂时看不到页面或按钮。
- Mitigation: 实施时同步更新权限种子/菜单配置,并在上线前完成角色权限迁移或重新授权。
- Risk: 订单导出场景提案正在独立推进,可能继续给旧“导出列表”增加订单筛选。
- Mitigation: 实施本变更前先合并范围,保留 `scene=order` 和订单创建入口,移除旧列表中的订单场景筛选实现。
- Risk: 详情页直接通过 URL 打开时缺少来源页面上下文。
- Mitigation: 详情页读取任务详情后按返回的 `scene` 计算对应权限,缺少该场景详情权限时展示无权限提示并阻止后续按钮操作。
## Migration Plan
1. 增加三条导出任务列表路由和菜单项,删除或隐藏旧通用“导出列表”入口。
2. 将导出任务列表改造成固定场景列表,移除“导出场景”搜索项和冗余场景列。
3. 为三页分别注入固定 `scene`、标题和场景级权限映射。
4. 调整导出任务详情页和行操作的权限判断,改用任务场景对应权限。
5. 同步订单导出入口,确保订单导出任务进入“导出订单”页面查看。
6. 更新后端/菜单权限配置并完成角色授权迁移。
## Open Questions
- 最终权限编码是否采用本设计建议,还是需要对齐后端已有权限命名规范。
- 旧通用导出列表路由是否直接移除,还是短期隐藏并重定向到用户有权限的第一个场景页面。