52 lines
3.3 KiB
Markdown
52 lines
3.3 KiB
Markdown
# Design: 套餐真流量预警前端对接
|
||
|
||
## 背景
|
||
|
||
后端已按 `docs/产品迭代8月份/套餐真流量预警_API_前端简版.md` 在测试环境上线 6 个接口(released)。前端需要新增规则配置与预警记录两个页面,并接入既有权限与导出任务体系。本设计记录关键决策。
|
||
|
||
## 决策
|
||
|
||
### 1. 页面挂载位置:套餐管理分组
|
||
|
||
规则数据源是套餐商品(`package_id`),预警记录也按套餐筛选,因此两个页面都挂在既有 `/package-management` 路由分组下,与套餐列表、代理系列授权平级。
|
||
|
||
- 路由:`/package-management/traffic-alert-rules`、`/package-management/traffic-alerts`
|
||
- 详情:`/package-management/traffic-alerts/detail/:id`(隐藏路由)
|
||
|
||
### 2. 导出走专用接口 + 专用弹窗,不复用 ExportTaskCreateDialog
|
||
|
||
既有 `ExportTaskCreateDialog` 调用通用 `POST /api/admin/export-tasks`,而真流量预警导出是专用端点 `POST /api/admin/package-traffic-alerts/export`,请求体为 `format` + 与列表一致的一组筛选参数。因此:
|
||
|
||
- 新建轻量弹窗(或扩展 `ExportTaskCreateDialog` 支持自定义 submit),展示“基于当前筛选条件全量导出,不仅导出当前分页数据”
|
||
- 提交成功后提示“导出任务已创建”,并提供跳转既有导出任务列表页的入口,下载走既有能力
|
||
- 导出任务列表若按场景过滤,需要新增场景配置;场景枚举值联调时与后端确认后落入 `EXPORT_TASK_SCENE_CONFIG`
|
||
|
||
### 3. 权限模型
|
||
|
||
- 遵循八月迭代约定:权限编码集中定义在 `AUGUST_PERMISSIONS.packageTrafficAlert`,页面/按钮通过 `v-permission` + `useAuth().hasAuth` 引用
|
||
- 页面级:`rules_view` / `records_view` 控制菜单与按钮可见性(后端菜单权限同源)
|
||
- 按钮级:规则创建/修改(含启停)、记录详情、导出分别独立编码
|
||
- 403 策略:接口对无权限账号统一返回 403;列表接口 403 时提示“无权限访问”;详情越权按资源不可见处理(复用现有 404 类提示文案),不暴露资源存在性
|
||
|
||
### 4. 阈值输入校验
|
||
|
||
- 前端 `ElInputNumber`:`min=1`、`max=100`、`precision=2`
|
||
- 创建时 `threshold_percent` 必填;修改时三字段均可选(后端按传入字段更新)
|
||
- `remark` 创建/修改均限制 500 字符(`maxlength` + 计数器)
|
||
|
||
### 5. 快照与归属变化展示
|
||
|
||
- 列表与详情的业务字段均为触发时快照,仅 `business_user_group_names` 为当前值
|
||
- 详情中 `shop_changed_since_trigger` / `owner_changed_since_trigger` 为 `true` 时,用 `ElAlert`(info)提示归属已变化,并展示当前店铺/业务员与快照值
|
||
- 空值约定:无店铺/业务员时字段可能为 `null` 或空数组,统一渲染 `-`(业务员数组 join 展示,空数组显示 `-`)
|
||
|
||
### 6. 规则列表的 real_data_mb 展示
|
||
|
||
- `real_data_mb` 为套餐商品当前真流量额度,仅用于配置校验展示(如“按 80% 约对应 x GB”),不作为预警分母
|
||
- 页面以 GB 展示(`/1024`,保留两位小数),避免 MB 数字过长
|
||
|
||
## 风险
|
||
|
||
- 记录列表/详情接口字段名未完整给出,联调时以测试环境实际返回为准,类型定义需保留一定弹性(可选字段)
|
||
- 导出任务场景值未给出,若后端未登记场景枚举,导出任务列表页的场景筛选需兼容新值
|