## ADDED Requirements

### Requirement: Exchange Creation Refund Interception Feedback

The exchange creation page SHALL display the backend business reason through the unified HTTP error handling when `POST /api/admin/exchanges` rejects the selected old asset because of an active refund application. The page MUST use the response `code` and `msg` contract without changing the successful exchange response structure, and MUST NOT render an additional local error area inside the create dialog for the same failure.

#### Scenario: Display active refund interception reason

- **GIVEN** 用户已填写创建换货单表单并选择存在活跃退款申请的旧资产
- **WHEN** `POST /api/admin/exchanges` 返回失败 `code` 和 `msg`
- **THEN** 页面 MUST display the backend business reason through the unified HTTP error handling
- **AND** 当后端 `msg` 为“该资产存在退款申请”时，页面 MUST display that message directly
- **AND** 页面 MUST NOT display a duplicate error alert inside the create exchange dialog
- **AND** 系统 MUST NOT create a new exchange order

#### Scenario: Display other exchange creation business reason

- **GIVEN** 用户已填写创建换货单表单
- **WHEN** 创建接口返回非退款相关的业务失败 `code` 和 `msg`
- **THEN** 页面 MUST display the backend `msg` through the unified HTTP error handling
- **AND** 页面 MUST NOT replace the backend business reason with a generic frontend failure message
- **AND** 页面 MUST NOT display a duplicate error alert inside the create exchange dialog

### Requirement: Exchange Creation Retry After Interception

The exchange creation page SHALL preserve the current form values after a backend rejection and allow the user to change assets and submit again after the request completes.

#### Scenario: Preserve form after refund interception

- **GIVEN** 创建换货单请求被后端退款规则拒绝
- **WHEN** 页面展示后端业务原因
- **THEN** 页面 MUST retain the selected old asset, new asset when applicable, flow type, reason, and other form values
- **AND** 提交按钮 MUST leave its loading state after the request completes

#### Scenario: Retry with another asset

- **GIVEN** 用户已收到退款拦截错误
- **WHEN** 用户更换旧资产并再次提交创建换货单
- **THEN** 系统 MUST send a new `POST /api/admin/exchanges` request using the updated form values

### Requirement: Backend-Controlled Exchange Refund Eligibility

The exchange creation page MUST rely exclusively on the exchange creation response to determine refund-related eligibility. The frontend MUST NOT add a refund status lookup, a refund pre-check area, or infer eligibility from refund approval, rejection, withdrawal, or completion states.

#### Scenario: Do not pre-check refund eligibility

- **WHEN** 用户打开或填写创建换货单表单
- **THEN** 页面 MUST NOT issue a refund status query solely to determine exchange eligibility
- **AND** 页面 MUST NOT render a refund status pre-check area

#### Scenario: Permit assets according to backend decision

- **GIVEN** 用户选择曾有退款申请但后端允许换货的资产
- **WHEN** 创建接口成功返回
- **THEN** 页面 MUST treat the exchange creation as successful
- **AND** 页面 MUST NOT block the operation based on a frontend interpretation of refund history
