| | |
| | | <template> |
| | | <div class="player-page"> |
| | | <div class="page-card"> |
| | | <h3 class="card-title">比赛报名</h3> |
| | | <h3 class="card-title">报名审核</h3> |
| | | |
| | | <!-- 搜索和操作栏 --> |
| | | <div class="toolbar"> |
| | |
| | | <el-option |
| | | v-for="activity in activityOptions" |
| | | :key="activity.id" |
| | | :label="getActivityDisplayName(activity)" |
| | | :label="activity.name" |
| | | :value="activity.id" |
| | | > |
| | | <span>{{ getActivityName(activity) }}</span> |
| | | <span v-if="activity.pid > 0" style="color: #409eff; margin-left: 8px;"> |
| | | {{ activity.name }} |
| | | </span> |
| | | {{ activity.name }} |
| | | </el-option> |
| | | </el-select> |
| | | <el-select |
| | |
| | | style="width: 150px" |
| | | clearable |
| | | > |
| | | <el-option label="未审核" value="0" /> |
| | | <el-option label="进行中" value="1" /> |
| | | <el-option label="已驳回" value="2" /> |
| | | <el-option label="已结束" value="3" /> |
| | | <el-option label="待审核" value="0" /> |
| | | <el-option label="通过" value="1" /> |
| | | <el-option label="驳回" value="2" /> |
| | | </el-select> |
| | | <el-button type="primary" @click="handleSearch"> |
| | | <el-icon><Search /></el-icon> |
| | |
| | | <el-tag :type="getStateType(row.state)">{{ getStateText(row.state) }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" width="200" fixed="right"> |
| | | <el-table-column label="操作" width="120" fixed="right"> |
| | | <template #default="{ row }"> |
| | | <div class="table-actions"> |
| | | <el-button |
| | | v-if="row.state === 1" |
| | | type="success" |
| | | size="small" |
| | | @click="handleApprove(row)" |
| | | > |
| | | 审核通过 |
| | | </el-button> |
| | | <el-button |
| | | v-if="row.state === 1" |
| | | type="danger" |
| | | size="small" |
| | | @click="handleReject(row)" |
| | | > |
| | | 审核拒绝 |
| | | </el-button> |
| | | <el-button type="primary" size="small" @click="handleView(row)"> |
| | | 评分详情 |
| | | <!-- 只保留详情按钮 --> |
| | | <el-button type="primary" size="small" @click="handleViewDetail(row)"> |
| | | 详情 |
| | | </el-button> |
| | | </div> |
| | | </template> |
| | |
| | | activityName: '2024年创新创业大赛', |
| | | phone: '13800138001', |
| | | applyTime: '2024-01-05 14:30:00', |
| | | state: 1 // 1-待审核, 2-进行中, 3-已结束 |
| | | state: 0 // 0-未审核 |
| | | }, |
| | | { |
| | | id: 2, |
| | |
| | | activityName: '书法比赛', |
| | | phone: '13900139002', |
| | | applyTime: '2024-01-16 10:30:00', |
| | | state: 2 |
| | | state: 1 // 1-审核通过 |
| | | }, |
| | | { |
| | | id: 3, |
| | |
| | | activityName: '绘画比赛', |
| | | phone: '13900139003', |
| | | applyTime: '2024-01-17 14:20:00', |
| | | state: 1 |
| | | state: 2 // 2-审核驳回 |
| | | }, |
| | | { |
| | | id: 4, |
| | | name: '赵六', |
| | | avatar: '', |
| | | activityName: '音乐比赛', |
| | | phone: '13900139004', |
| | | applyTime: '2024-01-18 09:15:00', |
| | | state: 0 // 0-未审核 |
| | | } |
| | | ]) |
| | | |
| | | // 获取状态标签类型 |
| | | const getStateType = (state: number | null | undefined) => { |
| | | const typeMap: Record<number, string> = { |
| | | 0: 'warning', // 待审核 |
| | | 1: 'success', // 进行中 |
| | | 2: 'danger', // 未通过 |
| | | 0: 'warning', // 未审核 |
| | | 1: 'success', // 审核通过 |
| | | 2: 'danger', // 审核驳回 |
| | | 3: 'info' // 已结束 |
| | | } |
| | | return state != null ? (typeMap[state] || 'info') : 'info' |
| | |
| | | // 获取状态文本 |
| | | const getStateText = (state: number | null | undefined) => { |
| | | const textMap: Record<number, string> = { |
| | | 0: '待审核', |
| | | 1: '进行中', |
| | | 2: '未通过', |
| | | 0: '未审核', |
| | | 1: '审核通过', |
| | | 2: '审核驳回', |
| | | 3: '已结束' |
| | | } |
| | | return state != null ? (textMap[state] || '未知') : '未知' |
| | |
| | | loadData() |
| | | } |
| | | |
| | | // 审核通过 |
| | | const handleApprove = async (row: any) => { |
| | | try { |
| | | await ElMessageBox.confirm(`确定审核通过学员"${row.name}"的报名申请吗?`, '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'success' |
| | | }) |
| | | |
| | | ElMessage.success('审核通过成功') |
| | | row.state = 2 |
| | | } catch { |
| | | // 用户取消 |
| | | } |
| | | } |
| | | |
| | | // 审核拒绝 |
| | | const handleReject = (row: any) => { |
| | | ElMessageBox.confirm('确认拒绝该申请?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | // 这里应该调用API更新状态 |
| | | row.state = 3 // 更新为已结束 |
| | | ElMessage.success('已拒绝') |
| | | }).catch(() => { |
| | | ElMessage.info('已取消') |
| | | }) |
| | | |
| | | // 查看详情(跳转到详情页面,只读模式) |
| | | const handleViewDetail = (row: any) => { |
| | | if (!row.id) { |
| | | ElMessage.error('无法获取报名记录ID') |
| | | return |
| | | } |
| | | // 跳转到详情页面(只读模式) |
| | | router.push(`/player/${row.id}/detail`) |
| | | } |
| | | |
| | | // 查看详情(跳转到评分页面) |
| | |
| | | return activity.name |
| | | } |
| | | |
| | | // 获取活动显示名称(用于搜索和选中时显示) |
| | | const getActivityDisplayName = (activity: any) => { |
| | | if (activity.pid > 0 && activity.parent) { |
| | | return `${activity.parent.name} - ${activity.name}` |
| | | } |
| | | return activity.name |
| | | } |
| | | |
| | | |
| | | // 加载活动选项 |
| | | const loadActivityOptions = async () => { |
| | |
| | | const list = await PlayerApi.getApplications( |
| | | searchForm.name || '', |
| | | searchForm.activityId || null, |
| | | searchForm.state !== '' ? parseInt(searchForm.state) : null, |
| | | pagination.page, |
| | | pagination.size |
| | | ) |
| | |
| | | display: flex; |
| | | gap: 8px; |
| | | flex-wrap: wrap; |
| | | align-items: center; |
| | | } |
| | | |
| | | |
| | | |
| | | .pagination { |
| | | margin-top: 20px; |
| | | display: flex; |