| | |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 比赛阶段时间轴 --> |
| | | <view class="timeline-card"> |
| | | <view class="card-header"> |
| | | <text class="card-title">比赛阶段</text> |
| | | </view> |
| | | |
| | | <view class="timeline-loading" wx:if="{{timelineLoading}}"> |
| | | <view class="loading-spinner small"></view> |
| | | <text class="loading-text">时间轴加载中...</text> |
| | | </view> |
| | | |
| | | <view class="timeline-error" wx:elif="{{timelineError}}"> |
| | | {{timelineError}} |
| | | </view> |
| | | |
| | | <view class="timeline-wrapper" wx:elif="{{timeline.length > 0}}"> |
| | | <view |
| | | class="timeline-item {{item.participated ? 'timeline-item-active' : 'timeline-item-inactive'}} {{item.isClickable ? 'timeline-item-clickable' : ''}}" |
| | | wx:for="{{timeline}}" |
| | | wx:key="stageId" |
| | | bindtap="openStageDetail" |
| | | data-player-id="{{item.activityPlayerId}}" |
| | | data-clickable="{{item.isClickable}}" |
| | | data-participated="{{item.participated}}" |
| | | > |
| | | <view class="timeline-axis"> |
| | | <view class="timeline-dot"></view> |
| | | <view class="timeline-line" wx:if="{{index < timeline.length - 1}}"></view> |
| | | </view> |
| | | <view class="timeline-body"> |
| | | <view class="timeline-title"> |
| | | <text class="stage-name">{{item.stageName}}</text> |
| | | <text class="stage-score">{{item.scoreText}}</text> |
| | | </view> |
| | | <view class="timeline-sub"> |
| | | <text class="stage-time">{{item.matchTimeText || '时间待定'}}</text> |
| | | <text class="stage-status" wx:if="{{item.participated}}">已参赛</text> |
| | | <text class="stage-status stage-status-inactive" wx:else>未参赛</text> |
| | | </view> |
| | | <view class="timeline-actions" wx:if="{{item.hasRating && item.activityPlayerId}}"> |
| | | <text class="detail-link">【详情】</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="timeline-empty" wx:else> |
| | | 暂无阶段信息 |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 参赛人信息 - 已隐藏 --> |
| | | <!-- |
| | | <view class="player-card" wx:if="{{projectDetail.playerInfo}}"> |
| | |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 评审信息 --> |
| | | <view class="rating-card" wx:if="{{ratingStats}}"> |
| | | <view class="card-header"> |
| | | <text class="card-title">评审信息</text> |
| | | </view> |
| | | |
| | | <view class="rating-info"> |
| | | <!-- 总平均分显示 --> |
| | | <view class="average-score-section"> |
| | | <view class="average-score-container"> |
| | | <text class="average-score-label">总平均分</text> |
| | | <text class="average-score-value">{{ratingStats.averageScore || '暂无评分'}}</text> |
| | | <text class="rating-count-text">({{ratingStats.ratingCount || 0}}位评委已评分)</text> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 各评委评分详情 --> |
| | | <view class="judge-ratings-section" wx:if="{{ratingStats.judgeRatings && ratingStats.judgeRatings.length > 0}}"> |
| | | <text class="section-title">评委评分详情</text> |
| | | <view |
| | | class="judge-rating" |
| | | wx:for="{{ratingStats.judgeRatings}}" |
| | | wx:key="judgeId" |
| | | wx:if="{{item.hasRated}}" |
| | | > |
| | | <view class="rating-header"> |
| | | <view class="judge-info"> |
| | | <text class="judge-label">评委 {{index + 1}}</text> |
| | | <text class="rating-status rated">已评分</text> |
| | | </view> |
| | | <view class="score-info"> |
| | | <text class="score">{{item.totalScore}}分</text> |
| | | <text class="rating-time">{{item.ratingTimeText}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="rating-comment" wx:if="{{item.remark}}"> |
| | | <text class="comment-label">点评:</text> |
| | | <text class="comment-text">{{item.remark}}</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 加载状态 --> |
| | |
| | | <text class="error-text">{{error}}</text> |
| | | <button class="retry-btn" bindtap="loadProjectDetail">重试</button> |
| | | </view> |
| | | |
| | | <!-- 阶段评分详情弹窗 --> |
| | | <view class="rating-detail-overlay" wx:if="{{showRatingDetail}}"> |
| | | <view class="overlay-mask" bindtap="closeStageDetail"></view> |
| | | <view class="overlay-panel"> |
| | | <view class="overlay-header"> |
| | | <text class="overlay-title">{{ratingDetail ? ratingDetail.stageName : '评分详情'}}</text> |
| | | <view class="overlay-close" bindtap="closeStageDetail">×</view> |
| | | </view> |
| | | <text class="overlay-subtitle">{{ratingDetail && ratingDetail.matchTimeText ? ratingDetail.matchTimeText : '时间待定'}}</text> |
| | | <view class="overlay-summary"> |
| | | <text class="summary-score">平均分:{{ratingDetail ? ratingDetail.averageScoreText : '暂无评分'}}</text> |
| | | <text class="summary-count">评委数:{{ratingDetail ? ratingDetail.ratingCount : 0}}</text> |
| | | </view> |
| | | <view class="overlay-body"> |
| | | <view class="panel-loading" wx:if="{{ratingDetailLoading}}"> |
| | | <view class="loading-spinner small"></view> |
| | | <text class="loading-text">加载评分详情...</text> |
| | | </view> |
| | | <view class="panel-error" wx:elif="{{ratingDetailError}}">{{ratingDetailError}}</view> |
| | | <block wx:else> |
| | | <view class="judge-item" wx:for="{{(ratingDetail && ratingDetail.judgeRatings) ? ratingDetail.judgeRatings : []}}" wx:key="judgeId"> |
| | | <view class="judge-header"> |
| | | <text class="judge-name">{{item.judgeName}}</text> |
| | | <text class="judge-score">{{item.totalScoreText}}</text> |
| | | </view> |
| | | <text class="judge-time" wx:if="{{item.ratingTimeText}}">{{item.ratingTimeText}}</text> |
| | | <view class="judge-feedback" wx:if="{{item.feedback}}">{{item.feedback}}</view> |
| | | </view> |
| | | <view class="panel-empty" wx:if="{{ratingDetail && ratingDetail.judgeRatings && ratingDetail.judgeRatings.length === 0}}"> |
| | | 暂无评分详情 |
| | | </view> |
| | | </block> |
| | | </view> |
| | | </view> |
| | | </view> |