赛事新增限制
This commit is contained in:
parent
b87373ee94
commit
1c15442978
@ -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({
|
const rules = ref({
|
||||||
eventName: [{ required: true, message: '请输入赛事名称', trigger: 'blur' }],
|
eventName: [{ required: true, message: '请输入赛事名称', trigger: 'blur' }],
|
||||||
coverImage: [{ required: true, message: '请上传封面', trigger: 'change' }],
|
coverImage: [{ required: true, message: '请上传封面', trigger: 'change' }],
|
||||||
eventType: [{ required: true, message: '请选择赛事类型', trigger: 'change' }],
|
eventType: [{ required: true, message: '请选择赛事类型', trigger: 'change' }],
|
||||||
registrationType: [{ required: true, message: '请选择报名方式', trigger: 'change' }],
|
registrationType: [{ required: true, message: '请选择报名方式', trigger: 'change' }],
|
||||||
pointsRuleId: [{ required: true, message: '请选择积分规则', trigger: 'change' }],
|
pointsRuleId: [{ required: true, message: '请选择积分规则', trigger: 'change' }],
|
||||||
registrationTime: [{ type: 'array', required: true, message: '请选择报名起止时间', trigger: 'change' }],
|
registrationTime: [
|
||||||
matchTime: [{ type: 'array', required: true, message: '请选择比赛起止时间', trigger: 'change' }],
|
{ type: 'array', required: true, message: '请选择报名起止时间', trigger: 'change' },
|
||||||
|
{ validator: validateEventTime, trigger: 'change' }
|
||||||
|
],
|
||||||
|
matchTime: [
|
||||||
|
{ type: 'array', required: true, message: '请选择比赛起止时间', trigger: 'change' },
|
||||||
|
{ validator: validateEventTime, trigger: 'change' }
|
||||||
|
],
|
||||||
materialUploadTime: [
|
materialUploadTime: [
|
||||||
{
|
{
|
||||||
validator: (rule, value, callback) => {
|
validator: (rule, value, callback) => {
|
||||||
|
|||||||
@ -20,8 +20,8 @@
|
|||||||
<el-image :src="scope.row.coverImage" style="height: 80px" fit="cover" />
|
<el-image :src="scope.row.coverImage" style="height: 80px" fit="cover" />
|
||||||
</template>
|
</template>
|
||||||
<template #eventStatus="scope">
|
<template #eventStatus="scope">
|
||||||
<el-tag :type="scope.row.eventStatus === 0 ? 'success' : scope.row.eventStatus === 1 ? 'warning' : 'danger'">
|
<el-tag :type="getEventStatusTagType(scope.row.eventStatus)">
|
||||||
{{ scope.row.eventStatus === 0 ? '报名中' : scope.row.eventStatus === 1 ? '比赛中' : '已结束' }}
|
{{ getEventStatusText(scope.row.eventStatus) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
<template #action="scope">
|
<template #action="scope">
|
||||||
@ -56,6 +56,25 @@ const initParam = ref({
|
|||||||
refresh: true,
|
refresh: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 赛事状态映射
|
||||||
|
const eventStatusMap = {
|
||||||
|
0: { type: 'info', text: '未开始' },
|
||||||
|
1: { type: 'success', text: '报名中' },
|
||||||
|
2: { type: 'warning', text: '报名结束' },
|
||||||
|
3: { type: 'primary', text: '比赛中' },
|
||||||
|
4: { type: 'danger', text: '已结束' },
|
||||||
|
};
|
||||||
|
|
||||||
|
const getEventStatusTagType = (status) => {
|
||||||
|
const normalizedStatus = typeof status === 'string' ? Number(status) : status;
|
||||||
|
return eventStatusMap[normalizedStatus]?.type ?? 'info';
|
||||||
|
};
|
||||||
|
|
||||||
|
const getEventStatusText = (status) => {
|
||||||
|
const normalizedStatus = typeof status === 'string' ? Number(status) : status;
|
||||||
|
return eventStatusMap[normalizedStatus]?.text ?? (status ?? '-');
|
||||||
|
};
|
||||||
|
|
||||||
const refreshTable = () =>{
|
const refreshTable = () =>{
|
||||||
initParam.value.refresh = !initParam.value.refresh
|
initParam.value.refresh = !initParam.value.refresh
|
||||||
}
|
}
|
||||||
@ -130,9 +149,11 @@ const columns = reactive([
|
|||||||
el: 'select',
|
el: 'select',
|
||||||
},
|
},
|
||||||
enum: [
|
enum: [
|
||||||
{ label: '报名中', value: 0 },
|
{ label: '未开始', value: 0 },
|
||||||
{ label: '比赛中', value: 1 },
|
{ label: '报名中', value: 1 },
|
||||||
{ label: '已结束', value: 2 },
|
{ label: '报名结束', value: 2 },
|
||||||
|
{ label: '比赛中', value: 3 },
|
||||||
|
{ label: '已结束', value: 4 },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -22,8 +22,8 @@
|
|||||||
<span v-else>-</span>
|
<span v-else>-</span>
|
||||||
</template>
|
</template>
|
||||||
<template #eventStatus="scope">
|
<template #eventStatus="scope">
|
||||||
<el-tag :type="scope.row.eventStatus === 0 ? 'success' : scope.row.eventStatus === 1 ? 'warning' : 'danger'">
|
<el-tag :type="getEventStatusTagType(scope.row.eventStatus)">
|
||||||
{{ scope.row.eventStatus === 0 ? '报名中' : scope.row.eventStatus === 1 ? '比赛中' : '已结束' }}
|
{{ getEventStatusText(scope.row.eventStatus) }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
<template #registrationStartTime="scope">
|
<template #registrationStartTime="scope">
|
||||||
@ -464,6 +464,25 @@ const chargeModeMap = {
|
|||||||
const getEventTypeText = (v) => eventTypeMap[normalizeToNumber(v)] ?? (v ?? '-');
|
const getEventTypeText = (v) => eventTypeMap[normalizeToNumber(v)] ?? (v ?? '-');
|
||||||
const getChargeModeText = (v) => chargeModeMap[normalizeToNumber(v)] ?? (v ?? '-');
|
const getChargeModeText = (v) => chargeModeMap[normalizeToNumber(v)] ?? (v ?? '-');
|
||||||
|
|
||||||
|
// 赛事状态映射
|
||||||
|
const eventStatusMap = {
|
||||||
|
0: { type: 'info', text: '未开始' },
|
||||||
|
1: { type: 'success', text: '报名中' },
|
||||||
|
2: { type: 'warning', text: '报名结束' },
|
||||||
|
3: { type: 'primary', text: '比赛中' },
|
||||||
|
4: { type: 'danger', text: '已结束' },
|
||||||
|
};
|
||||||
|
|
||||||
|
const getEventStatusTagType = (status) => {
|
||||||
|
const normalizedStatus = typeof status === 'string' ? Number(status) : status;
|
||||||
|
return eventStatusMap[normalizedStatus]?.type ?? 'info';
|
||||||
|
};
|
||||||
|
|
||||||
|
const getEventStatusText = (status) => {
|
||||||
|
const normalizedStatus = typeof status === 'string' ? Number(status) : status;
|
||||||
|
return eventStatusMap[normalizedStatus]?.text ?? (status ?? '-');
|
||||||
|
};
|
||||||
|
|
||||||
const disableCancel = computed(() => {
|
const disableCancel = computed(() => {
|
||||||
if (!currentRow.value) return true;
|
if (!currentRow.value) return true;
|
||||||
const status = normalizeToNumber(currentRow.value.status);
|
const status = normalizeToNumber(currentRow.value.status);
|
||||||
|
|||||||
@ -824,6 +824,8 @@ const formatGender = (gender) => {
|
|||||||
const v = Number(gender);
|
const v = Number(gender);
|
||||||
if (v === 0) return '男';
|
if (v === 0) return '男';
|
||||||
if (v === 1) return '女';
|
if (v === 1) return '女';
|
||||||
|
if (v === 2) return '保密';
|
||||||
|
if (v === 3) return '不限';
|
||||||
return '不限';
|
return '不限';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user