Codex Assistant
昨天 58d9f460b2f8c34430285115e2557d18333c5cab
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>
          <!-- 评分说明已移除,与Web端保持一致 -->
          <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>
</view>