diff --git a/src/views/match/manage/Steps/Step1BasicInfo.vue b/src/views/match/manage/Steps/Step1BasicInfo.vue index 6bce080..f54d3a8 100644 --- a/src/views/match/manage/Steps/Step1BasicInfo.vue +++ b/src/views/match/manage/Steps/Step1BasicInfo.vue @@ -218,14 +218,60 @@ const handleCityChange = async () => { } }; +const validateEventTime = (rule, value, callback) => { + const regTime = localFormData.value.registrationTime; + const matchTime = localFormData.value.matchTime; + + if (!regTime || !Array.isArray(regTime) || regTime.length !== 2 || !regTime[0] || !regTime[1]) { + return callback(); + } + + if (!matchTime || !Array.isArray(matchTime) || matchTime.length !== 2 || !matchTime[0] || !matchTime[1]) { + return callback(); + } + + const regStart = new Date(regTime[0]); + const regEnd = new Date(regTime[1]); + const matchStart = new Date(matchTime[0]); + const matchEnd = new Date(matchTime[1]); + + if (regStart >= regEnd) { + return callback(new Error('报名结束时间必须晚于报名开始时间')); + } + + if (matchStart >= matchEnd) { + return callback(new Error('比赛结束时间必须晚于比赛开始时间')); + } + + if (matchStart <= regStart) { + return callback(new Error('比赛开始时间必须晚于报名开始时间')); + } + + if (matchStart <= regEnd) { + return callback(new Error('比赛开始时间必须晚于报名结束时间')); + } + + if (matchEnd <= regEnd) { + return callback(new Error('比赛结束时间必须晚于报名结束时间')); + } + + callback(); +}; + const rules = ref({ eventName: [{ required: true, message: '请输入赛事名称', trigger: 'blur' }], coverImage: [{ required: true, message: '请上传封面', trigger: 'change' }], eventType: [{ required: true, message: '请选择赛事类型', trigger: 'change' }], registrationType: [{ required: true, message: '请选择报名方式', trigger: 'change' }], pointsRuleId: [{ required: true, message: '请选择积分规则', trigger: 'change' }], - registrationTime: [{ type: 'array', required: true, message: '请选择报名起止时间', trigger: 'change' }], - matchTime: [{ type: 'array', required: true, message: '请选择比赛起止时间', trigger: 'change' }], + registrationTime: [ + { type: 'array', required: true, message: '请选择报名起止时间', trigger: 'change' }, + { validator: validateEventTime, trigger: 'change' } + ], + matchTime: [ + { type: 'array', required: true, message: '请选择比赛起止时间', trigger: 'change' }, + { validator: validateEventTime, trigger: 'change' } + ], materialUploadTime: [ { validator: (rule, value, callback) => { diff --git a/src/views/match/manage/index.vue b/src/views/match/manage/index.vue index 06f6893..ce74f36 100644 --- a/src/views/match/manage/index.vue +++ b/src/views/match/manage/index.vue @@ -20,8 +20,8 @@