fix: some
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
# Change: 换货迁移状态与店铺负责人导入字段对齐(AUG26-005)
|
||||
|
||||
## Why
|
||||
|
||||
换货单新增业务数据迁移状态(migration_status),前端需要按新状态展示迁移结果,不能再以 migrate_data/migration_completed/migration_balance 推断;migration_status=failed 的单「确认完成」仅超管/平台账号可重试,代理/企业账号触发 403/1005。同时店铺负责人导入任务/行级接口按生成文档补齐 task_no、file_name、creator_name、started_at、completed_at、status_name 等字段,前端类型与页面展示需对齐。
|
||||
|
||||
## What Changes
|
||||
|
||||
- 换货响应字段:GET /api/admin/exchanges、GET /api/admin/exchanges/{id} 以及创建/发货/完成接口返回的同一个换货对象新增 migration_status(not_migrated/pending/migrated/failed)、migration_status_name(中文名:不迁移/待迁移/已迁移/迁移失败)、migration_failure_reason(仅 migration_status=failed 时返回);migrate_data、migration_completed、migration_balance 仍在、语义未变,但不再用于推断迁移结果。
|
||||
- 换货列表:在「状态」列之后新增「迁移状态」列(中文名,failed 红色标记);详情页新增迁移信息展示(迁移状态 + failed 时的失败原因)。
|
||||
- 确认完成:非 failed 单沿用既有 exchange:complete 权限;failed 单仅超管/平台账号可重试,代理/企业账号前端不渲染入口(后端仍 403/1005 兜底);迁移执行失败返回 code=1206,换货单保持「已发货待确认」,前端展示后端安全文案、修复条件后可重试。
|
||||
- 导出:换货导出在「状态」列之后新增「迁移状态」列(15→16),不导出失败原因;前端导出为任务式、无列模板,前端零改动。
|
||||
- 店铺负责人导入:任务对象(列表/详情/创建响应)按生成文档补齐 task_no/file_name/creator_name/started_at/completed_at/status_name;行级结果补齐 status_name;创建任务接口返回值对齐任务对象(含 id),导入页展示任务编号/文件名/创建人/开始·完成时间/状态中文名。
|
||||
- 无新增路由、无新增列表筛选、请求入参与权限入口不变(发货 migrate_data 仍为「是否执行迁移」,决定状态落 pending 或 not_migrated)。
|
||||
|
||||
## Not In Scope
|
||||
|
||||
- 后端实现(failed 单权限拦截、1206 返回与迁移执行),仅前端适配。
|
||||
- 导出文件内容列(换货导出列 15→16 由后端模板生成)。
|
||||
- migrate_data/migration_completed/migration_balance 字段删除或语义调整。
|
||||
- 换货单请求入参、列表筛选、权限编码的新增与变更。
|
||||
|
||||
## Impact
|
||||
|
||||
- Affected specs: exchange-management(新增)、shop-management(扩展)
|
||||
- Affected code:
|
||||
- src/api/modules/exchange.ts(ExchangeResponse 迁移字段与枚举)
|
||||
- src/views/asset-management/exchange-management/index.vue、detail.vue
|
||||
- src/types/api/shop.ts(BusinessOwnerImportDetail/BusinessOwnerImportRow)
|
||||
- src/api/modules/shop.ts(createBusinessOwnerImport 返回值对齐)
|
||||
- src/views/shop-management/business-owner-import/index.vue
|
||||
- API contracts: DtoExchangeOrderResponse 新增 3 个迁移字段;店铺负责人导入任务/行级字段对齐生成文档
|
||||
- Dependencies:
|
||||
- docs/产品迭代8月份/换货和店铺负责人导入.md(7 个换货端点 + 3 个导入端点 OpenAPI)
|
||||
- AUG26-005 换货迁移状态接口变动说明
|
||||
- Related active changes: update-exchange-flow-direct-type(同属换货流程,需合并考虑);add-business-user-group-management(店铺负责人导入页面基础)
|
||||
|
||||
## 待确认
|
||||
|
||||
- 1206 响应走 HTTP 4xx 还是 200+code=1206:前端按现有统一错误处理展示后端 msg;如需要定制提示(如「迁移失败,修复后可重试」)需后端确认返回结构。
|
||||
- failed 单「确认完成」的隐藏依据:按 user_type(代理/企业)在前端隐藏,超管/平台显示,权限码沿用 exchange:complete。
|
||||
- 导入任务创建响应含 id:以生成文档为准,前端改为使用返回对象的 id 打开结果抽屉。
|
||||
@@ -0,0 +1,66 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 换货业务数据迁移状态契约
|
||||
|
||||
换货单对象 MUST 提供 migration_status(not_migrated/pending/migrated/failed)、migration_status_name(中文)与 migration_failure_reason(仅 failed 时返回);迁移结果判定 MUST 以 migration_status 为准,前端 MUST NOT 再用 migrate_data/migration_completed/migration_balance 推断。列表、详情、创建/发货/完成返回的同一个换货对象 MUST 携带上述字段。
|
||||
|
||||
#### Scenario: 列表与详情返回迁移状态
|
||||
|
||||
- **GIVEN** 用户打开换货列表或详情
|
||||
- **WHEN** 响应数据加载
|
||||
- **THEN** 每单 MUST 展示 migration_status 与 migration_status_name
|
||||
- **AND** migration_status=failed 时 MUST 展示 migration_failure_reason;其他状态 MUST NOT 依赖该字段
|
||||
|
||||
#### Scenario: 迁移结果以状态字段为准
|
||||
|
||||
- **WHEN** 前端判定迁移结果
|
||||
- **THEN** 判定依据 MUST 使用 migration_status(pending/migrated/failed)
|
||||
- **AND** 不得使用 migrate_data/migration_completed/migration_balance 推断
|
||||
|
||||
### Requirement: 换货列表与详情迁移状态展示
|
||||
|
||||
换货列表 MUST 在「状态」列之后新增「迁移状态」列并展示中文名;换货详情 MUST 展示迁移状态,failed 时展示后端返回的安全失败原因。
|
||||
|
||||
#### Scenario: 列表迁移状态列
|
||||
|
||||
- **GIVEN** 换货列表加载完成
|
||||
- **WHEN** 渲染表格
|
||||
- **THEN** 「状态」列后 MUST 出现「迁移状态」列
|
||||
- **AND** 该列 MUST 展示 migration_status_name
|
||||
|
||||
#### Scenario: 详情展示失败原因
|
||||
|
||||
- **GIVEN** 某换货单 migration_status=failed
|
||||
- **WHEN** 用户打开详情
|
||||
- **THEN** 详情 MUST 展示迁移状态为「迁移失败」
|
||||
- **AND** MUST 展示后端返回的 migration_failure_reason 安全文案
|
||||
|
||||
### Requirement: 迁移失败单的确认完成权限控制
|
||||
|
||||
非 failed 换货单的「确认完成」权限 MUST 与既有逻辑一致(exchange:complete);migration_status=failed 的物流换货单重试 MUST 仅对超级管理员/平台账号开放,代理/企业账号前端 MUST NOT 渲染该入口,后端仍以 403/1005 兜底。
|
||||
|
||||
#### Scenario: 代理/企业账号隐藏重试入口
|
||||
|
||||
- **GIVEN** 当前账号为代理或企业账号
|
||||
- **AND** 换货单 migration_status=failed 且 status=3
|
||||
- **WHEN** 渲染行操作
|
||||
- **THEN** 前端 MUST NOT 显示「确认完成」操作
|
||||
|
||||
#### Scenario: 超管/平台账号可重试
|
||||
|
||||
- **GIVEN** 当前账号为超级管理员或平台账号
|
||||
- **AND** 换货单 migration_status=failed
|
||||
- **WHEN** 渲染行操作
|
||||
- **THEN** 前端 MUST 提供「确认完成」重试入口
|
||||
|
||||
### Requirement: 迁移执行失败(1206)处理
|
||||
|
||||
确认完成触发迁移执行失败时后端返回 code=1206 与安全文案,换货单保持「已发货待确认」,修复条件后可重试;前端 MUST 展示后端安全文案且不得改变订单状态展示。
|
||||
|
||||
#### Scenario: 1206 提示并可重试
|
||||
|
||||
- **GIVEN** 用户对含迁移的换货单执行确认完成
|
||||
- **WHEN** 后端返回 code=1206
|
||||
- **THEN** 前端 MUST 展示后端安全文案(不含数据库/渠道原文)
|
||||
- **AND** 换货单状态仍展示为「已发货待确认」
|
||||
- **AND** 用户可以修复条件后再次发起确认完成
|
||||
@@ -0,0 +1,25 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 店铺负责人导入任务字段对齐生成文档
|
||||
|
||||
店铺负责人导入任务对象(列表、详情、创建响应)MUST 按生成文档提供 task_no、file_name、creator_name、started_at、completed_at、status_name(任务状态中文名);行级结果 MUST 提供 status_name。前端类型与导入页展示 MUST 对齐;创建导入任务返回任务对象(含 id),前端不再依赖 task_id 字段。
|
||||
|
||||
#### Scenario: 任务列表展示扩展字段
|
||||
|
||||
- **GIVEN** 用户进入业务负责人导入任务列表
|
||||
- **WHEN** 列表加载完成
|
||||
- **THEN** 前端 MUST 展示任务编号、文件名、创建人、开始/完成时间与状态中文名
|
||||
- **AND** 原有状态/总数/成功/失败/创建时间展示 MUST 保留
|
||||
|
||||
#### Scenario: 结果抽屉与行级详情
|
||||
|
||||
- **GIVEN** 用户查看导入结果抽屉
|
||||
- **WHEN** 展示任务详情
|
||||
- **THEN** 任务级信息 MUST 展示文件名、创建人、开始/完成时间、状态中文名
|
||||
- **AND** 行级表格 MUST 展示 status_name
|
||||
|
||||
#### Scenario: 创建导入任务使用任务对象返回
|
||||
|
||||
- **WHEN** 前端调用 POST /api/admin/shops/business-owner-imports 创建任务
|
||||
- **THEN** 返回值 MUST 按任务对象解析(file_key 校验与异步执行语义不变)
|
||||
- **AND** 前端 MUST 使用返回对象的 id 打开结果抽屉
|
||||
@@ -0,0 +1,25 @@
|
||||
## 1. API 类型层
|
||||
|
||||
- [x] 1.1 src/api/modules/exchange.ts:ExchangeResponse 新增 migration_status(枚举 not_migrated/pending/migrated/failed)、migration_status_name、migration_failure_reason
|
||||
- [x] 1.2 src/types/api/shop.ts:BusinessOwnerImportDetail 新增 task_no/file_name/creator_name/started_at/completed_at/status_name;BusinessOwnerImportRow 新增 status_name
|
||||
- [x] 1.3 src/api/modules/shop.ts:createBusinessOwnerImport 返回值对齐任务对象(含 id),导入页改用返回对象 id 打开结果抽屉
|
||||
|
||||
## 2. 换货列表
|
||||
|
||||
- [x] 2.1 「状态」列之后新增「迁移状态」列(中文名;failed 用 danger 标记)
|
||||
- [x] 2.2 failed 单的「确认完成」:代理/企业账号(user_type)隐藏重试入口,超管/平台保留(权限码沿用 exchange:complete)
|
||||
- [x] 2.3 code=1206 处理:确认完成后统一提示后端安全文案,列表/详情保持「已发货待确认」并可重试;不展示数据库/渠道原文
|
||||
|
||||
## 3. 换货详情
|
||||
|
||||
- [x] 3.1 新增迁移信息展示:迁移状态(中文)+ 失败原因(仅 failed 展示)
|
||||
|
||||
## 4. 店铺负责人导入页
|
||||
|
||||
- [x] 4.1 任务列表展示任务编号/文件名/创建人/开始时间/完成时间/状态中文名(保留原有 状态/总数/成功/失败/创建时间)
|
||||
- [x] 4.2 结果抽屉:任务级信息展示文件名/创建人/开始·完成时间/状态中文名;行级表格展示状态中文名
|
||||
|
||||
## 5. 验证
|
||||
|
||||
- [x] 5.1 vue-tsc --noEmit、check-encoding、相关文件 eslint
|
||||
- [x] 5.2 openspec validate update-exchange-migration-and-shop-import --strict
|
||||
Reference in New Issue
Block a user