From 58d9f460b2f8c34430285115e2557d18333c5cab Mon Sep 17 00:00:00 2001
From: Codex Assistant <codex@example.com>
Date: 星期三, 08 十月 2025 14:16:55 +0800
Subject: [PATCH] feat: 修复Player实体phone字段数据冗余问题并优化小程序报名逻辑

---
 wx/pages/judge/review.wxml |  211 ++++++++++++++--------------------------------------
 1 files changed, 57 insertions(+), 154 deletions(-)

diff --git a/wx/pages/judge/review.wxml b/wx/pages/judge/review.wxml
index 1ed466d..0a2cae6 100644
--- a/wx/pages/judge/review.wxml
+++ b/wx/pages/judge/review.wxml
@@ -16,32 +16,37 @@
           {{reviewStatus === 'COMPLETED' ? '宸茶瘎瀹�' : '寰呰瘎瀹�'}}
         </view>
       </view>
-      
+
       <view class="submission-detail">
-        <text class="submission-title">{{submission.title}}</text>
-        <text class="submission-desc">{{submission.description}}</text>
-        
+        <view style="display: flex; flex-direction: column;">
+          <text class="submission-title">{{submission.title}}</text>
+          <text class="submission-desc">{{submission.description || '鏆傛棤椤圭洰鎻忚堪'}}</text>
+        </view>
+
+
         <!-- 鍙傝禌鑰呬俊鎭� -->
         <view class="participant-info">
           <view class="participant-header">
             <text class="participant-label">鍙傝禌鑰咃細</text>
             <view class="contact-btn" bindtap="onContactParticipant">
-              <text class="contact-icon">馃挰</text>
-              <text class="contact-text">鑱旂郴</text>
+              <text class="contact-icon">馃摓</text>
+              <text class="contact-text">鎷ㄦ墦鐢佃瘽</text>
             </view>
           </view>
-          
+
           <view class="participant-detail">
             <image class="participant-avatar" src="{{submission.participant.avatar}}" mode="aspectFill"></image>
             <view class="participant-text">
-              <text class="participant-name">{{submission.participant.name}}</text>
-              <text class="participant-school">{{submission.participant.school}} - {{submission.participant.major}}</text>
+              <text class="participant-name">{{submission.participant.name || '鍖垮悕'}}</text>
+              <text class="participant-field">鎬у埆锛歿{submission.participant.gender || '鏈~鍐�'}}</text>
+              <text class="participant-field">鍑虹敓鏃ユ湡锛歿{submission.participant.birthday || '鏈~鍐�'}}</text>
+              <text class="participant-field">鎵�灞炲尯鍩燂細{{submission.participant.region || '鏈~鍐�'}}</text>
+              <text class="participant-field">瀛﹀巻锛歿{submission.participant.education || '鏈~鍐�'}}</text>
             </view>
           </view>
-          
-          <!-- 鍥㈤槦淇℃伅 -->
-          <view wx:if="{{submission.team}}" class="team-info">
-            <text class="team-label">鍥㈤槦锛歿{submission.team.name}}</text>
+
+          <view wx:if="{{submission.team && submission.team.members}}" class="team-info">
+            <text class="team-label">鍥㈤槦锛歿{submission.team.name || '鏈懡鍚嶅洟闃�'}}</text>
             <view class="team-members">
               <view wx:for="{{submission.team.members}}" wx:key="id" class="team-member">
                 <text class="member-name">{{item.name}}</text>
@@ -50,74 +55,25 @@
             </view>
           </view>
         </view>
-        
-        <text class="submit-time">鎻愪氦鏃堕棿锛歿{formatDate(submission.submittedAt)}}</text>
+
       </view>
     </view>
 
-    <!-- 浣滃搧濯掍綋 -->
-    <view wx:if="{{submission.images.length > 0 || submission.videos.length > 0}}" class="media-section">
-      <text class="section-title">浣滃搧灞曠ず</text>
-      
-      <!-- 鍥剧墖 -->
-      <view wx:if="{{submission.images.length > 0}}" class="media-grid">
-        <view 
-          wx:for="{{submission.images}}" 
-          wx:key="*this"
-          class="media-item image-item"
-          data-url="{{item}}"
-          data-type="image"
-          bindtap="onMediaTap"
-        >
-          <image class="media-image" src="{{item}}" mode="aspectFill"></image>
-        </view>
-      </view>
-      
-      <!-- 瑙嗛 -->
-      <view wx:if="{{submission.videos.length > 0}}" class="media-grid">
-        <view 
-          wx:for="{{submission.videos}}" 
-          wx:key="*this"
-          class="media-item video-item"
-          data-url="{{item}}"
-          data-type="video"
-          bindtap="onMediaTap"
-        >
-          <video class="media-video" src="{{item}}" poster="{{item}}" controls></video>
-          <view class="play-overlay">
-            <text class="play-icon">鈻�</text>
+    <!-- 浣滃搧绱犳潗 -->
+    <view wx:if="{{submission.mediaList && submission.mediaList.length > 0}}" class="media-section">
+      <text class="section-title">鍙傝禌浣滃搧</text>
+      <view class="media-list">
+        <view wx:for="{{submission.mediaList}}" wx:key="id" class="media-item" bindtap="onMediaTap" data-index="{{index}}">
+          <view class="media-thumb-wrapper">
+            <image wx:if="{{item.mediaType === 'image' || item.mediaType === 'video'}}" class="media-thumb" src="{{item.thumbUrl}}" mode="aspectFill" />
+            <view wx:elif="{{item.mediaType === 'pdf'}}" class="media-icon pdf">PDF</view>
+            <view wx:elif="{{item.mediaType === 'word'}}" class="media-icon doc">DOC</view>
+            <view wx:else class="media-icon file">FILE</view>
+            <view wx:if="{{item.mediaType === 'video'}}" class="media-play">鈻�</view>
           </view>
-        </view>
-      </view>
-    </view>
-
-    <!-- 浣滃搧鏂囦欢 -->
-    <view wx:if="{{submission.files.length > 0}}" class="files-section">
-      <text class="section-title">浣滃搧鏂囦欢</text>
-      
-      <view class="file-list">
-        <view 
-          wx:for="{{submission.files}}" 
-          wx:key="id"
-          class="file-item"
-        >
-          <view class="file-info">
-            <text class="file-icon">馃搫</text>
-            <view class="file-detail">
-              <text class="file-name">{{item.name}}</text>
-              <text class="file-size">{{getFileSizeText(item.size)}}</text>
-            </view>
-          </view>
-          
-          <view 
-            class="download-btn {{item.isDownloading ? 'downloading' : ''}}"
-            data-file-id="{{item.id}}"
-            data-file-name="{{item.name}}"
-            data-file-url="{{item.url}}"
-            bindtap="onDownloadFile"
-          >
-            <text class="download-icon">{{item.isDownloading ? '鈴�' : '猬�'}}</text>
-            <text class="download-text">{{item.isDownloading ? '涓嬭浇涓�' : '涓嬭浇'}}</text>
+          <view class="media-info">
+            <text class="media-name">{{item.name}}</text>
+            <text class="media-size">{{getFileSizeText(item.size)}}</text>
           </view>
         </view>
       </view>
@@ -126,113 +82,60 @@
     <!-- 璇勫鏍囧噯 -->
     <view class="criteria-section">
       <text class="section-title">璇勫鏍囧噯</text>
-      
+
       <view class="criteria-list">
         <view wx:for="{{criteria}}" wx:key="id" class="criterion-item">
           <view class="criterion-header">
             <text class="criterion-name">{{item.name}}</text>
-            <text class="criterion-score">{{scores[item.id] || 0}}/{{item.maxScore}}鍒�</text>
+            <text class="criterion-score">{{scores[item.id] || 0}} / {{item.maxScore}} 鍒�</text>
           </view>
-          
-          <text class="criterion-desc">{{item.description}}</text>
-          
-          <!-- 璇勫垎閫夋嫨鍣� -->
-          <view class="score-selector">
-            <picker 
-              range="{{scoreOptions}}" 
-              range-key="label"
-              value="{{(scores[item.id] || 1) - 1}}"
-              data-criterion-id="{{item.id}}"
-              bindchange="onScoreChange"
-              disabled="{{reviewStatus === 'COMPLETED'}}"
-            >
-              <view class="score-picker {{reviewStatus === 'COMPLETED' ? 'disabled' : ''}}">
-                <text class="score-text">{{getScoreLabel(scores[item.id] || 0)}}</text>
-                <text class="picker-arrow">{{reviewStatus === 'COMPLETED' ? '' : '鈻�'}}</text>
-              </view>
-            </picker>
+
+          <!-- 璇勫垎璇存槑宸茬Щ闄わ紝涓嶹eb绔繚鎸佷竴鑷� -->
+
+          <view class="score-control">
+            <view class="score-btn" data-criterion-id="{{item.id}}" data-index="{{index}}" bindtap="decreaseScore">-</view>
+            <input class="score-input" type="digit" value="{{scores[item.id] || 0}}" data-criterion-id="{{item.id}}" data-index="{{index}}" bindinput="onScoreChange" placeholder="0" />
+            <view class="score-btn" data-criterion-id="{{item.id}}" data-index="{{index}}" bindtap="increaseScore">+</view>
           </view>
         </view>
       </view>
-      
-      <!-- 鎬诲垎鏄剧ず -->
+
       <view class="total-score">
         <text class="total-label">鎬诲垎锛�</text>
-        <text class="total-value">{{totalScore}}/{{maxScore}}鍒�</text>
+        <text class="total-value">{{totalScore}} / {{maxScore}} 鍒�</text>
       </view>
     </view>
 
     <!-- 璇勫鎰忚 -->
     <view class="comment-section">
       <text class="section-title">璇勫鎰忚</text>
-      
-      <textarea 
-        class="comment-input {{reviewStatus === 'COMPLETED' ? 'disabled' : ''}}"
-        placeholder="璇峰~鍐欒缁嗙殑璇勫鎰忚锛屽寘鎷綔鍝佺殑浼樼偣銆佷笉瓒冲拰鏀硅繘寤鸿..."
-        value="{{comment}}"
-        maxlength="1000"
-        show-confirm-bar="{{false}}"
-        disabled="{{reviewStatus === 'COMPLETED'}}"
-        bindinput="onCommentInput"
-      ></textarea>
-      
+      <textarea class="comment-input" placeholder="璇峰~鍐欒缁嗚瘎瀹℃剰瑙侊紝鍖呮嫭浣滃搧浼樼偣銆佷笉瓒冲拰鏀硅繘寤鸿..." value="{{comment}}" show-confirm-bar="{{false}}" bindinput="onCommentInput"></textarea>
       <view class="comment-counter">
-        <text class="counter-text">{{comment.length}}/1000</text>
+        <text class="counter-text">{{comment.length}} 瀛�</text>
       </view>
     </view>
 
-    <!-- 宸叉湁璇勫璁板綍 -->
+    <!-- 鏃㈡湁璇勫 - 宸查殣钘� -->
+    <!--
     <view wx:if="{{existingReview}}" class="existing-review">
-      <text class="section-title">璇勫璁板綍</text>
-      
+      <text class="section-title">鍘嗗彶璇勫</text>
       <view class="review-info">
-        <text class="review-time">璇勫鏃堕棿锛歿{formatDate(existingReview.reviewedAt)}}</text>
-        <text class="review-total">鎬诲垎锛歿{existingReview.totalScore}}/{{maxScore}}鍒�</text>
+        <text class="review-time">璇勫鏃堕棿锛歿{formatDate(existingReview.reviewedAt) || '鏈煡'}}</text>
+        <text class="review-total">鎬诲垎锛歿{existingReview.totalScore}} / {{maxScore}} 鍒�</text>
       </view>
-      
       <view class="other-reviews-btn" bindtap="onViewOtherReviews">
         <text class="other-reviews-icon">馃懃</text>
-        <text class="other-reviews-text">鏌ョ湅鍏朵粬璇勫</text>
+        <text class="other-reviews-text">鏌ョ湅鍏朵粬璇勫璇勫垎</text>
       </view>
     </view>
+    -->
 
-    <!-- 搴曢儴鎿嶄綔鏍� -->
-    <view wx:if="{{reviewStatus !== 'COMPLETED'}}" class="bottom-actions">
-      <view class="action-btn draft-btn" bindtap="onSaveDraft">
-        <text class="btn-icon">馃捑</text>
-        <text class="btn-text">淇濆瓨鑽夌</text>
-      </view>
-      
-      <view 
-        class="action-btn submit-btn {{submitting ? 'submitting' : ''}}"
-        bindtap="onSubmitReview"
-      >
+    <!-- 搴曢儴鎿嶄綔 -->
+    <view class="bottom-actions">
+      <view class="action-btn submit-btn {{submitting ? 'submitting' : ''}}" bindtap="onSubmitReview">
         <text class="btn-icon">{{submitting ? '鈴�' : '鉁�'}}</text>
         <text class="btn-text">{{submitting ? '鎻愪氦涓�...' : '鎻愪氦璇勫'}}</text>
       </view>
     </view>
   </view>
-
-  <!-- 瑙嗛棰勮妯℃�佹 -->
-  <view wx:if="{{showMediaPreview}}" class="media-preview-modal">
-    <view class="modal-overlay" bindtap="onCloseMediaPreview"></view>
-    <view class="modal-content">
-      <view class="modal-header">
-        <text class="modal-title">瑙嗛棰勮</text>
-        <view class="close-btn" bindtap="onCloseMediaPreview">
-          <text class="close-icon">鉁�</text>
-        </view>
-      </view>
-      
-      <view class="modal-body">
-        <video 
-          wx:if="{{mediaType === 'video'}}"
-          class="preview-video"
-          src="{{currentMedia}}"
-          controls
-          autoplay
-        ></video>
-      </view>
-    </view>
-  </view>
-</view>
\ No newline at end of file
+</view>

--
Gitblit v1.8.0