<!--pages/profile/profile.wxml-->
|
<view class="container">
|
<!-- 加载状态 -->
|
<view wx:if="{{loading}}" class="loading-wrapper">
|
<view class="loading"></view>
|
<text class="loading-text">加载中...</text>
|
</view>
|
|
<!-- 个人信息区域 -->
|
<view wx:else class="profile-content">
|
<!-- 用户信息卡片 -->
|
<view class="user-card">
|
<view class="user-info">
|
<image
|
wx:if="{{userInfo.avatar}}"
|
class="avatar"
|
src="{{userInfo.avatar}}"
|
mode="aspectFill"
|
/>
|
<view wx:else class="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>
|
</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
|
wx:for="{{judgeMenuItems}}"
|
wx:key="path"
|
class="menu-item"
|
data-path="{{item.path}}"
|
bindtap="onMenuItemTap"
|
>
|
<view class="menu-icon-wrapper">
|
<text class="icon {{item.iconName}}"></text>
|
<view wx:if="{{item.badge > 0}}" class="badge">{{item.badge}}</view>
|
</view>
|
<text class="menu-title">{{item.title}}</text>
|
<text class="menu-desc">{{item.desc}}</text>
|
</view>
|
</view>
|
</view>
|
|
<!-- 主办方专区 -->
|
<view wx:if="{{isOrganizer}}" class="role-section">
|
<view class="section-header">
|
<text class="section-title">主办方专区</text>
|
<view class="organizer-stats">
|
<text class="active-count">活跃活动: {{organizerStats.activeActivities}}</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>
|
</view>
|
</view>
|
|
<!-- 退出登录 -->
|
<view class="logout-section">
|
<view class="logout-btn" bindtap="onLogout">
|
<text class="logout-text">退出登录</text>
|
</view>
|
</view>
|
</view>
|
</view>
|