From 93eb6b470773bc49ea6e1a9d4cbd914eb95d525b Mon Sep 17 00:00:00 2001 From: lrj <owen.stl@gmail.com> Date: 星期二, 30 九月 2025 17:38:04 +0800 Subject: [PATCH] feat: 完善比赛晋级功能并清理测试文件 --- web/src/views/ActivityDetail.vue | 48 +++++++++++++++++++++++++++--------------------- 1 files changed, 27 insertions(+), 21 deletions(-) diff --git a/web/src/views/ActivityDetail.vue b/web/src/views/ActivityDetail.vue index 14f60e2..886b867 100644 --- a/web/src/views/ActivityDetail.vue +++ b/web/src/views/ActivityDetail.vue @@ -21,8 +21,6 @@ <el-descriptions-item label="鎶ュ悕鎴鏃堕棿">{{ formatDateTime(activity.signupDeadline) }}</el-descriptions-item> <el-descriptions-item label="姣旇禌寮�濮嬫椂闂�">{{ formatDateTime(activity.matchTime) }}</el-descriptions-item> <el-descriptions-item label="姣旇禌鍦板潃">{{ activity.address || '-' }}</el-descriptions-item> - <el-descriptions-item label="浜烘暟">{{ activity.playerMax || '-' }}</el-descriptions-item> - <el-descriptions-item label="褰撳墠鎶ュ悕浜烘暟">{{ activity.playerCount || 0 }}</el-descriptions-item> <el-descriptions-item label="璇勫垎妯℃澘"> {{ activity.ratingScheme ? activity.ratingScheme.name : '-' }} </el-descriptions-item> @@ -38,26 +36,17 @@ <!-- 姣旇禌闃舵 --> <div v-if="activity.stages && activity.stages.length > 0" class="stages-section"> <h3>姣旇禌闃舵</h3> - <el-table :data="activity.stages" style="width: 100%"> - <el-table-column prop="name" label="闃舵鍚嶇О" min-width="150" /> + <el-table :data="sortedStages" style="width: 100%" table-layout="auto"> + <el-table-column prop="sortOrder" label="椤哄簭" width="80" align="center" /> + <el-table-column prop="name" label="闃舵鍚嶇О" width="200" show-overflow-tooltip /> <el-table-column prop="matchTime" label="寮�濮嬫椂闂�" width="180"> <template #default="{ row }"> {{ formatDateTime(row.matchTime) }} </template> </el-table-column> - <el-table-column prop="address" label="鍦板潃" min-width="150"> + <el-table-column prop="address" label="鍦板潃" min-width="120" show-overflow-tooltip> <template #default="{ row }"> {{ row.address || '-' }} - </template> - </el-table-column> - <el-table-column prop="playerMax" label="鏈�澶т汉鏁�" width="100"> - <template #default="{ row }"> - {{ row.playerMax || '-' }} - </template> - </el-table-column> - <el-table-column prop="playerCount" label="瀹為檯浜烘暟" width="100"> - <template #default="{ row }"> - {{ row.playerCount || 0 }} </template> </el-table-column> <el-table-column prop="stateName" label="鐘舵��" width="100"> @@ -65,7 +54,7 @@ <el-tag :type="getStateType(row.state)">{{ row.stateName }}</el-tag> </template> </el-table-column> - <el-table-column label="鎿嶄綔" width="200"> + <el-table-column label="鎿嶄綔" width="220" fixed="right"> <template #default="{ row }"> <el-button size="small" @click="viewStageDetail(row)">鏌ョ湅璇︽儏</el-button> <el-button size="small" type="warning" @click="closeStage(row)" v-if="row.state === 1">鍏抽棴</el-button> @@ -121,7 +110,6 @@ </el-descriptions-item> <el-descriptions-item label="寮�濮嬫椂闂�">{{ formatDateTime(selectedStage.matchTime) }}</el-descriptions-item> <el-descriptions-item label="鍦板潃">{{ selectedStage.address || '-' }}</el-descriptions-item> - <el-descriptions-item label="浜烘暟">{{ selectedStage.playerMax || '-' }}</el-descriptions-item> <el-descriptions-item label="璇勫垎妯℃澘"> {{ selectedStage.ratingScheme ? selectedStage.ratingScheme.name : '缁ф壙姣旇禌妯℃澘' }} </el-descriptions-item> @@ -137,7 +125,7 @@ </template> <script setup> -import { ref, onMounted } from 'vue' +import { ref, onMounted, computed } from 'vue' import { useRouter, useRoute } from 'vue-router' import { ElMessage, ElMessageBox } from 'element-plus' import { getActivity } from '@/api/activity' @@ -150,6 +138,16 @@ const activity = ref(null) const stageDialogVisible = ref(false) const selectedStage = ref(null) + +// 璁$畻灞炴�� +const sortedStages = computed(() => { + if (!activity.value || !activity.value.stages) return [] + return [...activity.value.stages].sort((a, b) => { + const orderA = a.sortOrder || 999 + const orderB = b.sortOrder || 999 + return orderA - orderB + }) +}) // 鍔犺浇姣旇禌璇︽儏 const loadActivity = async () => { @@ -233,9 +231,17 @@ } const getStageName = (stageId) => { - if (!activity.value || !activity.value.stages) return '鏈煡闃舵' - const stage = activity.value.stages.find(s => s.id === stageId) - return stage ? stage.name : '鏈煡闃舵' + if (!activity.value) return '鏈煡闃舵' + + // 鍙鏌ユ瘮璧涢樁娈� + if (activity.value.stages) { + const stage = activity.value.stages.find(s => s.id === stageId) + if (stage) { + return stage.name + } + } + + return '鏈煡闃舵' } // 鐢熷懡鍛ㄦ湡 -- Gitblit v1.8.0