yingsa/miniprogram/pages/match/challenge/index.wxml

213 lines
8.9 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-bg">
<view class="hero-pattern"></view>
</view>
<!-- 主要内容 -->
<view class="main-content">
<!-- 页面标题 -->
<view class="page-header">
<text class="page-title">🏸 发起挑战</text>
<text class="page-subtitle">扫描对手会员码,开启对决</text>
</view>
<!-- 当前门店 -->
<view class="store-bar" wx:if="{{currentStore}}" bindtap="goToStore">
<text class="store-icon">📍</text>
<text class="store-name">{{currentStore.storeName}}</text>
<text class="store-arrow"></text>
</view>
<!-- 未登录或非天梯用户提示 -->
<view class="notice-card animate-fadeInUp" wx:if="{{!ladderUser}}">
<view class="notice-icon">🏸</view>
<view class="notice-content">
<text class="notice-title">暂未开通天梯</text>
<text class="notice-desc">请联系门店工作人员加入天梯系统</text>
</view>
<view class="notice-action" bindtap="refreshLadderInfo">
<text class="refresh-text">刷新</text>
</view>
</view>
<!-- 比赛功能区 -->
<block wx:else>
<!-- 用户信息卡片 -->
<view class="user-card animate-fadeInUp">
<view class="user-card-inner">
<view class="user-avatar-box">
<image class="user-avatar" src="{{userInfo.avatar || '/images/avatar-default.svg'}}" mode="aspectFill"></image>
</view>
<view class="user-info-box">
<view class="user-name-row">
<text class="user-name">{{ladderUser.realName}}</text>
<view class="user-level lv{{ladderUser.level}}">{{ladderUser.levelName || 'Lv' + ladderUser.level}}</view>
</view>
<view class="user-stats-row">
<view class="mini-stat">
<text class="mini-stat-value">{{ladderUser.powerScore}}</text>
<text class="mini-stat-label">战力分</text>
</view>
<view class="mini-stat">
<text class="mini-stat-value win">{{ladderUser.winCount || 0}}</text>
<text class="mini-stat-label">胜场</text>
</view>
<view class="mini-stat">
<text class="mini-stat-value">{{ladderUser.matchCount || 0}}</text>
<text class="mini-stat-label">总场次</text>
</view>
</view>
</view>
</view>
</view>
<!-- 扫码入口 - 并排展示 -->
<view class="scan-grid animate-fadeInUp" style="animation-delay: 0.1s">
<view class="scan-card challenge" bindtap="startChallenge">
<view class="scan-icon-wrapper">
<text class="scan-icon">⚔️</text>
</view>
<text class="scan-title">挑战赛</text>
<text class="scan-desc">1v1 对决</text>
<view class="scan-badge">权重 ×1.5</view>
</view>
<view class="scan-card ranking" bindtap="joinRankingMatch">
<view class="scan-icon-wrapper">
<text class="scan-icon">🏆</text>
</view>
<text class="scan-title">排位赛</text>
<text class="scan-desc">多人竞技</text>
<view class="scan-badge accent">扫码加入</view>
</view>
</view>
<!-- 正在进行中的比赛 -->
<view class="ongoing-card animate-fadeInUp" style="animation-delay: 0.12s" wx:if="{{ongoingMatches.length > 0}}">
<view class="ongoing-header">
<view class="ongoing-header-left">
<text class="ongoing-icon">🔥</text>
<text class="ongoing-title">进行中的比赛</text>
</view>
<view class="ongoing-count">{{ongoingMatches.length}}</view>
</view>
<view class="ongoing-list">
<view class="ongoing-item {{item.type === 1 ? 'challenge' : 'ranking'}}"
wx:for="{{ongoingMatches}}"
wx:key="id"
bindtap="goToMatchDetail"
data-match="{{item}}">
<view class="ongoing-item-header">
<view class="match-type-tag {{item.type === 1 ? 'challenge' : 'ranking'}}">
<text>{{item.typeName}}</text>
</view>
<view class="match-status-tag {{item.status === 0 ? 'waiting' : 'playing'}}">
{{item.statusName}}
</view>
</view>
<view class="ongoing-item-body">
<block wx:if="{{item.type === 1}}">
<!-- 挑战赛:显示对手信息 -->
<view class="opponent-info" wx:if="{{item.opponent}}">
<image class="opponent-avatar" src="{{item.opponent.avatar || '/images/avatar-default.svg'}}" mode="aspectFill"></image>
<view class="opponent-detail">
<text class="opponent-name">VS {{item.opponent.realName}}</text>
<view class="opponent-stats">
<text class="opponent-level">Lv{{item.opponent.level}}</text>
<text class="opponent-power">战力 {{item.opponent.powerScore}}</text>
</view>
</view>
</view>
</block>
<block wx:else>
<!-- 排位赛:显示比赛信息 -->
<view class="ranking-info">
<view class="ranking-name">{{item.name || '排位赛'}}</view>
<view class="ranking-meta">
<text class="ranking-stage">{{item.stageName}}</text>
<text class="ranking-players">{{item.playerCount}}人参赛</text>
</view>
<view class="current-opponent" wx:if="{{item.opponent}}">
<text class="current-label">当前对手:</text>
<text class="current-name">{{item.opponent.realName}}</text>
</view>
<view class="my-status {{item.myStatus}}">
<text wx:if="{{item.myStatus === 'waiting'}}">⏳ 等待中</text>
<text wx:elif="{{item.myStatus === 'playing'}}">🎾 比赛中</text>
<text wx:else>✅ 已完成</text>
</view>
</view>
</block>
</view>
<view class="ongoing-item-footer">
<text class="match-weight" wx:if="{{item.weight > 1}}">权重 ×{{item.weight}}</text>
<text class="enter-btn">查看详情 </text>
</view>
</view>
</view>
</view>
<!-- 待确认比赛 -->
<view class="pending-card animate-fadeInUp" style="animation-delay: 0.15s" wx:if="{{pendingGames.length > 0}}">
<view class="pending-header">
<text class="pending-title">📋 待确认比分</text>
<view class="pending-count">{{pendingGames.length}}</view>
</view>
<view class="pending-list">
<view class="pending-item" wx:for="{{pendingGames}}" wx:key="id" bindtap="confirmGame" data-game="{{item}}">
<view class="game-info">
<text class="vs-tag">VS</text>
<text class="opponent-name">{{item.opponentName}}</text>
</view>
<text class="game-score">{{item.myScore}} : {{item.opponentScore}}</text>
<view class="confirm-btn">确认</view>
</view>
</view>
</view>
</block>
<!-- 战力值规则 -->
<view class="rules-card animate-fadeInUp" style="animation-delay: 0.2s">
<view class="rules-header">
<view class="rules-icon">📖</view>
<text class="rules-title">战力值规则</text>
</view>
<view class="rules-grid">
<view class="rule-item">
<view class="rule-icon win">↑</view>
<view class="rule-text">
<text class="rule-label">胜方</text>
<text class="rule-value positive">+15 基础分</text>
</view>
</view>
<view class="rule-item">
<view class="rule-icon lose">↓</view>
<view class="rule-text">
<text class="rule-label">败方</text>
<text class="rule-value negative">-5 基础分</text>
</view>
</view>
<view class="rule-item">
<view class="rule-icon bonus">★</view>
<view class="rule-text">
<text class="rule-label">以下克上</text>
<text class="rule-value">额外 +10%</text>
</view>
</view>
<view class="rule-item">
<view class="rule-icon shield">🛡</view>
<view class="rule-text">
<text class="rule-label">新手保护</text>
<text class="rule-value">输分减半</text>
</view>
</view>
</view>
<view class="rules-note">
💡 同一对手30天内仅限挑战1次
</view>
</view>
</view>
</view>