yingsa/miniprogram/pages/index/index.wxml
ethanfly 02937ca33c feat(天梯): 新增选手定位功能并调整挑战赛权重
- 在小程序天梯排名页添加“定位我”按钮,点击可滚动到当前用户所在位置
- 新增获取用户排名接口 `/ladder/my-rank` 用于定位计算
- 调整挑战赛权重从 1.5 降至 1.0,与日常畅打保持一致
- 新增数据库脚本 `setChallengeMatchWeightTo1.js` 用于更新历史数据
- 在管理员界面创建天梯用户时,根据所选等级自动填充默认战力值
- 修复管理员更新比赛时挑战赛权重强制设置为 1.0 的问题
- 新增天梯汇总大屏页面及相关路由
- 添加大屏比赛列表接口 `/match/display-list` 用于展示进行中和近期比赛
- 优化用户详情页的胜负场和胜率显示逻辑
- 修复小程序用户注册时的性别选择逻辑
2026-02-02 03:22:36 +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">每月完成3场比赛即可上榜</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>