# MatchWatchList 观战列表
观战列表组件,用于显示观战房间列表,支持加载更多和观战点击交互。
# 特性
- 📋 列表展示 - 支持观战房间列表展示,支持自定义空状态
- 🔄 加载更多 - 基于 PressList 组件,支持滚动加载更多
- 🎨 主题定制 - 丰富的CSS变量支持主题定制
- 📱 响应式设计 - 适配不同屏幕尺寸
- ⚡ 轻量高效 - 优化的代码结构,性能出色
# 适用场景
- 电竞比赛观战房间列表
- 直播间列表展示
- 游戏房间列表
- 在线比赛观战入口
# 引入
import PressMatchWatchList from 'press-next/press-match-watch-list/press-match-watch-list';
# 代码演示
# 基础用法
<template>
<PressMatchWatchList
:list="componentProps.list"
@click="onWatchClick"
/>
</template>
<script setup lang="ts">
import PressMatchWatchList from 'press-next/press-match-watch-list/press-match-watch-list';
import { getMockData } from './demo-data';
// 使用模拟数据
const componentProps = getMockData();
// 事件处理
const onWatchClick = (item, index) => {
console.log('观战点击', item, index);
};
</script>
# 加载更多
<template>
<PressMatchWatchList
:list="watchList"
:loading="loading"
:finished="finished"
@load-more="onLoadMore"
@click="onWatchClick"
/>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const watchList = ref([
{ watchInfo: { id: 'group_1', groupName: '第 1 组', btnText: '观战' } },
{ watchInfo: { id: 'group_2', groupName: '第 2 组', btnText: '观战' } },
]);
const loading = ref(false);
const finished = ref(false);
const onLoadMore = () => {
loading.value = true;
// 模拟加载数据
setTimeout(() => {
// 加载新数据...
loading.value = false;
finished.value = true;
}, 1000);
};
const onWatchClick = (item, index) => {
console.log('观战点击', item, index);
};
</script>
# 空状态
<template>
<PressMatchWatchList
:list="[]"
empty-text="暂无观战房间"
empty-image="https://example.com/empty.png"
/>
</template>
# 自定义按钮样式
<template>
<PressMatchWatchList
:list="watchList"
@click="onWatchClick"
/>
</template>
<script setup lang="ts">
const watchList = [
{
watchInfo: {
id: 'group_1',
groupName: '第 1 组',
btnText: '观战',
},
},
{
watchInfo: {
id: 'final_group',
groupName: '决赛组',
btnText: '观战',
},
},
{
watchInfo: {
id: 'group_ended',
groupName: '已结束',
btnText: '查看回放',
},
},
];
const onWatchClick = (item, index) => {
console.log('观战点击', item, index);
};
</script>
# 自定义主题
<template>
<PressMatchWatchList
custom-class="my-custom-theme"
:list="watchList"
@click="onWatchClick"
/>
</template>
<script setup lang="ts">
const watchList = [
{ watchInfo: { id: 'group_1', groupName: '第 1 组', btnText: '观战' } },
];
const onWatchClick = (item, index) => {
console.log('观战点击', item, index);
};
</script>
<style>
.my-custom-theme {
/* 列表样式 */
--pmwl-watch-list-background-color: #f5f5f5;
/* 间距样式 */
--pmwl-item-margin-bottom: .32rem;
}
</style>
注意:观战项的样式由 PressMatchWatchItem 组件控制,请使用 --pmwi-* 前缀的CSS变量进行定制。详见 PressMatchWatchItem 文档。
# API
# Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| custom-class | 自定义样式类 | string | '' |
| list | 观战列表数据 | WatchItemData[] | [] |
| loading | 是否显示加载状态 | boolean | false |
| finished | 是否加载完成 | boolean | false |
| empty-text | 空状态文本 | string | '暂无观战数据' |
| finish-text | 加载完成文本 | string | '' |
| empty-image | 空状态图片地址 | string | - |
# WatchItemData 数据结构
// 观战项信息接口
interface WatchItemInfo {
groupName: string; // 组名
btnText?: string; // 按钮文本
id?: string; // 组ID
}
// 观战项数据接口
interface WatchItemData {
watchInfo: WatchItemInfo;
}
# Events
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| click | 点击观战按钮时触发 | (item: WatchItemData, index: number) |
| load-more | 滚动到底部时触发 | - |
# 注意事项
# 使用建议
- 列表自动更新:组件基于
PressList实现滚动加载,会自动触发加载更多事件 - 观战项样式定制:单个观战项的样式由
PressMatchWatchItem组件控制,使用--pmwi-*前缀的CSS变量进行定制。详见 PressMatchWatchItem 文档 - 空状态处理:当列表为空时自动展示空状态,可自定义空状态文本和图片
- 加载状态管理:通过
loading和finished属性控制加载状态,避免重复加载 - 事件处理:通过
click事件处理观战点击,通过load-more事件加载更多数据 - 响应式适配:在小屏幕设备上,建议适当调整相关尺寸变量
# 性能优化
- 组件使用虚拟化节点减少DOM层级
- 列表基于高性能的
PressList组件 - 样式使用CSS变量,便于动态主题切换
- 支持空状态优化用户体验
# 兼容性
- 支持 Vue 3.0+
- 兼容现代浏览器(Chrome 60+, Firefox 60+, Safari 12+)
- 支持微信小程序、支付宝小程序等平台
# 主题定制
组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件。
注意:观战项的样式由 PressMatchWatchItem 组件控制,请使用 --pmwi-* 前缀的CSS变量进行定制。详见 PressMatchWatchItem 文档。
# 样式变量
# 间距系统 (Spacing)
| 名称 | 默认值 | 描述 |
|---|---|---|
| --pmwl-item-margin-bottom | $spacing-md | 观战项底部间距 |
| --pmwl-item-last-child-margin-bottom | 0 | 观战项最后一项底部间距 |
# 块状系统 (Box Model)
| 名称 | 默认值 | 描述 |
|---|---|---|
| --pmwl-watch-list-width | 100% | 列表宽度 |
# 颜色系统 (Colors)
| 名称 | 默认值 | 描述 |
|---|---|---|
| --pmwl-watch-list-background-color | $color-surface-default | 背景色 |
# 其他属性 (Others)
| 名称 | 默认值 | 描述 |
|---|---|---|
| --pmwl-watch-list-position | relative | 列表定位方式 |