| | |
| | | |
| | | <!-- 个人信息区域 --> |
| | | <view wx:else class="profile-content"> |
| | | <!-- 用户信息卡片 --> |
| | | <view class="user-card"> |
| | | <view class="user-info"> |
| | | <!-- 用户信息区域 --> |
| | | <view class="user-section"> |
| | | <view class="user-avatar-wrapper"> |
| | | <image |
| | | wx:if="{{userInfo.avatar}}" |
| | | class="avatar" |
| | | class="user-avatar" |
| | | src="{{userInfo.avatar}}" |
| | | mode="aspectFill" |
| | | /> |
| | | <view wx:else class="avatar-placeholder"> |
| | | <view wx:else class="user-avatar-placeholder"> |
| | | <text class="avatar-text">{{avatarText}}</text> |
| | | </view> |
| | | <view class="user-details"> |
| | | <text class="username">{{userInfo.name || '未设置姓名'}}</text> |
| | | <text class="user-desc">{{userInfo.school || '未设置学校'}} | {{userInfo.major || '未设置专业'}}</text> |
| | | <view class="user-roles"> |
| | | <text wx:for="{{userRoles}}" wx:key="*this" class="role-tag"> |
| | | {{item === 'JUDGE' ? '评委' : item === 'ORGANIZER' ? '主办方' : '参赛者'}} |
| | | </text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <view class="edit-btn" bindtap="onEditProfile"> |
| | | <text class="icon ic-edit"></text> |
| | | <text class="edit-text">编辑</text> |
| | | <view class="user-info"> |
| | | <text class="user-name">{{userInfo.name || 'Ethan'}}</text> |
| | | <text class="user-role">{{userRoles.includes('JUDGE') ? '评委' : userRoles.includes('ORGANIZER') ? '主办方' : '参赛者'}}</text> |
| | | </view> |
| | | <view class="settings-btn" bindtap="goToPersonalInfo"> |
| | | <text class="icon-settings">⚙️</text> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 统计数据 --> |
| | | <view class="stats-section"> |
| | | <view class="stats-grid"> |
| | | <view class="stat-item"> |
| | | <text class="stat-number">{{stats.totalRegistrations}}</text> |
| | | <text class="stat-label">总报名</text> |
| | | </view> |
| | | <view class="stat-item"> |
| | | <text class="stat-number">{{stats.ongoingActivities}}</text> |
| | | <text class="stat-label">进行中</text> |
| | | </view> |
| | | <view class="stat-item"> |
| | | <text class="stat-number">{{stats.completedActivities}}</text> |
| | | <text class="stat-label">已完成</text> |
| | | </view> |
| | | <view class="stat-item"> |
| | | <text class="stat-number">{{stats.awards}}</text> |
| | | <text class="stat-label">获奖数</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 评委专区 --> |
| | | <view wx:if="{{isJudge}}" class="role-section"> |
| | | <view class="section-header"> |
| | | <text class="section-title">评委专区</text> |
| | | <view class="judge-stats"> |
| | | <text class="pending-count">待评审: {{judgeStats.pendingReviews}}</text> |
| | | </view> |
| | | </view> |
| | | <view class="menu-grid"> |
| | | <!-- 我的项目区域 --> |
| | | <view class="projects-section"> |
| | | <text class="section-title">我的项目</text> |
| | | <view class="project-list" wx:if="{{userProjects && userProjects.length > 0}}"> |
| | | <view |
| | | wx:for="{{judgeMenuItems}}" |
| | | wx:key="path" |
| | | class="menu-item" |
| | | data-path="{{item.path}}" |
| | | bindtap="onMenuItemTap" |
| | | class="project-card" |
| | | wx:for="{{userProjects}}" |
| | | wx:key="id" |
| | | bindtap="goToProjectDetail" |
| | | data-project-id="{{item.id}}" |
| | | > |
| | | <view class="menu-icon-wrapper"> |
| | | <text class="icon {{item.iconName}}"></text> |
| | | <view wx:if="{{item.badge > 0}}" class="badge">{{item.badge}}</view> |
| | | <view class="project-icon"> |
| | | <!-- 如果有缩略图,显示图片 --> |
| | | <image |
| | | wx:if="{{item.thumbnailUrl}}" |
| | | class="project-thumbnail" |
| | | src="{{item.thumbnailUrl}}" |
| | | mode="aspectFill" |
| | | /> |
| | | <!-- 否则显示图标 --> |
| | | <text wx:else class="icon {{item.icon}}"></text> |
| | | </view> |
| | | <text class="menu-title">{{item.title}}</text> |
| | | <text class="menu-desc">{{item.desc}}</text> |
| | | <view class="project-info"> |
| | | <text class="project-title">{{item.projectName || '未命名项目'}}</text> |
| | | <text class="project-subtitle">{{item.activityName || ''}}</text> |
| | | </view> |
| | | <view class="project-status"> |
| | | <text class="status-text status-{{item.statusType}}">{{item.statusText}}</text> |
| | | </view> |
| | | <text class="project-arrow">></text> |
| | | </view> |
| | | </view> |
| | | <view class="empty-projects" wx:else> |
| | | <text class="empty-icon">📋</text> |
| | | <text class="empty-text">暂无项目</text> |
| | | <text class="empty-desc">参加活动后,您的项目将在这里显示</text> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 主办方专区 --> |
| | | <view wx:if="{{isOrganizer}}" class="role-section"> |
| | | <!-- 我的评审区域 - 仅评委可见 --> |
| | | <view class="review-section" wx:if="{{isJudge}}"> |
| | | <view class="section-header"> |
| | | <text class="section-title">主办方专区</text> |
| | | <view class="organizer-stats"> |
| | | <text class="active-count">活跃活动: {{organizerStats.activeActivities}}</text> |
| | | <text class="section-title">我的评审</text> |
| | | <view class="review-action-btn" bindtap="goToReviewPage"> |
| | | <text class="action-text">评审</text> |
| | | <text class="action-arrow">></text> |
| | | </view> |
| | | </view> |
| | | <view class="menu-grid"> |
| | | <view |
| | | wx:for="{{organizerMenuItems}}" |
| | | wx:key="path" |
| | | class="menu-item" |
| | | data-path="{{item.path}}" |
| | | bindtap="onMenuItemTap" |
| | | > |
| | | <view class="menu-icon-wrapper"> |
| | | <text class="icon {{item.iconName}}"></text> |
| | | </view> |
| | | <text class="menu-title">{{item.title}}</text> |
| | | <text class="menu-desc">{{item.desc}}</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 功能菜单 --> |
| | | <view class="menu-section"> |
| | | <view class="section-title">功能菜单</view> |
| | | <view class="menu-list"> |
| | | <view |
| | | wx:for="{{menuItems}}" |
| | | wx:key="path" |
| | | class="menu-item-row" |
| | | data-path="{{item.path}}" |
| | | bindtap="onMenuItemTap" |
| | | > |
| | | <view class="menu-left"> |
| | | <text class="icon {{item.iconName}}"></text> |
| | | <view class="menu-text"> |
| | | <text class="menu-title">{{item.title}}</text> |
| | | <text class="menu-desc">{{item.desc}}</text> |
| | | </view> |
| | | </view> |
| | | <text class="icon ic-arrow-right"></text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 最近报名 --> |
| | | <view class="recent-section"> |
| | | <view class="section-header"> |
| | | <text class="section-title">最近报名</text> |
| | | <text class="view-more" bindtap="onViewMoreRegistrations">查看更多</text> |
| | | </view> |
| | | |
| | | <view wx:if="{{registrationLoading}}" class="loading-wrapper small"> |
| | | <view class="loading small"></view> |
| | | <text class="loading-text">加载中...</text> |
| | | </view> |
| | | |
| | | <view wx:elif="{{registrations.length === 0}}" class="empty-state"> |
| | | <text class="empty-icon">📝</text> |
| | | <text class="empty-text">暂无报名记录</text> |
| | | </view> |
| | | |
| | | <view wx:else class="registration-list"> |
| | | <view |
| | | wx:for="{{registrations}}" |
| | | wx:key="id" |
| | | class="registration-item" |
| | | data-id="{{item.id}}" |
| | | bindtap="onRegistrationTap" |
| | | > |
| | | <image |
| | | wx:if="{{item.activity.coverImage && item.activity.coverImage.fullUrl}}" |
| | | class="activity-cover" |
| | | src="{{item.activity.coverImage.fullUrl}}" |
| | | mode="aspectFill" |
| | | /> |
| | | <view wx:else class="activity-cover-placeholder"> |
| | | <text class="activity-cover-text">{{item.activity.titleText}}</text> |
| | | </view> |
| | | <view class="registration-info"> |
| | | <text class="activity-title">{{item.activity.title}}</text> |
| | | <text class="registration-time">报名时间: {{formatDate(item.registrationTime)}}</text> |
| | | <text class="activity-time">活动时间: {{formatDate(item.activity.startTime)}}</text> |
| | | <view class="status-row"> |
| | | <text class="registration-status {{getStatusClass(item.status)}}"> |
| | | {{getStatusText(item.status)}} |
| | | </text> |
| | | <text class="activity-status"> |
| | | {{getActivityStatusText(item.activity.status)}} |
| | | </text> |
| | | </view> |
| | | </view> |
| | | <text class="item-arrow">></text> |
| | | <view class="review-stats"> |
| | | <view class="stat-item"> |
| | | <text class="stat-number">{{judgeStats.pendingReviews || 0}}</text> |
| | | <text class="stat-label">待评审</text> |
| | | </view> |
| | | <view class="stat-divider"></view> |
| | | <view class="stat-item"> |
| | | <text class="stat-number">{{judgeStats.completedReviews || 0}}</text> |
| | | <text class="stat-label">已评审</text> |
| | | </view> |
| | | <view class="stat-divider"></view> |
| | | <view class="stat-item"> |
| | | <text class="stat-number">{{judgeStats.studentUnReviewedCount || 0}}</text> |
| | | <text class="stat-label">学员未评审</text> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 退出登录 --> |
| | | <view class="logout-section"> |
| | | <view class="logout-btn" bindtap="onLogout"> |
| | | <text class="logout-text">退出登录</text> |
| | | </view> |
| | | </view> |
| | | |
| | | </view> |
| | | </view> |