瀏覽代碼

feat(gameEventProject): 新增实时统计数据功能

- 添加 `listGameEventProjectWithStats` API 接口用于查询带实时统计的赛事项目列表
- 在 GameEventProjectVO 类型定义中新增 athleteCount、groupCount、teamCount 字段
- 更新表格组件显示参赛人数、代表队数、分组数统计信息
- 将数据获取接口切换到带统计信息的新接口

Co-authored-by: Copilot <copilot@github.com>
zhou 1 月之前
父節點
當前提交
5fa6032034

+ 11 - 0
src/api/system/gameEventProject/index.ts

@@ -16,6 +16,17 @@ export const listGameEventProject = (query?: GameEventProjectQuery): AxiosPromis
   });
 };
 
+/**
+ * 查询赛事项目列表(带实时统计:人数、队数、组数)
+ */
+export const listGameEventProjectWithStats = (query?: GameEventProjectQuery): AxiosPromise<GameEventProjectVO[]> => {
+  return request({
+    url: '/system/gameEventProject/listWithStats',
+    method: 'get',
+    params: query
+  });
+};
+
 /**
  * 查询所有赛事的项目列表(用于项目库)
  * @param query

+ 13 - 0
src/api/system/gameEventProject/types.ts

@@ -112,6 +112,19 @@ export interface GameEventProjectVO {
    * 备注
    */
   remark: string;
+
+  /**
+   * 参赛人数
+   */
+  athleteCount: number;
+  /**
+   * 参赛组数
+   */
+  groupCount: number;
+  /**
+   * 参赛队数
+   */
+  teamCount: number;
 }
 
 export interface GameEventProjectForm extends BaseEntity {

+ 8 - 18
src/views/system/gameEventProject/index.vue

@@ -91,8 +91,9 @@
             <span v-else style="color: #999;">暂无裁判</span>
           </template>
         </el-table-column>
-        <!-- <el-table-column label="参赛组数" align="center" prop="groupNum" />
-        <el-table-column label="参赛人数" align="center" prop="participateNum" /> -->
+        <el-table-column label="参赛人数" align="center" prop="athleteCount" v-if="columns[14].visible" />
+        <el-table-column label="代表队数" align="center" prop="teamCount" v-if="columns[15].visible" />
+        <el-table-column label="分组数" align="center" prop="groupCount" v-if="columns[16].visible" />
         <el-table-column label="录取名次" align="center" prop="roundType" v-if="columns[9].visible" />
         <el-table-column label="排序方式" align="center" prop="orderType" v-if="columns[10].visible">
           <template #default="scope">
@@ -111,8 +112,6 @@
             <dict-tag :options="game_stage" :value="scope.row.gameStage || ''" />
           </template>
         </el-table-column>
-        <!-- <el-table-column label="状态" align="center" prop="status" /> -->
-        <!-- <el-table-column label="备注" align="center" prop="remark" /> -->
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-tooltip content="修改" placement="top">
@@ -152,12 +151,6 @@
             <el-radio v-for="dict in game_project_classification" :key="dict.value" :label="dict.label" :value="dict.value" />
           </el-radio-group>
         </el-form-item>
-        <!-- <el-form-item label="参赛组数" prop="groupNum">
-          <el-input v-model="form.groupNum" placeholder="请输入参赛组数" />
-        </el-form-item>
-        <el-form-item label="参赛人数" prop="participateNum">
-          <el-input v-model="form.participateNum" placeholder="请输入参赛人数" />
-        </el-form-item> -->
         <el-form-item label="比赛阶段" prop="gameStage">
           <el-radio-group v-model="form.gameStage" style="width: 100%">
             <el-radio v-for="dict in game_stage" :key="dict.value" :label="dict.label" :value="dict.value" />
@@ -214,13 +207,6 @@
           <el-date-picker clearable v-model="form.endTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择结束时间">
           </el-date-picker>
         </el-form-item>
-        <!-- <el-form-item label="奖项" prop="award">
-          <el-input v-model="form.award" placeholder="请输入奖项" />
-        </el-form-item> -->
-        
-        <!-- <el-form-item label="备注" prop="remark">
-            <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
-        </el-form-item> -->
       </el-form>
       <template #footer>
         <div class="dialog-footer">
@@ -241,6 +227,7 @@
 <script setup name="GameEventProject" lang="ts">
 import {
   listGameEventProject,
+  listGameEventProjectWithStats,
   getGameEventProject,
   delGameEventProject,
   addGameEventProject,
@@ -302,6 +289,9 @@ const columns = ref<FieldOption[]>([
   { key: 11, label: '排序方式', visible: true },
   { key: 12, label: '比赛轮次', visible: true },
   { key: 13, label: '比赛阶段', visible: true },
+  { key: 14, label: '参赛人数', visible: true },
+  { key: 15, label: '代表队数', visible: true },
+  { key: 16, label: '分组数', visible: true }
 ]);
 
 const initFormData: GameEventProjectForm = {
@@ -349,7 +339,7 @@ const { queryParams, form, rules } = toRefs(data);
 /** 查询赛事项目列表 */
 const getList = async () => {
   loading.value = true;
-  const res = await listGameEventProject(queryParams.value);
+  const res = await listGameEventProjectWithStats(queryParams.value);
   gameEventProjectList.value = res.rows;
   total.value = res.total;
   loading.value = false;