# 指标删除

指标删除适用于原子指标、复合指标、衍生指标和快捷引用指标。删除流程是通用的，不需要按指标类型走不同 endpoint。

## Web 同款行为

Web 的单指标删除弹窗会先做删除影响校验：

```bash
guancli fetch GET /api/metric-platform/metrics/<metric_id>/validate-delete-impact
```

响应结构与编辑影响校验一致：

| 字段 | 中文 | 说明 |
| --- | --- | --- |
| `hasChanged` | 是否存在变更影响 | 删除校验通常为 `true` |
| `affectedMetrics` | 下游指标 | 仍引用该指标的指标列表 |
| `affectedCards` | 下游指标卡片 | 仍引用该指标的卡片列表 |

如果 `affectedMetrics` 或 `affectedCards` 非空，Web 会提示“指标已被以下资源使用，暂无法删除”，只允许用户查看影响并关闭弹窗，不会提交删除。

只有影响列表为空时，Web 才展示“删除后无法恢复”的确认弹窗；用户确认后调用：

```bash
guancli fetch POST /api/metric-platform/metrics/<metric_id>/delete
```

## CLI 推荐流程

优先使用封装命令：

```bash
guancli metric delete <metric_id>
```

该命令默认只执行删除影响校验并输出结果，不会真实删除。输出 `deletable=true` 时，再向用户确认“删除后无法恢复”。

用户明确确认后执行：

```bash
guancli metric delete <metric_id> --confirm
```

`--confirm` 也会先重新执行删除影响校验；如果此时发现下游指标或卡片，仍然阻断删除，不会调用 delete 接口。

## 信息收集

如果用户只说“帮我删除一个指标”，先收集或查询：

1. 指标 ID；如果只给名称，先用 `guancli metric search <关键词> -f json` 查候选。
2. 用 `guancli metric get <metric_id> --brief` 核对指标名称、类型、主题、目录和状态。
3. 运行 `guancli metric delete <metric_id>` 查看删除影响。
4. 如果可删除，向用户确认删除对象和“删除后无法恢复”。
5. 用户明确确认后执行 `guancli metric delete <metric_id> --confirm`。

## 影响展示

影响校验返回下游资源时，需要向用户展示：

- 下游指标：`id`、`name`、`subType`；若有 `linkMetricId`，说明是快捷引用关联的原始指标。
- 下游卡片：`id`、`name`。

存在下游资源时不要提供 `--confirm` 继续删除的建议；应提示用户先调整或删除引用关系。

## 常见判断

- 删除是不可恢复操作，即使 `publish=false` 的草稿也要明确确认。
- 不要把“删除影响校验通过”说成已经删除成功。
- 删除成功后可尝试 `guancli metric get <metric_id> --brief` 或重新搜索确认资源已不可见；如果后端返回已删除/不存在，视为删除完成。
