fix: 修复子活动人数不能为0情况

This commit is contained in:
2026-09-11 09:34:53 +08:00
parent e68e71b883
commit a575fdd958
6 changed files with 53 additions and 16 deletions
+2 -1
View File
@@ -25,4 +25,5 @@ target/
hs_err_pid*
src/main/resources/application.yaml
src/main/resources/application.yaml
.vscode
@@ -325,7 +325,7 @@ public class TrainSignUpActivityServiceImpl extends BaseServiceImpl<TrainSignUpA
TrainSignUpCourse course = dao().fetch(TrainSignUpCourse.class, trainSignUpUser.getCourseId());
TrainSignUpType type = dao().fetch(TrainSignUpType.class, course.getCourseType());
//如果这个课程的预留名额方式为报名人数不变
if (course.getReserveMode() == 2) {
if (course.getReserveMode() == 2 && course.getCoursePeopleNumber() > 0) {
//如果当前报名+已报小于这个课程限制人数
//课程已报人数
int normalCount = statisticsService.queryCourseCount(course.getId(), course.getCourseType());
@@ -424,7 +424,7 @@ public class TrainSignUpActivityServiceImpl extends BaseServiceImpl<TrainSignUpA
//课程限制人数
int coursePeopleNumber = course.getCoursePeopleNumber();
if (coursePeopleNumber == 0) {
return true;
return false;
}
//查询课程对应的类型
TrainSignUpType type = dao().fetch(TrainSignUpType.class, course.getCourseType());
@@ -197,7 +197,7 @@ const courseList = {
})
} else {
let lave = row.coursePeopleNumber - (row.hasRegisterNum + row.courseReservedNumber)
if(row.reserveMode === 2 && lave <= 0) {
if(row.coursePeopleNumber > 0 && row.reserveMode === 2 && lave <= 0) {
this.$alert('您当前的报名为候补报名状态', "提示", {
confirmButtonText: "确定",
type: "warning"
@@ -260,6 +260,9 @@ const courseList = {
})
},
calcSignUpCount(o) {
if(!o.coursePeopleNumber) {
return "名额数不限制"
}
let lave = o.coursePeopleNumber - (o.hasRegisterNum + o.courseReservedNumber)
if(o.reserveMode === 2) {
let lave2 = o.waitingNum - o.hasWaitingNum
@@ -173,12 +173,14 @@ const basicForm = {
</el-table-column>
<el-table-column :label="trainType + '名称'" prop="courseName">
<template v-slot:header="{column}"><span style="color: #F56C6C; margin-right: 4px">*</span>{{ column.label }}</template>
<template v-slot="{row}">
<el-input size="small" v-model="row.courseName" :placeholder="'请输入' + trainType + '名称'"></el-input>
</template>
</el-table-column>
<el-table-column label="类型" prop="courseType" sortable>
<template v-slot:header="{column}"><span style="color: #F56C6C; margin-right: 4px">*</span>{{ column.label }}</template>
<template v-slot="{row}">
<el-select size="small" v-model="row.courseType" @change="(val) => {courseTypeChange(val, row)}">
<el-option :label="c.typeName" :value="c.id" :key="c.id" v-for="c in courseTypeList"></el-option>
@@ -228,12 +230,14 @@ const basicForm = {
</el-table-column>
<el-table-column :label="trainType + '地点'" prop="courseLocation">
<template v-slot:header="{column}"><span style="color: #F56C6C; margin-right: 4px">*</span>{{ column.label }}</template>
<template v-slot="{row}">
<el-input size="small" v-model="row.courseLocation" :placeholder="'请输入' + trainType + '地点'"></el-input>
</template>
</el-table-column>
<el-table-column :label="trainType + '负责人'" prop="courseInstructor">
<template v-slot:header="{column}"><span style="color: #F56C6C; margin-right: 4px">*</span>{{ column.label }}</template>
<template v-slot="{row}">
<el-input size="small" v-model="row.courseInstructor" :placeholder="'请输入' + trainType + '负责人'"></el-input>
</template>
@@ -246,6 +250,7 @@ const basicForm = {
</el-table-column>
<el-table-column :label="trainType + '时间'">
<template v-slot:header="{column}"><span style="color: #F56C6C; margin-right: 4px">*</span>{{ column.label }}</template>
<template v-slot="scope">
<el-button @click="openSetUpCourseTime(scope.$index)" type="text">设置{{ trainType }}时间</el-button>
</template>
@@ -359,6 +364,7 @@ const basicForm = {
},
methods: {
async validNumber(row, old) {
if (!row.coursePeopleNumber) return
if (GetQueryString("id") === "") {
if (row.courseReservedNumber > row.coursePeopleNumber && row.reserveMode === 1) {
this.$alert("预留人数不能大于" + this.trainType + "人数!", "提示", {
@@ -505,20 +511,41 @@ const basicForm = {
this.$refs["form"].validate(async (valid, errMsg) => {
if (valid) {
const courseValid = this.formData.courseList.some((v, i) => {
const basicValid = v.courseName && v.coursePeopleNumber && v.courseLocation && v.courseInstructor && v.courseType
const timeValid =
v.courseTimeList.length > 0 &&
v.courseTimeList.every((x) => {
return x.courseStartTime && x.courseEndTime && x.courseStartTime < x.courseEndTime
})
if (!timeValid) {
this.$message.warning("第" + (i + 1) + "行时间填写有误,请核查")
const rowLabel = "第" + (i + 1) + "行"
const missingFields = []
if (!v.courseName) missingFields.push(this.trainType + "名称")
if (!v.courseType) missingFields.push("类型")
if (!v.courseLocation) missingFields.push(this.trainType + "地点")
if (!v.courseInstructor) missingFields.push(this.trainType + "负责人")
if (missingFields.length > 0) {
this.$message.warning("请填写" + rowLabel + "的" + missingFields.join("、"))
return true
}
if (!basicValid) {
this.$message.warning("第" + (i + 1) + "行信息填写有误,请核查")
const peopleNumber = Number(v.coursePeopleNumber == null ? 0 : v.coursePeopleNumber)
if (!Number.isInteger(peopleNumber) || peopleNumber < 0) {
this.$message.warning(rowLabel + this.trainType + "人数必须为非负整数,填0或留空表示不限制")
return true
}
if (!v.courseTimeList || v.courseTimeList.length === 0) {
this.$message.warning(rowLabel + "请设置" + this.trainType + "时间")
return true
}
const timeInvalid = v.courseTimeList.some((x, timeIndex) => {
const timeLabel = rowLabel + "第" + (timeIndex + 1) + "个时间段"
const missingTimes = []
if (!x.courseStartTime) missingTimes.push("开始时间")
if (!x.courseEndTime) missingTimes.push("结束时间")
if (missingTimes.length > 0) {
this.$message.warning(timeLabel + "请填写:" + missingTimes.join("、"))
return true
}
if (x.courseStartTime >= x.courseEndTime) {
this.$message.warning(timeLabel + "结束时间必须晚于开始时间")
return true
}
return false
})
if (timeInvalid) return true
if (v.isMobileSign === true && v.signType === 3 && (v.courseLocationCoordinates === undefined || v.courseLocationCoordinates.length < 2)) {
this.$message.warning("第" + (i + 1) + "行地点坐标填写有误,请核查")
return true
@@ -549,6 +576,11 @@ const basicForm = {
cloneData.year = new Date(cloneData.activitySignUpStartTime).getFullYear()
}
cloneData.typeLimits = JSON.stringify(this.formData.typeLimits)
cloneData.courseList.forEach(v => {
if (v.coursePeopleNumber == null || v.coursePeopleNumber === "") {
v.coursePeopleNumber = 0
}
})
cloneData.courseList = JSON.stringify(cloneData.courseList)
cloneData.hostUnits = JSON.stringify(cloneData.hostUnits)
cloneData.helpUnits = JSON.stringify(cloneData.helpUnits)
@@ -53,7 +53,7 @@ const userInfo = {
<el-radio-group v-model="afterAdjustCourse">
<el-radio
@change.native="getCurrentRow(row)"
:disabled="(row.courseReservedNumber + row.registerNum) >= row.coursePeopleNumber"
:disabled="row.coursePeopleNumber > 0 && (row.courseReservedNumber + row.registerNum) >= row.coursePeopleNumber"
:label="row.id"
key="row.id"
> &nbsp;</el-radio>
@@ -68,6 +68,7 @@ const userInfo = {
show-overflow-tooltip
></el-table-column>
<el-table-column label="最多报名人数" prop="coursePeopleNumber" align="center" header-align="center">
<template v-slot="{row}">{{row.coursePeopleNumber === 0 ? '不限制' : row.coursePeopleNumber}}</template>
</el-table-column>
<el-table-column label="预留名额" prop="courseReservedNumber" align="center" header-align="center"></el-table-column>
<el-table-column label="已报名人数" prop="registerNum" align="center" header-align="center"></el-table-column>
@@ -164,7 +164,7 @@ layout("/layouts/platform_h5.html"){
})
} else {
let lave = row.coursePeopleNumber - (row.hasRegisterNum + row.courseReservedNumber)
if(row.reserveMode === 2 && lave <= 0) {
if(row.coursePeopleNumber > 0 && row.reserveMode === 2 && lave <= 0) {
vant.Dialog.alert({
title: '提示',
message: '您当前的报名为候补报名状态',