yingsa/miniprogram/pages/index/index.wxml
ethanfly e871eed0e8 refactor: Improve data validation and avatar normalization
- Simplified data validation logic in the index.js file to handle cases where data is missing or incomplete.
- Updated the index.wxml file to provide a clearer message when no ranking data is available.
- Added a new method to normalize avatar URLs in the helper.js file, ensuring that default avatars are handled correctly across user and match controllers.
- Refactored user and match controllers to utilize the new avatar normalization method, enhancing consistency in avatar display.
2026-02-10 01:27:52 +08:00

86 lines
3.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 天梯排名页面 - 浅色高级感设计 -->
<view class="page-container">
<!-- 顶部装饰背景 -->
<view class="hero-section">
<view class="hero-pattern"></view>
<view class="hero-pattern-2"></view>
<!-- 门店信息 -->
<view class="store-header">
<view class="store-info">
<view class="store-dot"></view>
<text class="store-name">{{currentStore.storeName || '请选择门店'}}</text>
</view>
<view class="change-store-btn" bindtap="selectStore">
<text class="change-store-text">切换门店</text>
<text class="change-store-arrow"></text>
</view>
</view>
<!-- 页面标题 -->
<view class="page-header animate-fadeInUp" style="animation-delay: 0.05s">
<text class="page-title">天梯排名</text>
<text class="page-subtitle">挑战自我,超越巅峰</text>
</view>
</view>
<!-- 主要内容区域 -->
<view class="main-content">
<!-- 性别筛选标签 - 吸附在顶部 -->
<view class="filter-bar-wrapper">
<view class="filter-bar animate-fadeInUp" style="animation-delay: 0.1s">
<view class="filter-items">
<view class="filter-item {{gender === '' ? 'active' : ''}}" bindtap="setGender" data-gender="">
全部
</view>
<view class="filter-item {{gender === '1' ? 'active' : ''}}" bindtap="setGender" data-gender="1">
男子
</view>
<view class="filter-item {{gender === '2' ? 'active' : ''}}" bindtap="setGender" data-gender="2">
女子
</view>
</view>
<view class="locate-btn {{locating ? 'disabled' : ''}}" bindtap="locateMe">
{{locating ? '定位中' : '定位我'}}
</view>
</view>
</view>
<!-- 排名列表 -->
<view class="ranking-list">
<block wx:if="{{list.length > 0}}">
<view id="player-{{item.id}}" class="ranking-item stagger-item {{index < 3 ? 'top-rank' : ''}} {{item.id === myLadderUserId ? 'is-me' : ''}} animate-fadeInUp" wx:for="{{list}}" wx:key="id" bindtap="viewPlayer" data-id="{{item.id}}" data-player="{{item}}">
<!-- 排名徽章 -->
<view class="rank-badge {{item.rank === 1 ? 'top1' : item.rank === 2 ? 'top2' : item.rank === 3 ? 'top3' : 'normal'}}">
<text>{{item.rank}}</text>
</view>
<!-- 选手头像 -->
<image class="player-avatar" src="{{item.avatar || '/images/avatar-default.svg'}}" mode="aspectFill"></image>
<!-- 选手信息 -->
<view class="player-info">
<text class="player-name">{{item.realName}}</text>
<view class="player-meta">
<text class="player-level lv{{item.level}}">Lv{{item.level}}</text>
<text class="player-stats">胜率 {{item.winRate}}%</text>
</view>
</view>
<!-- 战力值 -->
<view class="player-power">
<text class="power-value">{{item.powerScore}}</text>
<text class="power-label">战力</text>
</view>
</view>
</block>
<!-- 空状态 -->
<view wx:elif="{{!loading}}" class="empty-state">
<image class="empty-icon" src="/images/empty-ranking.svg" mode="aspectFit"></image>
<text class="empty-title">暂无排名数据</text>
<text class="empty-desc">暂无排名数据</text>
</view>
<!-- 加载更多 -->
<view wx:if="{{loading}}" class="loading-state">
<text>加载中...</text>
</view>
<!-- 到底提示 -->
<view wx:if="{{list.length > 0 && !loading}}" class="load-more">
<text>— 已显示全部选手 —</text>
</view>
</view>
</view>
</view>