Bläddra i källkod

feat(tournaments): 添加删除和关闭比赛功能

- 新增 deleteCheckTournament 和 closeSendTournament API 接口
- 在比赛列表中添加删除和关闭操作按钮- 实现删除和关闭比赛的前端逻辑
- 在表格中显示比赛是否已删除的状态
fugui001 3 månader sedan
förälder
incheckning
b6326e48c2

+ 18 - 0
src/api/system/business/tournaments/index.ts

@@ -106,3 +106,21 @@ export const uploadTournament = async (file: File) => {
 
   return res;
 };
+
+/**
+ * 删除【请填写功能名称】
+ * @param id
+ */
+export const deleteCheckTournament = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/business/tournaments/deleteCheckTournament/' + id,
+    method: 'delete'
+  });
+};
+
+export const closeSendTournament = (id: string | number | Array<string | number>) => {
+  return request({
+    url: '/business/tournaments/closeSendTournament/' + id,
+    method: 'GET'
+  });
+};

+ 58 - 5
src/views/system/business/tournaments/index.vue

@@ -68,7 +68,7 @@
         @sort-change="handleSortChange"
         :default-sort="{ prop: 'startTime', order: sortData.order }"
       >
-        <el-table-column type="selection" width="55" align="center" />
+        <!--        <el-table-column type="selection" width="55" align="center" />-->
         <el-table-column label="比赛ID" align="center" prop="id" width="70" />
         <el-table-column label="比赛名" align="center" prop="name" />
         <el-table-column label="比赛Logo" align="center" width="90">
@@ -119,6 +119,17 @@
         </el-table-column>
 
         <el-table-column label="赛事状态" align="center" prop="statusText" />
+        <el-table-column label="是否删除" align="center">
+          <template #default="scope">
+            <span
+              :style="{
+                color: [null, undefined, '', ' '].includes(scope.row.isDelete) || scope.row.isDelete === false ? '' : 'red'
+              }"
+            >
+              {{ [null, undefined, '', ' '].includes(scope.row.isDelete) || scope.row.isDelete === false ? '未删除' : '已删除' }}
+            </span>
+          </template>
+        </el-table-column>
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="320">
           <template #default="scope">
             <div class="operation-buttons-vertical">
@@ -126,6 +137,11 @@
                 <el-button link type="primary" icon="View" @click="openAuditDialog(scope.row.id, 'view')">查看</el-button>
               </el-tooltip>
 
+              <el-tooltip content="删除" v-if="scope.row.status === 0 && scope.row.isDelete != true" placement="top">
+                <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['business:tournaments:remove']"
+                  >删除</el-button
+                >
+              </el-tooltip>
               <el-tooltip content="编辑" v-if="scope.row.status === 0" placement="top" v-hasPermi="['business:tournaments:edit']">
                 <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row, 'edit')">编辑</el-button>
               </el-tooltip>
@@ -141,6 +157,10 @@
               <el-tooltip content="领奖审核" placement="top" v-hasPermi="['business:tournaments:audit']">
                 <el-button link type="primary" icon="DocumentChecked" @click="openAuditDialog(scope.row.id, 'audit')">领奖审核</el-button>
               </el-tooltip>
+
+              <el-tooltip content="关闭" v-if="scope.row.status === 1" placement="top" v-hasPermi="['business:tournaments:closeSendTournament']">
+                <el-button link type="primary" icon="Close" @click="closeSendTournamentOperate(scope.row)">关闭</el-button>
+              </el-tooltip>
             </div>
           </template>
         </el-table-column>
@@ -420,7 +440,6 @@
             <div v-for="(prize, index) in scope.row.rewardVoList" :key="index">{{ prize.itemName }} {{ prize.quantity }}</div>
           </template>
         </el-table-column>
-
         <el-table-column prop="claimedText" label="状态" align="center"></el-table-column>
         <el-table-column label="操作" align="center" width="350" class-name="small-padding fixed-width">
           <template #default="scope">
@@ -473,11 +492,13 @@ import {
   listTournaments,
   getTournaments,
   delTournaments,
+  deleteCheckTournament,
   addTournaments,
   updateTournaments,
   getSelectTournamentBlindStructuresList,
   assignTournamentBlindStructures,
-  uploadTournament
+  uploadTournament,
+  closeSendTournament
 } from '@/api/system/business/tournaments';
 import { selectItemsSelList } from '@/api/system/business/items';
 import { selectBlindLevelsById } from '@/api/system/business/levels';
@@ -884,12 +905,44 @@ const submitForm = () => {
 /** 删除按钮操作 */
 const handleDelete = async (row?: TournamentsVO) => {
   const _ids = row?.id || ids.value;
-  await proxy?.$modal.confirm('是否确认删除【赛事信息】编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
-  await delTournaments(_ids);
+  await proxy?.$modal.confirm('是否确认删除比赛ID为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
+  await deleteCheckTournament(_ids);
   proxy?.$modal.msgSuccess('删除成功');
   await getList();
 };
 
+/** 删除按钮操作 */
+const closeSendTournamentOperate = async (row?: TournamentsVO) => {
+  // 1. 获取要关闭的 ID 列表
+  const _ids = row ? [row.id] : ids.value; // 始终为 number[]
+
+  if (!_ids || _ids.length === 0) {
+    proxy?.$modal.msgWarning('请至少选择一条记录');
+    return;
+  }
+
+  // 2. 确认操作
+  try {
+    await proxy?.$modal.confirm(`是否确认关闭比赛ID为 "${_ids.join(', ')}" 的比赛?`);
+
+    // 3. 批量关闭(假设 closeSendTournament 支持传数组)
+    await closeSendTournament(_ids); // 推荐:API 支持批量
+
+    // 如果 API 只支持单个,则用循环:
+    // for (const id of _ids) {
+    //   await closeSendTournament(id);
+    // }
+
+    proxy?.$modal.msgSuccess('操作成功');
+    await getList();
+  } catch (error) {
+    // 用户取消或请求失败
+    console.log('取消操作或操作失败');
+  } finally {
+    loading.value = false;
+  }
+};
+
 /** 导出按钮操作 */
 const handleExport = () => {
   proxy?.download(