## 1. API And Types - [x] 1.1 按 21 号接口文档核对代理系列授权列表、创建、详情、更新和套餐管理的请求响应类型。 - [x] 1.2 将创建请求的 `packages` 定义为必填,并补充套餐 1~100 项及套餐 ID 不重复的约束说明。 - [x] 1.3 明确 `GrantPackageItem.remove` 仅用于后续套餐删除,保留完整授权详情响应类型。 ## 2. Candidate State Merge - [x] 2.1 在创建授权页面按 `package_id` 合并套餐候选列表和当前选择状态。 - [x] 2.2 在授权详情页面按 `package_id` 合并套餐列表候选和详情中的已授权套餐,已授权套餐必须保留在合并结果中。 - [x] 2.3 在独立授权套餐列表页面复用同一状态规则,避免候选套餐和已授权套餐重复或丢失。 ## 3. Create And Manage Packages - [x] 3.1 创建授权提交前校验套餐数量为 1~100,且套餐 ID 不重复。 - [x] 3.2 创建授权始终提交 `packages[]`,禁止空数组或缺失套餐列表提交。 - [x] 3.3 新增或调价继续提交套餐项和成本价;删除只提交 `remove: true`,不调用独立删除接口。 - [x] 3.4 套餐管理成功后使用后端返回的完整授权详情刷新页面,不前端重算响应结构。 ## 4. Verification - [x] 4.1 验证创建 1 个套餐成功,创建 0 个、101 个和重复套餐被阻止。 - [x] 4.2 验证套餐候选与授权详情合并后,已授权状态、成本价和生效条件展示正确。 - [x] 4.3 验证新增、调价和 `remove=true` 删除均使用套餐管理接口。 - [x] 4.4 验证接口成功响应仍按完整授权详情结构处理。 - [x] 4.5 运行类型检查、lint 和构建。