feat(components): 新增 GiftCard礼品卡组件

- 新增 GiftCard 组件,支持多种类型礼品卡的展示和交互
- 组件包含商品信息、价格、折扣、使用指南等丰富功能- 优化图像展示,支持单
This commit is contained in:
2025-08-17 00:06:03 +08:00
parent 1b24a611a8
commit ecb5d9059a
22 changed files with 2788 additions and 191 deletions

View File

@@ -0,0 +1,145 @@
# 礼品卡商品信息显示使用说明
## 概述
已成功优化礼品卡组件,现在可以正确显示商品名称和图片。主要改进包括:
1. **优先显示商品名称**`goodsName` 优先于 `name` 显示
2. **显示商品图片**:使用 `goodsImage` 字段显示商品图片
3. **丰富的商品信息**:包括规格、分类、标签、使用说明等
4. **更好的用户体验**:清晰的信息层次和视觉效果
## 数据结构
### ShopGift 模型中的关键字段
```typescript
interface ShopGift {
id?: number;
name?: string; // 礼品卡名称
goodsName?: string; // 商品名称(优先显示)
goodsImage?: string; // 商品图片
goodsId?: number; // 关联商品ID
description?: string; // 礼品卡描述
faceValue?: string; // 面值
type?: number; // 类型10实物 20虚拟 30服务
useStatus?: number; // 状态0可用 1已使用 2已过期
// ... 其他字段
}
```
## 代码实现
### 1. 数据转换函数
`src/user/gift/index.tsx` 中的 `transformGiftData` 函数已经优化:
```typescript
const transformGiftData = (gift: ShopGift): GiftCardProps => {
return {
id: gift.id || 0,
name: gift.goodsName || gift.name || '礼品卡', // 优先显示商品名称
description: gift.description || gift.instructions,
code: gift.code,
goodsImage: gift.goodsImage, // 商品图片
faceValue: gift.faceValue,
type: gift.type,
useStatus: gift.useStatus,
expireTime: gift.expireTime,
useTime: gift.useTime,
useLocation: gift.useLocation,
contactInfo: gift.contactInfo,
// 添加商品信息
goodsInfo: {
...(gift.goodsId && {
specification: `礼品卡面值:¥${gift.faceValue}`,
category: getTypeText(gift.type),
tags: [
getTypeText(gift.type),
gift.useStatus === 0 ? '可使用' : gift.useStatus === 1 ? '已使用' : '已过期'
].filter(Boolean),
instructions: gift.instructions ? [gift.instructions] : [
'请在有效期内使用',
'出示兑换码即可使用',
'不可兑换现金'
],
notices: [
'礼品卡一经使用不可退换',
'请妥善保管兑换码',
'如有疑问请联系客服'
]
})
},
showCode: gift.useStatus === 0,
showUseBtn: gift.useStatus === 0,
showDetailBtn: true,
showGoodsDetail: true, // 显示商品详情
theme: getThemeByType(gift.type),
onUse: () => handleUseGift(gift),
onDetail: () => handleGiftDetail(gift)
}
}
```
### 2. 类型文本获取函数
```typescript
const getTypeText = (type?: number): string => {
switch (type) {
case 10: return '实物礼品卡'
case 20: return '虚拟礼品卡'
case 30: return '服务礼品卡'
default: return '礼品卡'
}
}
```
## 显示效果
### 商品信息展示包括:
1. **基础信息**
- 商品名称(优先显示)
- 商品图片
- 礼品卡面值
- 商品分类
2. **详细信息**
- 商品规格
- 商品标签
- 使用说明
- 注意事项
3. **状态信息**
- 使用状态标识
- 过期时间提醒
- 兑换码显示
## 测试验证
可以使用测试页面验证显示效果:
```bash
# 访问测试页面
/user/gift/test
```
测试页面包含了不同类型和状态的礼品卡示例,可以验证:
- 商品名称正确显示
- 商品图片正常加载
- 商品信息完整展示
- 不同状态的样式效果
## 注意事项
1. **图片加载**:确保 `goodsImage` 字段包含有效的图片URL
2. **数据完整性**:建议在后端确保 `goodsName``goodsImage` 字段有值
3. **兼容性**:保持对旧数据的兼容,当 `goodsName` 为空时使用 `name` 字段
4. **性能优化**:大量礼品卡列表时注意图片懒加载
## 后续优化建议
1. **图片优化**:添加图片懒加载和占位符
2. **缓存机制**:对商品信息进行本地缓存
3. **错误处理**:添加图片加载失败的降级处理
4. **用户体验**:添加骨架屏和加载状态