From 8337c34fcc761d07acaad796d10f3e12e9bbe2d1 Mon Sep 17 00:00:00 2001 From: lrj <owen.stl@gmail.com> Date: 星期日, 05 十月 2025 08:56:04 +0800 Subject: [PATCH] feat: 微信项目详情支持阶段评分时间轴 --- wx/pages/project/detail.wxml | 132 +++++++++++++++++++++++++++++-------------- 1 files changed, 88 insertions(+), 44 deletions(-) diff --git a/wx/pages/project/detail.wxml b/wx/pages/project/detail.wxml index 56425fa..9c2f49d 100644 --- a/wx/pages/project/detail.wxml +++ b/wx/pages/project/detail.wxml @@ -72,6 +72,57 @@ <text class="action-btn">{{item.mediaType === 'IMAGE' ? '棰勮' : item.mediaType === 'VIDEO' ? '鎾斁' : '鏌ョ湅'}}</text> </view> </view> + </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> @@ -128,49 +179,6 @@ </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> <!-- 鍔犺浇鐘舵�� --> @@ -184,4 +192,40 @@ <text class="error-icon">鈿狅笍</text> <text class="error-text">{{error}}</text> <button class="retry-btn" bindtap="loadProjectDetail">閲嶈瘯</button> -</view> \ No newline at end of file +</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> -- Gitblit v1.8.0