- 新增参赛者、裁判、检录员角色识别及角色化首页与个人中心 - 新增裁判注册、身份认证提示、赛事执裁报名及报名记录查询 - 新增检录工作台,支持检录任务、轮次状态与运动员检录操作 - 新增赛事成绩查询页面及成绩详情展示 - 封装成绩、检录和裁判报名接口,补充请求参数清理逻辑 - 新增检录 Tab 图标、页面路由及本地开发配置 - 新增 Git 忽略规则,排除依赖、构建缓存、日志和本地工具文件
114 lines
7.4 KiB
Plaintext
114 lines
7.4 KiB
Plaintext
<view class="checkin-page">
|
|
<view class="top-card" wx:if="{{context}}">
|
|
<view class="top-line">
|
|
<view class="live-pill"><view class="live-dot"></view><text>检录进行中</text></view>
|
|
<text class="checkin-sequence">{{context.currentCheckinNo}} / {{context.totalCheckins}} 检</text>
|
|
</view>
|
|
<text class="event-title">{{context.eventName}}</text>
|
|
<view class="compact-status">
|
|
<view class="compact-status-item checkin-status-item">
|
|
<text class="compact-label">当前检次</text>
|
|
<text class="compact-value checkin-name">{{context.currentCheckinName}}</text>
|
|
</view>
|
|
<view class="compact-divider"></view>
|
|
<view class="compact-status-item group-status-item">
|
|
<text class="compact-label">当前组别</text>
|
|
<text class="compact-value">{{context.currentGroupName || '请选择组别'}}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="selector-card {{loading ? 'selector-loading' : ''}}" wx:if="{{context}}">
|
|
<view class="selector-heading">
|
|
<view class="selector-step">1</view>
|
|
<view class="selector-heading-text"><text class="selector-title">选择参赛项目</text><text class="selector-hint">左右滑动查看更多项目</text></view>
|
|
</view>
|
|
<scroll-view class="project-scroll" scroll-x enhanced show-scrollbar="{{false}}" scroll-with-animation>
|
|
<view class="project-options">
|
|
<view
|
|
wx:for="{{projects}}"
|
|
wx:key="eventProjectId"
|
|
class="project-option {{index === projectIndex ? 'active' : ''}} {{item.isCompleted ? 'completed' : ''}}"
|
|
data-index="{{index}}"
|
|
bindtap="onProjectTap"
|
|
>
|
|
<view class="project-active-mark"></view>
|
|
<view class="project-option-top"><text class="project-option-name">{{item.projectName}}</text><text class="project-complete-label" wx:if="{{item.isCompleted}}">已完成</text></view>
|
|
<view class="project-option-summary"><text>{{item.checkedUnits}} / {{item.totalUnits}} 项</text><text>{{item.progressPercent}}%</text></view>
|
|
<view class="project-progress"><view class="project-progress-value" style="width: {{item.progressPercent}}%;"></view></view>
|
|
</view>
|
|
</view>
|
|
</scroll-view>
|
|
|
|
<view class="selector-separator"></view>
|
|
|
|
<view class="selector-heading group-heading">
|
|
<view class="selector-step">2</view>
|
|
<view class="selector-heading-text"><text class="selector-title">选择参赛组别</text><text class="selector-hint">点击后立即切换检录名单</text></view>
|
|
</view>
|
|
<scroll-view class="group-scroll" scroll-x enhanced show-scrollbar="{{false}}" scroll-with-animation>
|
|
<view class="group-options">
|
|
<view
|
|
wx:for="{{groups}}"
|
|
wx:key="id"
|
|
class="group-option {{index === groupIndex ? 'active' : ''}} {{item.isCompleted ? 'completed' : ''}}"
|
|
data-index="{{index}}"
|
|
bindtap="onGroupTap"
|
|
>
|
|
<view class="group-active-dot"></view>
|
|
<view class="group-option-content"><text class="group-option-name">{{item.groupName}}</text><text class="group-option-progress">{{item.checkedUnits}}/{{item.totalUnits}} · {{item.isCompleted ? '已完成' : item.progressPercent + '%'}}</text></view>
|
|
</view>
|
|
</view>
|
|
</scroll-view>
|
|
</view>
|
|
|
|
<view class="skeleton" wx:if="{{loading && !context}}"><view></view><view></view><view></view></view>
|
|
|
|
<block wx:if="{{context}}">
|
|
<view class="progress-card">
|
|
<view class="progress-top"><text class="section-title">当前组别进度</text><text class="progress-count"><text class="progress-count-main">{{checkedCount}}</text> / {{units.length}} 项</text></view>
|
|
<view class="progress-track"><view class="progress-fill" style="width: {{progressPercent}}%;"></view></view>
|
|
<view class="progress-bottom"><text>已检录 {{checkedCount}} 项</text><text>待检录 {{pendingCount}} 项</text></view>
|
|
</view>
|
|
|
|
<view class="list-heading"><text class="section-title">待检录</text><text class="list-tip">按秩序册顺序</text></view>
|
|
<view class="unit-card" wx:for="{{pendingUnits}}" wx:key="unitKey">
|
|
<view class="unit-head"><text class="unit-title">{{item.teamName || '个人参赛'}}</text><text class="venue-badge">{{item.venueName}}</text></view>
|
|
<view class="unit-meta" wx:if="{{item.unitName}}"><text class="unit-meta-label">单位</text><text class="unit-meta-value">{{item.unitName}}</text></view>
|
|
<view class="unit-athletes"><text class="athlete-chip" wx:for="{{item.athletes}}" wx:for-item="athlete" wx:key="id">{{athlete.name}}</text></view>
|
|
<view class="unit-action {{updatingKey === item.unitKey ? 'disabled' : ''}}" data-key="{{item.unitKey}}" bindtap="onToggleUnit">确认检录</view>
|
|
</view>
|
|
<view wx:if="{{!pendingUnits.length}}" class="empty-tip">当前组别暂无待检录项</view>
|
|
|
|
<view class="list-heading" wx:if="{{lockedUnits.length}}"><text class="section-title">等待前序检录</text><text class="list-tip">前一检通过后可操作</text></view>
|
|
<view class="unit-card locked" wx:for="{{lockedUnits}}" wx:key="unitKey">
|
|
<view class="unit-head"><text class="unit-title">{{item.teamName || '个人参赛'}}</text><text class="venue-badge">{{item.venueName}}</text></view>
|
|
<view class="unit-meta" wx:if="{{item.unitName}}"><text class="unit-meta-label">单位</text><text class="unit-meta-value">{{item.unitName}}</text></view>
|
|
<view class="unit-athletes"><text class="athlete-chip" wx:for="{{item.athletes}}" wx:for-item="athlete" wx:key="id">{{athlete.name}}</text></view>
|
|
<view class="unit-action disabled">{{item.lockReason}}</view>
|
|
</view>
|
|
|
|
<view class="checked-section-head">
|
|
<view class="checked-section-title"><text class="section-title">已检录</text><text class="checked-count">{{checkedUnits.length}} 项</text></view>
|
|
<text class="scope-tip">仅展示当前选中项目和组别的已检录结果</text>
|
|
</view>
|
|
<block wx:for="{{checkedGroups}}" wx:for-item="checkedGroup" wx:key="key">
|
|
<view class="checked-group-head">
|
|
<view class="checked-group-names"><text class="checked-project-name">{{checkedGroup.projectName}}</text><text class="checked-group-name">{{checkedGroup.groupName}}</text></view>
|
|
<text class="checked-group-count">{{checkedGroup.units.length}} 项</text>
|
|
</view>
|
|
<view class="unit-card" wx:for="{{checkedGroup.units}}" wx:for-item="item" wx:key="unitKey">
|
|
<view class="unit-head"><text class="unit-title">{{item.teamName || '个人参赛'}}</text><text class="venue-badge">{{item.venueName}}</text></view>
|
|
<view class="unit-meta" wx:if="{{item.unitName}}"><text class="unit-meta-label">单位</text><text class="unit-meta-value">{{item.unitName}}</text></view>
|
|
<view class="unit-athletes"><text class="athlete-chip checked-chip" wx:for="{{item.athletes}}" wx:for-item="athlete" wx:key="id">{{athlete.name}}</text></view>
|
|
<view class="checked-actions">
|
|
<view class="checked-state"><text class="checked-mark">✓</text><text>已完成当前检录</text></view>
|
|
<view class="cancel-checkin-btn {{updatingKey === item.unitKey ? 'disabled' : ''}}" data-key="{{item.unitKey}}" bindtap="onToggleUnit">取消检录</view>
|
|
</view>
|
|
</view>
|
|
</block>
|
|
<view wx:if="{{!checkedUnits.length}}" class="empty-tip">暂无已检录项</view>
|
|
</block>
|
|
<view class="safe-space"></view>
|
|
</view>
|