优化购物车关联名称展示

This commit is contained in:
czl231
2026-08-16 00:06:07 +08:00
parent 0b6e7b0598
commit 26cd78ac12
4 changed files with 76 additions and 1 deletions

View File

@@ -0,0 +1,44 @@
# 购物车关联名称展示操作日志
操作时间2026-08-15
操作类型:修改
影响模块:平台总后台电商平台管理、购物车只读列表
## 操作前状态
- 购物车列表将用户与商品关系按普通唯一标识字段渲染。
- 页面表头显示“用户唯一标识”“商品唯一标识”,单元格直接显示 UUID。
- 现有关系补载能力已具备,但购物车资源未启用名称优先展示配置。
## 具体操作
1. 将购物车用户关系列表标题调整为“用户”,并启用用户名称优先展示。
2. 将购物车商品关系列表标题调整为“商品”,并启用商品名称优先展示。
3. 保留两类关系 UUID 的复制入口和关联详情跳转能力。
4. 增加静态契约检查,防止购物车关系列退回裸 UUID 展示。
## 代码变更
- `frontend/platform_admin/src/api/resources.ts`:补齐 `ec_cart` 用户、商品关系的名称展示配置。
- `frontend/platform_admin/scripts/check-resource-display-contracts.mjs`:增加购物车关系列回归检查。
- `docs/项目文档_平台资源中文展示统一_v1.0.md`:记录 v1.3 展示规则变更。
## 行为变化
- 修改前:购物车列表以“用户唯一标识”“商品唯一标识”为主要内容并直接展示 UUID。
- 修改后购物车列表以“用户”“商品”为列名并展示关联名称UUID 仅通过复制入口和悬浮提示提供。
- 购物车记录自身仍按既有契约显示“系统唯一标识”,接口、权限和只读行为不变。
## 验证结果
- `pnpm resource-display-contracts:check`:通过。
- `pnpm type:check`:通过。
- `pnpm build`通过Vite 成功完成 2621 个模块的生产构建。
- `git diff --check`:通过,仅出现仓库既有的 LF/CRLF 转换提示。
## 风险评估
- 关联资源加载失败时仍会显示“名称加载失败”,并保留 UUID 供排障。
- 本次仅修改前端展示契约,不改变 API、数据库、权限和业务数据。

View File

@@ -64,3 +64,4 @@ frontend/platform_admin/
- v1.1:修复树标题插槽误读 `title` 导致中文名称为空的问题,并增加树节点名称回归检查。
- v1.2:树形资源统一改为树形表格,明确展示名称、排序、状态、系统标识和操作,唯一标识降级为复制入口。
- v1.2.1:补齐 Arco 表格 `columns` 插槽,修复树形表格容器存在但列和数据不渲染的问题。
- v1.3购物车列表的用户与商品关系列统一展示可读名称UUID 降级为复制和排障信息。

View File

@@ -79,6 +79,29 @@ for (const [key, label] of [
}
}
// 购物车关联列必须展示用户和商品名称UUID仅作为复制与排障信息保留。
const cartDefinition = resources.match(
/define\('ec_cart',[\s\S]*?\n\s*\]\),/,
)?.[0];
if (!cartDefinition) throw new Error('无法读取购物车资源定义');
for (const [key, label] of [
['user_account_identity', '用户'],
['ec_product_identity', '商品'],
]) {
const field = cartDefinition.match(
new RegExp(`relation\\('${key}'[\\s\\S]*?\\}\\)`),
)?.[0];
if (
!field ||
!field.includes(`listLabel: '${label}'`) ||
!field.includes('listRelationNameOnly: true') ||
!field.includes('displayRelationLabel: true') ||
!field.includes('showIdentityCopy: true')
) {
throw new Error(`购物车的${label}列必须以业务名称展示并保留唯一标识复制入口`);
}
}
if (/title="ID"|data-index="id"/.test(listPage)) {
throw new Error('标准资源列表不得把数据库ID作为业务列展示');
}

View File

@@ -695,7 +695,14 @@ export const resources: ResourceUiDefinition[] = [
define('ec_product_attribute', '商品属性', 'writable', [relation('ec_product_identity', '/ec_product', true), f('name', { required: true }), f('value', { required: true }), f('sort_no')]),
define('ec_product_image', '商品图片', 'writable', [relation('ec_product_identity', '/ec_product', true), f('image_uri', { required: true }), f('sort_no'), f('is_cover')]),
define('ec_cart', '购物车', 'readonly', [
relation('user_account_identity', '/user_account'), relation('ec_product_identity', '/ec_product'),
relation('user_account_identity', '/user_account', false, {
label: '用户', listLabel: '用户', listRelationNameOnly: true,
displayRelationLabel: true, showIdentityCopy: true,
}),
relation('ec_product_identity', '/ec_product', false, {
label: '商品', listLabel: '商品', listRelationNameOnly: true,
displayRelationLabel: true, showIdentityCopy: true,
}),
f('quantity'), f('selected'),
]),
define('ec_order', '商城订单', 'readonly', [