瀏覽代碼

fix(tournaments): 解决表单验证和路由参数处理问题

- 注释掉比赛项目选择框以解决显示问题
- 修复报名条件备注字段绑定错误
- 添加裁判必填验证规则
- 更新最小参赛人数验证提示信息
- 在创建比赛时正确传递联赛ID参数
- 修复注释语法错误
- 添加路由监听器以响应联赛ID变化并重新加载相关数据
fugui001 4 天之前
父節點
當前提交
ab24072a97
共有 2 個文件被更改,包括 28 次插入7 次删除
  1. 2 2
      src/views/system/physical/leagueTournament/index.vue
  2. 26 5
      src/views/system/physical/tournaments/index.vue

+ 2 - 2
src/views/system/physical/leagueTournament/index.vue

@@ -163,11 +163,11 @@
         <el-form-item label="赛事标题" prop="title">
           <el-input v-model="form.title" placeholder="请输入赛事标题" />
         </el-form-item>
-        <el-form-item label="比赛项目" prop="gameVariant">
+<!--        <el-form-item label="比赛项目" prop="gameVariant">
           <el-select aria-required="true" v-model="form.gameVariant" placeholder="请选择">
             <el-option v-for="dict in game_variant_type" :key="dict.value" :label="dict.label" :value="dict.value"> </el-option>
           </el-select>
-        </el-form-item>
+        </el-form-item>-->
         <el-form-item label="上传图片" prop="imageUrl">
           <div class="upload-container">
             <el-upload

+ 26 - 5
src/views/system/physical/tournaments/index.vue

@@ -344,7 +344,7 @@
         <el-form-item label="最小参赛人数" prop="minPlayers">
           <el-input v-model="form.minPlayers" placeholder="请输入最小参赛人数" :disabled="dialog.mode === 'view'" />
         </el-form-item>
-        <el-form-item label="报名条件备注" prop="minPlayers">
+        <el-form-item label="报名条件备注">
           <el-input v-model="form.conditionNote" placeholder="请输入报名条件备注" :disabled="dialog.mode === 'view'" />
         </el-form-item>
         <el-form-item label="报名条件" prop="itemsId">
@@ -602,6 +602,7 @@ const data = reactive<PageData<TournamentsForm, TournamentsQuery>>({
     gameType: [{ required: true, message: '游戏类型不能为空', trigger: 'change' }],
     lateRegistrationLevel: [{ required: true, message: '截止报名级别不能为空', trigger: 'change' }],
     signTime: [{ required: true, message: '报名时间不能为空', trigger: 'change' }],
+    judgeId: [{ required: true, message: '裁判不能为空', trigger: 'change' }],
     // ...其他规则
     // ... existing code ...
     itemsId: [
@@ -707,14 +708,14 @@ const data = reactive<PageData<TournamentsForm, TournamentsQuery>>({
       }
     ],
     minPlayers: [
-      { required: false, message: '最小参赛人数不能为空', trigger: 'blur' },
+      { required: false, message: '参赛人数不能为空', trigger: 'blur' },
       {
         validator: (rule: any, value: any, callback: any) => {
           const num = Number(value);
           if (!/^\d+$/.test(value)) {
             callback(new Error('只能输入正整数'));
           } else if (num < 0 || num > 999) {
-            callback(new Error('最小参赛人数必须在0-999之间'));
+            callback(new Error('参赛人数必须在0-999之间'));
           } else {
             callback();
           }
@@ -795,6 +796,8 @@ const handleAdd = () => {
   competitionIcon.value = ''; // 如果需要清除后台加载的图标,可以在这里设置为空字符串
   iconPreviewUrl2.value = '';
   competitionBg.value = '';
+
+  form.value.leagueTournamentId = queryParams.value.leagueTournamentId ? Number(queryParams.value.leagueTournamentId) : undefined;
   dialog.visible = true;
   dialog.title = '创建比赛';
   dialog.mode = 'add'; // 设置模式
@@ -864,7 +867,7 @@ const handleUpdate = async (row?: TournamentsVO, mode: 'edit' | 'view' = 'edit')
 const submitForm = () => {
   tournamentsFormRef.value?.validate(async (valid: boolean) => {
     // 校验奖励内容是否至少填写了一项
-   /* if (data.form.tournamentType !== 1) {
+    /* if (data.form.tournamentType !== 1) {
       if (!formPrize.rewards.some((r) => r.itemId && r.quantity)) {
         ElMessage.warning('请至少填写一项奖励内容');
         return;
@@ -934,11 +937,11 @@ const handleExport = () => {
     `大奖赛${parseTime(new Date(), '{y}{m}{d}{h}{i}{s}')}.xlsx`
   );
 };
-
 onMounted(() => {
   const route = proxy?.$route;
   if (route.query.leagueTournamentId) {
     queryParams.value.leagueTournamentId = String(route.query.leagueTournamentId);
+    form.value.leagueTournamentId = route.query.leagueTournamentId as number;
   }
   getList();
   loadItemOptions();
@@ -948,6 +951,24 @@ onMounted(() => {
   loadItemPrizeOptions();
   loadLeagueRelatedTournaments();
 });
+// 监听路由变化,重新加载数据
+watch(
+  () => proxy?.$route.query.leagueTournamentId,
+  (newVal) => {
+    if (newVal) {
+      queryParams.value.leagueTournamentId = String(newVal);
+      form.value.leagueTournamentId = Number(newVal);
+      getList();
+      loadItemOptions();
+      loadItemStructuresOptions();
+      loadLeagueTournamentOptions();
+      loadJudgeOptions();
+      loadItemPrizeOptions();
+      loadLeagueRelatedTournaments();
+    }
+  },
+  { immediate: false }
+);
 const itemOptions = ref<{ id: number; label: string }[]>([]);
 // 加载报名条件选项
 const loadItemOptions = async () => {