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