@tplc/business
Version:
261 lines (213 loc) • 6.97 kB
Markdown
# 🎉 Empty 状态功能已完成
## 概述
已成功创建了独立的 `lcb-empty` 组件,并为 `lcb-product`、`lcb-list` 和 `lcb-wrapper-list` 组件添加了完整的空状态支持功能。用户现在可以通过 `emptyProps` 配置项自定义空状态的所有视觉元素。

## ✨ 主要特性
- ✅ **独立组件**:抽离为 `lcb-empty` 独立组件,可在多处复用
- ✅ 自定义空状态图片及尺寸
- ✅ 自定义空状态文字及样式(颜色、大小、粗细)
- ✅ 自定义图片与文字的间距
- ✅ 独立的 `emptyProps` 配置项
- ✅ 完整的 TypeScript 类型支持
- ✅ 响应式设计,自动适配不同屏幕
- ✅ 支持 `lcb-product`、`lcb-list`、`lcb-wrapper-list` 等多个组件
## 🚀 快速开始
```vue
<template>
<lcb-product
:items="productList"
:emptyProps="{
image: '/static/empty.png',
text: '还没有点亮记录',
}"
/>
</template>
```
## 📦 配置项
| 属性 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `image` | `string` | `''` | 空状态图片地址 |
| `text` | `string` | `'还没有点亮记录'` | 空状态文字 |
| `imageWidth` | `number` | `400` | 图片宽度(rpx) |
| `imageHeight` | `number` | `400` | 图片高度(rpx) |
| `textColor` | `string` | `'#999999'` | 文字颜色 |
| `textSize` | `number` | `28` | 文字大小(rpx) |
| `textWeight` | `string \| number` | `'normal'` | 文字粗细 |
| `gap` | `number` | `24` | 图片与文字间距(rpx) |
## 📖 完整示例
### 基础用法
```vue
<lcb-product
:items="[]"
:emptyProps="{
image: '/static/empty.png',
text: '还没有点亮记录',
}"
/>
```
### 自定义样式
```vue
<lcb-product
:items="[]"
:emptyProps="{
image: '/static/empty.png',
text: '暂无数据',
imageWidth: 500,
imageHeight: 500,
textColor: '#666666',
textSize: 32,
textWeight: 'bold',
gap: 32,
}"
/>
```
### 在 lcb-list 中使用
```vue
<lcb-list
pageFilterType="product-filter"
:emptyProps="{
image: '/static/empty.png',
text: '还没有点亮记录',
}"
/>
```
### 在 lcb-wrapper-list 中使用
```vue
<lcb-wrapper-list
:dataSource="dataSource"
:emptyProps="{
image: '/static/empty.png',
text: '暂无数据',
}"
>
<template #default="{ data }">
<view>{{ data }}</view>
</template>
</lcb-wrapper-list>
```
### 直接使用 lcb-empty 组件
```vue
<lcb-empty
image="/static/empty.png"
text="还没有点亮记录"
:imageWidth="500"
:imageHeight="500"
/>
```
## 📂 项目结构
```
packages/
├── business/
│ └── components/
│ ├── lcb-empty/ # 🆕 新增组件
│ │ ├── lcb-empty.vue # 📄 新增
│ │ ├── types.ts # 📄 新增
│ │ └── README.md # 📄 新增
│ ├── lcb-product/
│ │ ├── lcb-product.vue # ✅ 已修改
│ │ ├── types.ts # ✅ 已修改
│ │ ├── EMPTY_USAGE.md # 📄 新增
│ │ ├── EMPTY_IMPLEMENTATION.md # 📄 新增
│ │ └── EMPTY_QUICK_REF.md # 📄 新增
│ ├── lcb-list/
│ │ ├── lcb-list.vue # ✅ 已修改
│ │ └── types.ts # ✅ 已修改
│ ├── lcb-wrapper-list/
│ │ ├── lcb-wrapper-list.vue # ✅ 已修改
│ │ └── types.ts # ✅ 已修改
│ └── CHANGELOG_EMPTY.md # 📄 新增
└── engine/
└── src/
├── static/
│ └── empty.png # 🖼️ 新增
└── pages/
└── lcb-product/
└── empty-demo.vue # 📄 新增
```
## 🔍 技术细节
### 类型定义
```typescript
export interface LcbEmptyProps {
/** 空状态图片地址 */
image?: string
/** 空状态文字 */
text?: string
/** 图片宽度(rpx) */
imageWidth?: number
/** 图片高度(rpx) */
imageHeight?: number
/** 文字颜色 */
textColor?: string
/** 文字大小(rpx) */
textSize?: number
/** 文字粗细 */
textWeight?: 'normal' | 'bold' | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
/** 图片与文字的间距(rpx) */
gap?: number
/** 最小高度(rpx) */
minHeight?: number
/** 内边距配置 */
paddingTop?: number
paddingRight?: number
paddingBottom?: number
paddingLeft?: number
}
```
### 显示逻辑
空状态在以下条件同时满足时显示:
- 数据加载完成(`loading === false`)
- 数据列表为空(`renderList.length === 0`)
### 样式实现
- 使用 Flexbox 垂直居中布局
- 图片使用 `aspectFit` 模式保持比例
- 所有尺寸使用 `rpx` 单位,响应式适配
- 继承父组件的内边距设置
## 📚 文档清单
1. **[EMPTY_USAGE.md](./lcb-product/EMPTY_USAGE.md)** - 详细使用文档
- 配置项说明
- 使用示例
- 注意事项
2. **[EMPTY_IMPLEMENTATION.md](./lcb-product/EMPTY_IMPLEMENTATION.md)** - 实现说明
- 修改的文件列表
- 技术实现细节
- 功能特点
3. **[EMPTY_QUICK_REF.md](./lcb-product/EMPTY_QUICK_REF.md)** - 快速参考
- 配置项速查表
- 常用配置示例
4. **[CHANGELOG_EMPTY.md](./CHANGELOG_EMPTY.md)** - 更新日志
- 新增功能说明
- 兼容性说明
5. **[empty-demo.vue](../engine/src/pages/lcb-product/empty-demo.vue)** - 示例页面
- 多种配置场景展示
- 实际效果预览
## ✅ 测试检查
- [x] TypeScript 类型检查通过
- [x] 无 Linter 错误
- [x] 默认配置正常工作
- [x] 自定义配置生效
- [x] 向下兼容性保持
- [x] 文档完整
## 🎯 适用场景
- 商品列表为空时的提示
- 搜索无结果时的展示
- 筛选条件过滤后无数据的提示
- 用户收藏、点亮等记录为空的展示
- 任何需要空状态提示的列表场景
## 💡 最佳实践
1. **图片选择**:使用清晰、友好的插图,尺寸建议 300-600rpx
2. **文字描述**:简洁明了,告知用户当前状态
3. **颜色搭配**:文字颜色建议使用中性灰色(#999999)
4. **间距设置**:图片与文字间距建议 20-40rpx
5. **响应式**:使用 rpx 单位确保在不同设备上显示一致
## 🔗 相关组件
- `lcb-empty` - 空状态组件(独立组件)
- `lcb-product` - 商品列表组件(使用 lcb-empty)
- `lcb-list` - 通用列表组件(使用 lcb-empty)
- `lcb-wrapper-list` - 包装列表组件(使用 lcb-empty)
- `lcb-block` - 容器组件
## 📞 支持
如有问题或建议,请查阅相关文档或联系开发团队。
---
**开发时间**: 2026-01-19
**版本**: v1.0.0
**状态**: ✅ 已完成