Преглед на файлове

feat(tournaments): 添加预报名时间和WebSocket聊天功能

- 在联赛锦标赛中新增预报名开始和结束时间字段及表格列
- 添加预报名时间相关的表单验证规则
- 在门店管理页面集成WebSocket聊天功能,包括连接、发送消息
- 添加聊天输入界面和消息处理逻辑
- 注释掉不需要的表格列和表单项以优化显示
- 更新类型定义文件中的接口结构
fugui001 преди 9 часа
родител
ревизия
27e73c2a03

+ 30 - 0
src/api/system/physical/leagueTournament/types.ts

@@ -50,6 +50,16 @@ export interface LeagueTournamentVO {
   updatedAt: string;
 
   gameVariant: string | number;
+
+  /**
+   * 预报名赛事开始时间
+   */
+  registrationBeginTime?: string;
+
+  /**
+   * 预报名结束时间
+   */
+  registrationEndTime?: string;
 }
 
 export interface LeagueTournamentForm extends BaseEntity {
@@ -104,6 +114,16 @@ export interface LeagueTournamentForm extends BaseEntity {
    * 更新时间
    */
   updatedAt?: string;
+
+  /**
+   * 预报名赛事开始时间
+   */
+  registrationBeginTime?: string;
+
+  /**
+   * 预报名结束时间
+   */
+  registrationEndTime?: string;
 }
 
 export interface LeagueTournamentQuery extends PageQuery {
@@ -156,4 +176,14 @@ export interface LeagueTournamentQuery extends PageQuery {
    * 日期范围参数
    */
   params?: any;
+
+  /**
+   * 预报名赛事开始时间
+   */
+  registrationBeginTime?: string;
+
+  /**
+   * 预报名结束时间
+   */
+  registrationEndTime?: string;
 }

+ 10 - 10
src/views/system/business/tournaments/index.vue

@@ -88,13 +88,13 @@
         <!--        <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="比赛项目" align="center" prop="projectName" width="150" />
+<!--        <el-table-column label="比赛项目" align="center" prop="projectName" width="150" />-->
 <!--        <el-table-column label="比赛项目" align="center" prop="gameVariant">
           <template #default="scope">
             {{ getGameVariantText(scope.row.gameVariant) }}
           </template>
         </el-table-column>-->
-        <el-table-column label="比赛Logo" align="center" width="90">
+<!--        <el-table-column label="比赛Logo" align="center" width="90">
           <template #default="scope">
             <el-image
               v-if="scope.row.competitionIcon"
@@ -106,9 +106,9 @@
             />
             <span v-else></span>
           </template>
-        </el-table-column>
+        </el-table-column>-->
 
-        <el-table-column label="比赛背景" align="center" width="90">
+<!--        <el-table-column label="比赛背景" align="center" width="90">
           <template #default="scope">
             <el-image
               v-if="scope.row.competitionBg"
@@ -120,13 +120,13 @@
             />
             <span v-else></span>
           </template>
-        </el-table-column>
+        </el-table-column>-->
 
         <el-table-column label="开始时间" align="center" prop="startTime" width="150" sortable="custom"> </el-table-column>
         <el-table-column label="结束时间" align="center" prop="endTime" width="150"> </el-table-column>
         <el-table-column label="报名人数" align="center" prop="signNum" width="80"> </el-table-column>
         <el-table-column label="总手数" align="center" prop="totalSignup" width="70"> </el-table-column>
-        <el-table-column label="报名要求" align="center">
+<!--        <el-table-column label="报名要求" align="center">
           <template #default="scope">
             {{
               scope.row.itemsName && scope.row.itemsNum
@@ -158,24 +158,24 @@
         </el-table-column>
 
         <el-table-column label="截止盲注等级" align="center" prop="lateRegistrationLevel" />
-        <!--        <el-table-column label="盲注表" align="center" prop="blindStructuresName" />-->
+        &lt;!&ndash;        <el-table-column label="盲注表" align="center" prop="blindStructuresName" />&ndash;&gt;
 
         <el-table-column label="奖励" align="center">
           <template #default="scope">
             <div v-if="scope.row.itemsPrizeList && scope.row.itemsPrizeList.length > 0">
-              <!-- 显示第一名奖励 -->
+              &lt;!&ndash; 显示第一名奖励 &ndash;&gt;
               <div>
                 第{{ scope.row.itemsPrizeList[0].ranking }}名:{{ scope.row.itemsPrizeList[0].quantity }} {{ scope.row.itemsPrizeList[0].itemsName }}
               </div>
 
-              <!-- 如果有更多奖励,用 tooltip 显示 -->
+              &lt;!&ndash; 如果有更多奖励,用 tooltip 显示 &ndash;&gt;
               <el-tooltip v-if="scope.row.itemsPrizeList.length > 1" :content="getRewardTooltipContent(scope.row.itemsPrizeList)" placement="top">
                 <span class="more-rewards">更多</span>
               </el-tooltip>
             </div>
             <span v-else>—</span>
           </template>
-        </el-table-column>
+        </el-table-column>-->
         <!--        <el-table-column label="最小参赛人数" align="center" prop="minPlayers" />-->
         <el-table-column label="状态" align="center">
           <template #default="scope">

+ 2 - 2
src/views/system/business/tournamentsTemplate/index.vue

@@ -379,9 +379,9 @@
         <el-form-item label="级别持续时间" prop="levelDuration">
           <el-input v-model="form.levelDuration" placeholder="请输入级别持续时间" :disabled="dialog.mode === 'view'" />
         </el-form-item>
-        <el-form-item label="机器人数" prop="robotCount" v-if="!isProdEnvironment">
+<!--        <el-form-item label="机器人数" prop="robotCount" v-if="!isProdEnvironment">
           <el-input v-model="form.robotCount" placeholder="请输入机器人数" :disabled="dialog.mode === 'view'" />
-        </el-form-item>
+        </el-form-item>-->
         <el-form-item label="延迟看牌" prop="delayShow">
           <el-select v-model="form.delayShow" placeholder="请选择" :disabled="dialog.mode === 'view'">
             <el-option label="开启" :value="1"></el-option>

+ 38 - 3
src/views/system/physical/leagueTournament/index.vue

@@ -80,6 +80,18 @@
             </span>
           </template>
         </el-table-column>
+        <el-table-column label="预报名时间" align="center" width="300">
+          <template #default="scope">
+            <span v-if="scope.row.registrationBeginTime && scope.row.registrationEndTime">
+              {{ parseTime(scope.row.registrationBeginTime, '{y}-{m}-{d} {h}:{i}:{s}') }}
+              ~
+              {{ parseTime(scope.row.registrationEndTime, '{y}-{m}-{d} {h}:{i}:{s}') }}
+            </span>
+                    <span v-else>
+              -
+            </span>
+          </template>
+        </el-table-column>
         <el-table-column label="比赛项目" align="center" prop="gameVariant">
           <template #default="scope">
             {{ getGameVariantText(scope.row.gameVariant) }}
@@ -142,7 +154,7 @@
     </el-card>
     <!-- 添加或修改锦标赛联赛对话框 -->
     <el-dialog :title="dialog.title" v-model="dialog.visible" width="600px" append-to-body>
-      <el-form ref="leagueTournamentFormRef" :model="form" :rules="rules" label-width="100px">
+      <el-form ref="leagueTournamentFormRef" :model="form" :rules="rules" label-width="140px">
         <el-form-item label="赛事标题" prop="title">
           <el-input v-model="form.title" placeholder="请输入赛事标题" />
         </el-form-item>
@@ -188,14 +200,34 @@
           </div>
         </el-form-item>
 
-        <el-form-item label="开始时间" prop="startTime">
+        <el-form-item label="赛事开始时间" prop="startTime">
           <el-date-picker clearable v-model="form.startTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择赛事开始时间">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="结束时间" prop="endTime">
+        <el-form-item label="赛事结束时间" prop="endTime">
           <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="registrationBeginTime">
+          <el-date-picker
+            clearable
+            v-model="form.registrationBeginTime"
+            type="datetime"
+            value-format="YYYY-MM-DD HH:mm:ss"
+            placeholder="请选择赛事开始时间"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="预报名结束时间" prop="registrationEndTime">
+          <el-date-picker
+            clearable
+            v-model="form.registrationEndTime"
+            type="datetime"
+            value-format="YYYY-MM-DD HH:mm:ss"
+            placeholder="请选择赛事结束时间"
+          >
+          </el-date-picker>
+        </el-form-item>
         <el-form-item label="比赛地址" prop="location">
           <el-input v-model="form.location" type="textarea" :rows="3" placeholder="请输入比赛地址" />
         </el-form-item>
@@ -279,8 +311,11 @@ const data = reactive<PageData<LeagueTournamentForm, LeagueTournamentQuery>>({
   rules: {
     id: [{ required: true, message: '锦标赛联赛ID不能为空', trigger: 'blur' }],
     title: [{ required: true, message: '赛事标题不能为空', trigger: 'blur' }],
+    gameVariant: [{ required: true, message: '比赛项目不能为空', trigger: 'blur' }],
     startTime: [{ required: true, message: '赛事开始时间不能为空', trigger: 'blur' }],
     endTime: [{ required: true, message: '赛事结束时间不能为空', trigger: 'blur' }],
+    registrationBeginTime: [{ required: true, message: '预报名开始时间不能为空', trigger: 'blur' }],
+    registrationEndTime: [{ required: true, message: '预报名结束时间不能为空', trigger: 'blur' }],
     /*  gameType: [{ required: true, message: '比赛项目不能为空', trigger: 'change' }],*/
     location: [{ required: true, message: '比赛地址不能为空', trigger: 'blur' }],
     status: [{ required: true, message: '状态不能为空', trigger: 'change' }]

+ 11 - 8
src/views/system/physical/tournamentsRegistration/index.vue

@@ -37,7 +37,7 @@
     <el-card shadow="never">
       <template #header>
         <el-row :gutter="10" class="mb8">
-<!--          <el-col :span="1.5">
+          <!--          <el-col :span="1.5">
             <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['physical:tournamentsRegistration:add']">新增</el-button>
           </el-col>
           <el-col :span="1.5">
@@ -51,7 +51,7 @@
               >修改</el-button
             >
           </el-col>-->
-<!--          <el-col :span="1.5">
+          <!--          <el-col :span="1.5">
             <el-button
               type="danger"
               plain
@@ -101,16 +101,19 @@
             </el-tag>
           </template>
         </el-table-column>
-<!--        <el-table-column label="审核备注" align="center" prop="remark" />-->
-        <el-table-column label="审核时间" align="center" prop="auditedAt" width="180">
-          <template #default="scope">
-            <span>{{ parseTime(scope.row.auditedAt, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
+        <!--        <el-table-column label="审核备注" align="center" prop="remark" />-->
+        <el-table-column label="审核时间" align="center" width="180">
+          <template #default="{ row }">
+            <span v-if="row.auditedAt">
+              {{ parseTime(row.auditedAt, '{y}-{m}-{d} {h}:{i}:{s}') }}
+            </span>
+            <span v-else>-</span>
           </template>
         </el-table-column>
         <el-table-column label="审核人姓名" align="center" prop="auditorName" />
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template #default="scope">
-<!--            <el-tooltip content="修改" placement="top">
+            <!--            <el-tooltip content="修改" placement="top">
               <el-button
                 link
                 type="primary"
@@ -119,7 +122,7 @@
                 v-hasPermi="['system:tournamentsRegistration:edit']"
               ></el-button>
             </el-tooltip>-->
-<!--            <el-tooltip content="删除" placement="top">
+            <!--            <el-tooltip content="删除" placement="top">
               <el-button
                 link
                 type="primary"