<wxs src="./filters.wxs" module="filters" />
|
<!--pages/index/index.wxml-->
|
<view class="container">
|
<!-- 搜索栏 - 暂时隐藏 -->
|
<view class="search-bar" style="display: none;">
|
<view class="search-input-wrapper">
|
<input
|
class="search-input"
|
placeholder="搜索赛事..."
|
value="{{searchKeyword}}"
|
bindinput="onSearchInput"
|
bindconfirm="onSearchSubmit"
|
/>
|
<view class="search-icon">🔍</view>
|
<view wx:if="{{searchKeyword}}" class="clear-icon" bindtap="onSearchClear">✕</view>
|
</view>
|
</view>
|
|
<!-- 轮播图 -->
|
<view class="banner-section" wx:if="{{banners.length > 0}}">
|
<swiper
|
class="banner-swiper"
|
indicator-dots="{{true}}"
|
autoplay="{{true}}"
|
interval="{{3000}}"
|
duration="{{500}}"
|
bindchange="onBannerChange"
|
>
|
<swiper-item
|
wx:for="{{banners}}"
|
wx:key="id"
|
bindtap="onBannerTap"
|
data-index="{{index}}"
|
>
|
<!-- 如果有媒体文件,显示第一个媒体文件 -->
|
<view wx:if="{{item.mediaFiles && item.mediaFiles.length > 0}}" class="banner-media">
|
<view wx:if="{{item.mediaFiles[0].type === 'image'}}" class="banner-image-wrapper">
|
<image class="banner-image" src="{{item.mediaFiles[0].url}}" mode="aspectFill" />
|
</view>
|
<view wx:elif="{{item.mediaFiles[0].type === 'video'}}" class="banner-video-wrapper">
|
<image class="banner-video-thumb" src="{{item.mediaFiles[0].thumbUrl || item.mediaFiles[0].url}}" mode="aspectFill" />
|
<view class="banner-video-play-btn">
|
<view class="play-icon">▶</view>
|
</view>
|
</view>
|
</view>
|
<!-- 如果没有媒体文件,显示封面图片或占位符 -->
|
<view wx:elif="{{item.coverImage && item.coverImage.fullUrl}}" class="banner-image-wrapper">
|
<image class="banner-image" src="{{item.coverImage.fullUrl}}" mode="aspectFill" />
|
</view>
|
<view wx:else class="banner-placeholder">
|
<text class="placeholder-text">{{item.title}}</text>
|
</view>
|
|
<!-- 覆盖层隐藏 -->
|
<view class="banner-overlay" style="display: none;">
|
<view class="banner-title">{{item.title}}</view>
|
<view class="banner-desc">{{item.content}}</view>
|
</view>
|
</swiper-item>
|
</swiper>
|
</view>
|
|
<!-- 模块标题 -->
|
<view class="section-title">比赛信息</view>
|
|
<!-- 筛选栏(隐藏,保留逻辑) -->
|
<view class="filter-bar" wx:if="{{false}}">
|
<view class="filter-tabs">
|
<view class="filter-tab {{filterStatus === 'all' ? 'active' : ''}}" bindtap="onFilterChange" data-status="all">全部</view>
|
<view class="filter-tab {{filterStatus === 'SIGNUP' ? 'active' : ''}}" bindtap="onFilterChange" data-status="SIGNUP">报名中</view>
|
<view class="filter-tab {{filterStatus === 'PLAYING' ? 'active' : ''}}" bindtap="onFilterChange" data-status="PLAYING">进行中</view>
|
<view class="filter-tab {{filterStatus === 'ENDED' ? 'active' : ''}}" bindtap="onFilterChange" data-status="ENDED">已结束</view>
|
</view>
|
</view>
|
|
<!-- 赛事列表:新版水平卡片(左图右文,按钮靠右) -->
|
<view class="activity-list">
|
<view
|
class="activity-card-horizontal"
|
wx:for="{{activities}}"
|
wx:key="id"
|
>
|
<view class="activity-row">
|
<view class="thumb-col">
|
<image wx:if="{{item.coverImage && item.coverImage.fullUrl}}" class="thumb-image" src="{{item.coverImage.fullUrl}}" mode="aspectFill" />
|
<view wx:else class="thumb-placeholder">{{item.nameText}}</view>
|
</view>
|
<view class="info-col">
|
<view class="activity-title-lg">{{item.name}}</view>
|
|
<view class="deadline">报名截止:{{filters.formatDateYYYYMMDD(item.signupDeadline)}}</view>
|
<view class="registered">已报名:{{item.playerCount}}人</view>
|
<view class="btn-row">
|
<button class="ghost-btn" catchtap="onDetailTap" data-id="{{item.id}}">查看详情</button>
|
</view>
|
</view>
|
</view>
|
</view>
|
|
<!-- 加载状态 -->
|
<view class="loading-wrapper" wx:if="{{loading}}">
|
<view class="loading"></view>
|
<text class="loading-text">加载中...</text>
|
</view>
|
|
<!-- 没有更多数据 -->
|
<view class="no-more" wx:if="{{!hasMore && activities.length > 0}}">
|
<text class="no-more-text">没有更多数据了</text>
|
</view>
|
|
<!-- 空状态 -->
|
<view class="empty-state" wx:if="{{!loading && activities.length === 0}}">
|
<view class="empty-icon">📋</view>
|
<view class="empty-text">暂无赛事信息</view>
|
<view class="empty-desc">请稍后再试或联系管理员</view>
|
</view>
|
</view>
|
</view>
|