编辑赛事项目需要判断是否有报名记录
This commit is contained in:
parent
da749694f5
commit
2fec32267d
@ -1,11 +1,18 @@
|
||||
<template>
|
||||
<div class="step-config">
|
||||
<el-form ref="formRef" :model="localFormData" :rules="rules" label-position="top">
|
||||
<!-- 提示信息:有报名记录时不能编辑项目 -->
|
||||
<el-alert v-if="!canEditProject && !readonly" type="warning" show-icon style="margin-bottom: 20px">
|
||||
<template #title>
|
||||
当前赛事已有人员报名,不能修改项目信息。
|
||||
</template>
|
||||
</el-alert>
|
||||
|
||||
<el-card shadow="never" style="margin-bottom: 40px">
|
||||
<template #header>
|
||||
<div style="display: flex; justify-content: space-between; align-items: center">
|
||||
<span><span style="color: red;" v-if="!readonly">*</span> 项目配置</span>
|
||||
<el-button v-if="!readonly" type="primary" plain @click="addProject">选择项目</el-button>
|
||||
<span><span style="color: red;" v-if="!readonly && canEditProject">*</span> 项目配置</span>
|
||||
<el-button v-if="!readonly && canEditProject" type="primary" plain @click="addProject">选择项目</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<div class="project-card" v-for="(item, index) in localFormData.projects"
|
||||
@ -21,16 +28,28 @@
|
||||
<div v-for="(group, gIndex) in (item.groups ?? [])"
|
||||
:key="group.projectGroupId ?? group.id ?? gIndex" class="group-row">
|
||||
<div class="group-row__fields">
|
||||
<el-input v-if="!readonly" v-model="group.groupName" class="group-row__name" placeholder="组别名称" :disabled="readonly" />
|
||||
<!-- 只有在可以编辑项目时才允许编辑组别 -->
|
||||
<el-input v-if="!readonly && canEditProject" v-model="group.groupName" class="group-row__name" placeholder="组别名称" />
|
||||
<span v-else class="group-row__name">{{ group.groupName }}</span>
|
||||
|
||||
<el-date-picker value-format="YYYY-MM-DD" v-if="!readonly" class="group-row__range" type="daterange" range-separator="~"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
<el-date-picker
|
||||
v-if="!readonly && canEditProject"
|
||||
class="group-row__range"
|
||||
type="daterange"
|
||||
range-separator="~"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:model-value="[group.birthDateStart, group.birthDateEnd]"
|
||||
@update:modelValue="(v) => { group.birthDateStart = v?.[0]; group.birthDateEnd = v?.[1]; }" :disabled="readonly" />
|
||||
@update:modelValue="(v) => { group.birthDateStart = v?.[0]; group.birthDateEnd = v?.[1]; }"
|
||||
/>
|
||||
<span v-else class="group-row__range">{{ formatGroupDate(group) }}</span>
|
||||
|
||||
<el-select v-if="!readonly" v-model="group.gender" class="group-row__gender" placeholder="性别" :disabled="readonly">
|
||||
<el-select
|
||||
v-if="!readonly && canEditProject"
|
||||
v-model="group.gender"
|
||||
class="group-row__gender"
|
||||
placeholder="性别"
|
||||
>
|
||||
<el-option label="全部" :value="3" />
|
||||
<el-option label="男" :value="0" />
|
||||
<el-option label="女" :value="1" />
|
||||
@ -38,7 +57,8 @@
|
||||
<span v-else class="group-row__gender">{{ group.gender === 0 ? '男' : group.gender === 1 ? '女' : '全部' }}</span>
|
||||
</div>
|
||||
|
||||
<div v-if="!readonly" class="group-row__actions">
|
||||
<!-- 只有在可以编辑项目时才允许删除组别 -->
|
||||
<div v-if="!readonly && canEditProject" class="group-row__actions">
|
||||
<el-popconfirm title="确认删除该组别吗?" @confirm="removeGroup(index, gIndex)">
|
||||
<template #reference>
|
||||
<el-button text type="danger" icon="ele-Delete">删除</el-button>
|
||||
@ -75,12 +95,13 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="限报数" width="220" align="center">
|
||||
<template #default="{ row, $index }">
|
||||
<!-- 限报数量即使有报名记录也可以编辑 -->
|
||||
<el-form-item v-if="!readonly"
|
||||
:prop="`projects.${$index}.limitCount`"
|
||||
:rules="isOnlyIndividual ? [] : [{ required: true, message: '请填写项目限报数', trigger: 'change' }]"
|
||||
style="margin: 0; justify-content: center;"
|
||||
>
|
||||
<el-input-number v-model="row.limitCount" :min="0" :step="1" :precision="0" :controls="true" class="project-limit-input" :disabled="readonly" />
|
||||
<el-input-number v-model="row.limitCount" :min="0" :step="1" :precision="0" :controls="true" class="project-limit-input" />
|
||||
</el-form-item>
|
||||
<span v-else>{{ row.limitCount }}</span>
|
||||
</template>
|
||||
@ -95,12 +116,13 @@
|
||||
<span class="required-star" v-if="!readonly">*</span>
|
||||
个人项目限报数
|
||||
</div>
|
||||
<!-- 个人项目限报数即使有报名记录也可以编辑 -->
|
||||
<el-form-item v-if="!readonly"
|
||||
prop="registrationLimit.individualProjectLimit"
|
||||
:rules="[{ required: true, message: '请填写个人项目限报数', trigger: 'change' }]"
|
||||
style="margin: 0"
|
||||
>
|
||||
<el-input-number v-model="localFormData.registrationLimit.individualProjectLimit" :min="0" :step="1" :disabled="readonly" />
|
||||
<el-input-number v-model="localFormData.registrationLimit.individualProjectLimit" :min="0" :step="1" />
|
||||
</el-form-item>
|
||||
<span v-else>{{ localFormData.registrationLimit.individualProjectLimit }}</span>
|
||||
</div>
|
||||
@ -109,12 +131,13 @@
|
||||
<span class="required-star" v-if="!readonly">*</span>
|
||||
团队项目限报数
|
||||
</div>
|
||||
<!-- 团队项目限报数即使有报名记录也可以编辑 -->
|
||||
<el-form-item v-if="!readonly"
|
||||
prop="registrationLimit.teamProjectLimit"
|
||||
:rules="isOnlyIndividual ? [] : [{ required: true, message: '请填写团队项目限报数', trigger: 'change' }]"
|
||||
style="margin: 0"
|
||||
>
|
||||
<el-input-number v-model="localFormData.registrationLimit.teamProjectLimit" :min="0" :step="1" :disabled="readonly" />
|
||||
<el-input-number v-model="localFormData.registrationLimit.teamProjectLimit" :min="0" :step="1" />
|
||||
</el-form-item>
|
||||
<span v-else>{{ localFormData.registrationLimit.teamProjectLimit }}</span>
|
||||
</div>
|
||||
@ -156,6 +179,11 @@ const props = defineProps({
|
||||
modelValue: { type: Object, required: true },
|
||||
readonly: { type: Boolean, default: false }
|
||||
});
|
||||
|
||||
// 是否可以编辑项目(有报名记录时不能编辑)
|
||||
const canEditProject = computed(() => {
|
||||
return props.modelValue?.canEditProject ?? true;
|
||||
});
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
|
||||
// 判断是否只允许个人报名
|
||||
|
||||
@ -103,7 +103,8 @@ const currentStepData = computed(() => {
|
||||
case 2:
|
||||
return {
|
||||
...formData.value.projectConfig,
|
||||
registrationType: formData.value.basicInfo.registrationType
|
||||
registrationType: formData.value.basicInfo.registrationType,
|
||||
canEditProject: formData.value.projectConfig.canEditProject
|
||||
};
|
||||
case 3:
|
||||
return {
|
||||
@ -171,6 +172,7 @@ const formData = ref({
|
||||
individualProjectLimit: 1,
|
||||
teamProjectLimit: 1,
|
||||
},
|
||||
canEditProject: true, // 是否可以编辑项目(有报名记录时不能编辑)
|
||||
},
|
||||
// 步骤4:费用与账户配置
|
||||
feeConfig: {
|
||||
@ -241,6 +243,7 @@ const openDialog = async (id) => {
|
||||
formData.value.projectConfig = {
|
||||
projects: d.projects ?? [],
|
||||
registrationLimit: d.registrationLimit ?? { individualProjectLimit: 1, teamProjectLimit: 1 },
|
||||
canEditProject: d.canEditProject ?? true,
|
||||
};
|
||||
// 完全覆盖 feeConfig,不要保留旧数据
|
||||
if (d.feeConfig) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user