Просмотр исходного кода

feat(tournamentsTemplate): 添加通过模板生成赛事功能

- 新增 generateTournamentByTemplate API 接口用于通过模板生成赛事
- 在模板列表页面添加生成按钮,支持点击触发生成流程
- 实现生成赛事对话框界面,包含开始时间选择功能
- 添加表单验证确保开始时间必填
- 实现生成表单提交逻辑,调用后端接口生成赛事
- 添加生成成功/失败的消息提示反馈
- 实现生成后自动刷新列表数据
fugui001 1 месяц назад
Родитель
Сommit
4c50282ef6

+ 11 - 0
src/api/system/business/tournamentsTemplate/index.ts

@@ -112,3 +112,14 @@ export const selectTournamentsVoListTemplateList = (): AxiosPromise<TournamentsV
     method: 'get'
     method: 'get'
   });
   });
 };
 };
+/**
+ * 通过模板生成赛事
+ * @param data 请求数据 { templateId, beginTime }
+ */
+export const generateTournamentByTemplate = (data: { templateId: number; beginTime: string }): AxiosPromise<void> => {
+  return request({
+    url: '/business/tournamentsTemplate/generateTournamentByTemplate',
+    method: 'post',
+    params: data // 将数据作为查询参数传递
+  });
+};

+ 70 - 1
src/views/system/business/tournamentsTemplate/index.vue

@@ -148,6 +148,9 @@
               <el-tooltip content="删除" placement="top">
               <el-tooltip content="删除" placement="top">
                 <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
                 <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
               </el-tooltip>
               </el-tooltip>
+              <el-tooltip content="生成" placement="top">
+                <el-button link type="primary" @click="generateTournamentByTemplate2(scope.row)" icon="View">生成</el-button>
+              </el-tooltip>
             </div>
             </div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
@@ -519,6 +522,26 @@
     <el-dialog v-model="dialogVisible2" title="图片预览" width="50%">
     <el-dialog v-model="dialogVisible2" title="图片预览" width="50%">
       <img :src="previewSrc2 || iconPreviewUrl2 || competitionBg" alt="预览图片" style="max-width: 100%; max-height: 80vh" />
       <img :src="previewSrc2 || iconPreviewUrl2 || competitionBg" alt="预览图片" style="max-width: 100%; max-height: 80vh" />
     </el-dialog>
     </el-dialog>
+
+    <!-- 生成赛事对话框 -->
+    <el-dialog :title="generateDialog.title" v-model="generateDialog.visible" width="400px" append-to-body>
+      <el-form ref="generateFormRef" :model="generateForm" :rules="generateRules" label-width="80px">
+        <el-form-item label="开始时间" prop="beginTime">
+          <el-date-picker
+            v-model="generateForm.beginTime"
+            type="datetime"
+            placeholder="请选择开始时间"
+            value-format="YYYY-MM-DD HH:mm:ss"
+          />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitGenerateForm">生成</el-button>
+          <el-button @click="cancelGenerate">取消</el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
   </div>
 </template>
 </template>
 
 
@@ -531,7 +554,8 @@ import {
   updateTournaments,
   updateTournaments,
   getSelectTournamentBlindStructuresList,
   getSelectTournamentBlindStructuresList,
   assignTournamentBlindStructures,
   assignTournamentBlindStructures,
-  uploadTournament
+  uploadTournament,
+  generateTournamentByTemplate
 } from '@/api/system/business/tournamentsTemplate';
 } from '@/api/system/business/tournamentsTemplate';
 import { selectItemsSelList } from '@/api/system/business/items';
 import { selectItemsSelList } from '@/api/system/business/items';
 import { selectBlindLevelsById } from '@/api/system/business/levels';
 import { selectBlindLevelsById } from '@/api/system/business/levels';
@@ -1550,6 +1574,51 @@ const getGameVariantText = (value: string | number | null | undefined): string =
       return '未知';
       return '未知';
   }
   }
 };
 };
+// 生成对话框相关状态
+const generateDialog = reactive({
+  visible: false,
+  title: '生成赛事'
+});
+
+const generateForm = reactive({
+  templateId: undefined as number | undefined,
+  beginTime: ''
+});
+
+const generateFormRef = ref<ElFormInstance>();
+const generateRules = {
+  beginTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }]
+};
+// 新增:处理生成按钮点击
+const generateTournamentByTemplate2 = (row: TournamentsVO) => {
+  debugger;
+  generateForm.templateId = row.id as number;
+  generateDialog.visible = true;
+  generateDialog.title = '生成赛事';
+};
+// 提交生成表单
+const submitGenerateForm = () => {
+  generateFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      try {
+        // 调试:打印 templateId 值
+        console.log('templateId:', generateForm.templateId);
+        console.log('beginTime:', generateForm.beginTime);
+        debugger;
+        // 调用后端接口
+        await generateTournamentByTemplate({
+          templateId: generateForm.templateId,
+          beginTime: generateForm.beginTime
+        });
+        proxy?.$modal.msgSuccess('生成成功');
+        generateDialog.visible = false;
+        await getList();
+      } catch (err) {
+        proxy?.$modal.msgError('生成失败');
+      }
+    }
+  });
+};
 </script>
 </script>
 <style scoped>
 <style scoped>
 .more-rewards {
 .more-rewards {