<!--pages/judge/review.wxml-->
|
<view class="container">
|
<!-- 加载状态 -->
|
<view wx:if="{{loading}}" class="loading-container">
|
<view class="loading-spinner"></view>
|
<text class="loading-text">加载中...</text>
|
</view>
|
|
<!-- 评审内容 -->
|
<view wx:else class="review-content">
|
<!-- 作品信息 -->
|
<view class="submission-info">
|
<view class="info-header">
|
<text class="info-title">作品信息</text>
|
<view class="status-badge {{reviewStatus === 'COMPLETED' ? 'completed' : 'pending'}}">
|
{{reviewStatus === 'COMPLETED' ? '已评审' : '待评审'}}
|
</view>
|
</view>
|
|
<view class="submission-detail">
|
<text class="submission-title">{{submission.title}}</text>
|
<text class="submission-desc">{{submission.description}}</text>
|
|
<!-- 参赛者信息 -->
|
<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>
|
</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>
|
</view>
|
</view>
|
|
<!-- 团队信息 -->
|
<view wx:if="{{submission.team}}" 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>
|
<text class="member-role">{{item.role}}</text>
|
</view>
|
</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>
|
</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>
|
</view>
|
</view>
|
</view>
|
|
<!-- 评审标准 -->
|
<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>
|
</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>
|
</view>
|
</view>
|
</view>
|
|
<!-- 总分显示 -->
|
<view class="total-score">
|
<text class="total-label">总分:</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>
|
|
<view class="comment-counter">
|
<text class="counter-text">{{comment.length}}/1000</text>
|
</view>
|
</view>
|
|
<!-- 已有评审记录 -->
|
<view wx:if="{{existingReview}}" class="existing-review">
|
<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>
|
</view>
|
|
<view class="other-reviews-btn" bindtap="onViewOtherReviews">
|
<text class="other-reviews-icon">👥</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"
|
>
|
<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>
|