feat: 资产详情前代后代换货标识
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 5m17s

This commit is contained in:
luo
2026-07-21 11:13:20 +08:00
parent eddfd157ad
commit 45d255cabf
7 changed files with 196 additions and 2 deletions

View File

@@ -0,0 +1,26 @@
# Change: 资产详情前代后代换货标识
## Why
资产详情虽然可展示业务状态和世代编号,但运营无法判断当前资产在换货链中的位置,也无法在具备权限时快速前往关联资产。需要基于后端返回的换货链路数据明确展示前代和后代资产关系。
## What Changes
- 扩展资产解析响应,读取 `exchange_trace.previous_asset``exchange_trace.next_asset`
- 前代资产存在时,在当前资产详情展示“换货新资产”标签与前代资产信息。
- 后代资产存在时,在当前资产详情展示“已换出旧资产”标签与后代资产信息。
- 中间资产同时展示前代和后代换货标识。
- 当关联项 `can_view=true` 时允许跳转资产详情;为 `false` 时仅展示标识文本,不提供跳转操作。
- 不由前端根据换货状态、世代编号或其他字段自行推导换货链;关联项为空时不展示对应区域。
## Impact
- Affected specs: `asset-information`
- Related active changes: `add-asset-status-generation-display`(共享资产世代和详情展示区域)
- Affected code:
- `src/types/api/asset.ts`
- `src/views/asset-management/asset-information/types.ts`
- `src/views/asset-management/asset-information/composables/useAssetInfo.ts`
- `src/views/asset-management/asset-information/components/BasicInfoCard.vue`
- API contract:
- `GET /api/admin/assets/resolve/{identifier}`

View File

@@ -0,0 +1,60 @@
## ADDED Requirements
### Requirement: Asset Exchange Generation Trace Display
The asset information page SHALL display exchange generation relationships exclusively from `exchange_trace.previous_asset` and `exchange_trace.next_asset` returned by `GET /api/admin/assets/resolve/{identifier}`. The frontend MUST NOT infer the exchange chain from asset status, generation, or exchange status.
#### Scenario: Display previous asset for a replacement asset
- **GIVEN** 用户正在查看资产信息页
- **WHEN** 解析响应包含非空的 `exchange_trace.previous_asset`
- **THEN** 页面 MUST 显示“换货新资产”标签
- **AND** 页面 MUST 展示前代资产的标识符和换货单号
#### Scenario: Display next asset for a replaced asset
- **GIVEN** 用户正在查看资产信息页
- **WHEN** 解析响应包含非空的 `exchange_trace.next_asset`
- **THEN** 页面 MUST 显示“已换出旧资产”标签
- **AND** 页面 MUST 展示后代资产的标识符和换货单号
#### Scenario: Display both relationships for an intermediate asset
- **GIVEN** 用户正在查看位于换货链中间的资产
- **WHEN** 解析响应同时包含非空的 `previous_asset``next_asset`
- **THEN** 页面 MUST 同时展示“换货新资产”和“已换出旧资产”两个关联区域
#### Scenario: Hide absent exchange relationship
- **GIVEN** 用户正在查看资产信息页
- **WHEN** `previous_asset``next_asset``null`、空值或未返回
- **THEN** 页面 MUST NOT 展示对应的换货关联区域
- **AND** 前端 MUST NOT 根据资产状态、世代编号、换货单状态或其他字段推导该区域
### Requirement: Exchange Related Asset Navigation Authorization
The asset information page SHALL allow navigation to a related exchange asset only when that relationship item has `can_view=true`.
#### Scenario: Navigate to authorized related asset
- **GIVEN** 换货关联资产项的 `can_view=true`
- **WHEN** 用户点击关联资产标识符
- **THEN** 系统 MUST 跳转到该关联资产的资产详情
- **AND** 跳转 MUST 使用关联项返回的 `identifier`
#### Scenario: Render unauthorized related asset as text
- **GIVEN** 换货关联资产项的 `can_view=false`
- **WHEN** 页面渲染换货关联区域
- **THEN** 页面 MUST 展示关联资产标识符和换货单号
- **AND** 页面 MUST NOT 将关联资产标识符渲染为可点击跳转操作
### Requirement: Exchange Trace Response Contract
The frontend asset resolve contract SHALL support optional `exchange_trace.previous_asset` and `exchange_trace.next_asset` items, each with `asset_type`, `asset_id`, `identifier`, `exchange_no`, and `can_view`.
#### Scenario: Read exchange trace response fields
- **WHEN** 前端解析 `GET /api/admin/assets/resolve/{identifier}` 响应
- **THEN** 前端类型 MUST 支持 `exchange_trace.previous_asset``exchange_trace.next_asset`
- **AND** 每个非空关联项 MUST 支持读取 `asset_type``asset_id``identifier``exchange_no``can_view`

View File

@@ -0,0 +1,22 @@
## 1. API Contract
- [x] 1.1 更新资产解析响应类型,支持 `exchange_trace.previous_asset``exchange_trace.next_asset`
- [x] 1.2 定义换货关联资产类型,读取 `asset_type``asset_id``identifier``exchange_no``can_view`
## 2. Asset Detail Exchange Trace UI
- [x] 2.1 `previous_asset` 存在时展示“换货新资产”标签和前代资产信息。
- [x] 2.2 `next_asset` 存在时展示“已换出旧资产”标签和后代资产信息。
- [x] 2.3 当前资产同时存在前代和后代时,同时展示两个关联区域。
- [x] 2.4 关联资产为空时隐藏对应区域,不通过换货状态或世代编号推导关联链路。
## 3. Exchange Trace Navigation
- [x] 3.1 `can_view=true` 时允许点击关联资产标识跳转资产详情。
- [x] 3.2 `can_view=false` 时仅展示关联资产标识文本,不渲染跳转操作。
## 4. Verification
- [ ] 4.1 验证旧资产、新资产、中间资产和无关联资产的展示正确。
- [ ] 4.2 验证有权限和无权限关联资产的跳转行为正确。
- [x] 4.3 运行相关前端校验,并执行 `openspec validate update-asset-exchange-generation-links --strict`