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