update:赛事管理

This commit is contained in:
ltx 2026-05-14 01:36:20 +08:00
parent 002940a41b
commit ab25758e05
3 changed files with 55 additions and 17 deletions

View File

@ -1,20 +1,16 @@
<template> <template>
<el-dialog :title="dialog.title" v-model="dialog.isShowDialog" width="80%"> <el-dialog :title="dialog.title" v-model="dialog.isShowDialog" width="80%" fullscreen>
<div class="step-form-container"> <template #header>
<el-card class="step-form-card"> <div style="font-size: 18px; font-weight: bold;">{{ dialog.title }}</div>
<!-- 步骤条导航 --> <!-- 步骤条导航 -->
<el-steps :active="activeStep" finish-status="success" align-center> <el-steps :active="activeStep" finish-status="success" align-center>
<el-step title="基本信息" /> <el-step title="基本信息" />
<el-step title="参与单位" /> <el-step title="参与单位" />
<el-step title="项目与限报配置" /> <el-step title="项目与限报配置" />
<el-step title="费用与账户配置" /> <el-step title="费用与账户配置" />
</el-steps> </el-steps>
</template>
<!-- 步骤内容区域 --> <template #footer>
<div class="step-content">
<component :is="currentStepComponent" :key="activeStep" ref="stepRef" :model-value="currentStepData" @update:model-value="handleStepDataUpdate" />
</div>
<!-- 底部操作按钮 --> <!-- 底部操作按钮 -->
<div class="step-actions"> <div class="step-actions">
<el-button v-if="activeStep > 0" @click="handlePrevious"> <el-button v-if="activeStep > 0" @click="handlePrevious">
@ -38,6 +34,17 @@
提交 提交
</el-button> </el-button>
</div> </div>
</template>
<div class="step-form-container">
<el-card class="step-form-card">
<!-- 步骤内容区域 -->
<div class="step-content">
<component :is="currentStepComponent" :key="activeStep" ref="stepRef" :model-value="currentStepData" @update:model-value="handleStepDataUpdate" />
</div>
</el-card> </el-card>
<!-- 提交成功对话框 --> <!-- 提交成功对话框 -->
@ -397,6 +404,10 @@ defineExpose({
</script> </script>
<style scoped> <style scoped>
div{
box-sizing: border-box;
}
.step-form-container { .step-form-container {
/* max-width: 1000px; */ /* max-width: 1000px; */
margin: 0 auto; margin: 0 auto;
@ -431,9 +442,10 @@ defineExpose({
display: flex; display: flex;
justify-content: center; justify-content: center;
gap: 20px; gap: 20px;
padding-top: 30px; /* padding-top: 30px;
border-top: 1px solid #ebeef5; border-top: 1px solid #ebeef5;
margin-top: 20px; box-sizing: border-box; */
/* margin-top: 20px; */
} }
/* .step-actions .el-button { /* .step-actions .el-button {

View File

@ -34,15 +34,15 @@
<div class="expand-content"> <div class="expand-content">
<el-table :data="scope.row.items || []" border style="width: 100%; margin-top: 10px;"> <el-table :data="scope.row.items || []" border style="width: 100%; margin-top: 10px;">
<el-table-column label="项目名称" prop="projectName" min-width="150" /> <el-table-column label="项目名称" prop="projectName" min-width="150" />
<el-table-column label="项目类型" prop="projectTypeName" width="120" /> <!-- <el-table-column label="项目类型" prop="projectTypeName" width="120" /> -->
<el-table-column label="参赛组别" prop="groupName" width="120" /> <el-table-column label="参赛组别" prop="groupName" width="120" />
<el-table-column label="姓名" prop="memberNames" min-width="200" /> <el-table-column label="姓名" prop="participantName" min-width="140" />
<el-table-column label="成绩" prop="score" width="120" /> <el-table-column label="成绩" prop="score" width="100" />
<el-table-column label="名次" prop="rank" width="100" /> <el-table-column label="名次" prop="rank" width="100" />
<el-table-column label="操作" width="150" align="center" fixed="right"> <el-table-column label="操作" width="150" align="center" fixed="right">
<template #default="item"> <template #default="item">
<el-button <el-button
v-if="item.row.memberIds && item.row.memberIds.length > 0" v-if="item.row.certificateUrl"
size="small" size="small"
text text
type="primary" type="primary"
@ -198,6 +198,8 @@ const onBatchAudit = async () => {
// 查看证书 - 根据项目类型处理 // 查看证书 - 根据项目类型处理
const viewCertificates = async (item) => { const viewCertificates = async (item) => {
console.log('查看证书', item); console.log('查看证书', item);
openCertificate(item.certificateUrl);
return;
const members = item.members || []; const members = item.members || [];
if (members.length === 0) { if (members.length === 0) {
ElMessage.warning('暂无证书'); ElMessage.warning('暂无证书');

View File

@ -125,7 +125,15 @@
</div> </div>
</div> </div>
<!-- 赛事介绍 -->
<div class="edc-section" v-if="formData.basicInfo.eventIntroduction">
<div class="edc-section-hd">
<el-icon class="edc-section-icon"><Document /></el-icon>
<span class="edc-section-title">赛事介绍</span>
</div>
<div class="edc-intro" v-html="formData.basicInfo.eventIntroduction"></div>
</div>
<!-- 报名项目 --> <!-- 报名项目 -->
<div class="edc-section" v-if="formData.projectConfig?.projects?.length"> <div class="edc-section" v-if="formData.projectConfig?.projects?.length">
<div class="edc-section-hd"> <div class="edc-section-hd">
@ -140,6 +148,12 @@
<strong>{{ formData.projectConfig.registrationLimit.teamProjectLimit ?? 1 }}</strong> 个团队、<strong>{{ formData.projectConfig.registrationLimit.individualProjectLimit ?? 1 }}</strong> 个个人 <strong>{{ formData.projectConfig.registrationLimit.teamProjectLimit ?? 1 }}</strong> 个团队、<strong>{{ formData.projectConfig.registrationLimit.individualProjectLimit ?? 1 }}</strong> 个个人
</span> </span>
</div> </div>
<div class="edc-reg-limit-bar" v-if="formData.projectConfig.registrationLimit">
<el-icon><InfoFilled /></el-icon>
<span>限报
<strong>{{ formData.projectConfig.registrationLimit.teamProjectLimit ?? 1 }}</strong> 个团队、<strong>{{ formData.projectConfig.registrationLimit.individualProjectLimit ?? 1 }}</strong> 个个人
</span>
</div>
<div class="edc-proj-list"> <div class="edc-proj-list">
<div class="edc-proj-card" v-for="(proj, pi) in formData.projectConfig.projects" :key="proj.id ?? pi"> <div class="edc-proj-card" v-for="(proj, pi) in formData.projectConfig.projects" :key="proj.id ?? pi">
<div class="edc-proj-hd"> <div class="edc-proj-hd">
@ -269,6 +283,7 @@
<div class="project-card" v-for="project in projects" :key="project.id"> <div class="project-card" v-for="project in projects" :key="project.id">
<div class="project-card-left"> <div class="project-card-left">
<div class="project-card-name">名称:{{ project.name }}</div> <div class="project-card-name">名称:{{ project.name }}</div>
<div class="project-card-limit" v-if="project.limitCount">限报人数:{{ project.limitCount }} 人</div>
<div class="project-card-type">类型:{{ project.parentProjectTypeName ?? <div class="project-card-type">类型:{{ project.parentProjectTypeName ??
project.projectTypeName ?? '' }}</div> project.projectTypeName ?? '' }}</div>
<div class="project-card-count">完成人数:{{ project.completionCount ?? 0 }}</div> <div class="project-card-count">完成人数:{{ project.completionCount ?? 0 }}</div>
@ -3037,6 +3052,15 @@ const handleCreateOrderAndPay = async () => {
font-size: 14px; font-size: 14px;
} }
&-limit {
font-size: 12px;
color: #ffe082;
background: rgba(0, 0, 0, 0.15);
border-radius: 4px;
padding: 1px 6px;
display: inline-block;
}
&-right { &-right {
flex: 1; flex: 1;
display: flex; display: flex;