# 评委邀请码管理功能说明 ## 功能概述 评委邀请码管理功能用于管理武术比赛中的评委邀请流程,包括发送邀请、跟踪邀请状态、管理评委回复等。 ## 数据库升级 ### 1. 执行升级脚本 在执行新功能之前,需要先升级数据库表结构: ```bash mysql -h localhost -P 3306 -u root -p blade < database/martial-db/upgrade_judge_invite_table.sql ``` ### 2. 插入测试数据(可选) 如果需要测试数据,可以执行: ```bash mysql -h localhost -P 3306 -u root -p blade < database/martial-db/insert_test_judge_invite_data.sql ``` ## 新增字段说明 | 字段名 | 类型 | 说明 | |--------|------|------| | invite_status | INT | 邀请状态(0-待回复,1-已接受,2-已拒绝,3-已取消) | | invite_time | DATETIME | 邀请时间 | | reply_time | DATETIME | 回复时间 | | reply_note | VARCHAR(500) | 回复备注 | | contact_phone | VARCHAR(20) | 联系电话 | | contact_email | VARCHAR(100) | 联系邮箱 | | invite_message | VARCHAR(1000) | 邀请消息 | | cancel_reason | VARCHAR(500) | 取消原因 | ## 后端接口 ### 1. 分页查询邀请列表 **接口地址**: `GET /api/blade-martial/judgeInvite/list` **请求参数**: - `current`: 当前页码(默认1) - `size`: 每页条数(默认10) - `competitionId`: 赛事ID(必填) - `judgeName`: 裁判姓名(可选,模糊查询) - `judgeLevel`: 裁判等级(可选) - `inviteStatus`: 邀请状态(可选) **响应示例**: ```json { "code": 200, "success": true, "data": { "records": [ { "id": 1, "competitionId": 1, "judgeId": 1, "judgeName": "张三", "judgeLevel": "国家级", "inviteCode": "INV2025001", "contactPhone": "13800138001", "contactEmail": "zhangsan@example.com", "inviteStatus": 0, "inviteTime": "2025-12-12 00:00:00", "replyTime": null, "replyNote": null } ], "total": 5, "size": 10, "current": 1 } } ``` ### 2. 获取邀请统计 **接口地址**: `GET /api/blade-martial/judgeInvite/statistics` **请求参数**: - `competitionId`: 赛事ID(必填) **响应示例**: ```json { "code": 200, "success": true, "data": { "totalInvites": 5, "pendingCount": 2, "acceptedCount": 2, "rejectedCount": 1 } } ``` ### 3. 新增或修改邀请 **接口地址**: `POST /api/blade-martial/judgeInvite/submit` **请求体**: ```json { "competitionId": 1, "judgeId": 1, "inviteCode": "INV2025001", "role": "judge", "contactPhone": "13800138001", "contactEmail": "zhangsan@example.com", "inviteMessage": "诚邀您担任本次武术比赛的裁判", "inviteStatus": 0, "inviteTime": "2025-12-12 00:00:00", "expireTime": "2025-01-12 00:00:00" } ``` ## 前端页面 ### 页面路径 `src/views/martial/judgeInvite/index.vue` ### 主要功能 #### 1. 搜索和筛选 - 选择赛事 - 按评委姓名搜索 - 按评委等级筛选 - 按邀请状态筛选 #### 2. 统计卡片 显示以下统计信息: - 总邀请数 - 待回复数量 - 已接受数量 - 已拒绝数量 #### 3. 数据表格 显示以下信息: - 评委姓名 - 评委等级(彩色标签) - **邀请码**(橙色标签,点击可复制) - 联系电话 - 联系邮箱 - 邀请状态(彩色标签) - 邀请时间 - 回复时间 - 回复备注 #### 4. 操作按钮 - **重发**: 重新发送邀请(仅待回复状态) - **提醒**: 发送提醒消息(仅待回复状态) - **取消**: 取消邀请(仅待回复状态) - **查看**: 查看详情 - **确认**: 确认接受(仅已接受状态) #### 5. 工具栏 - 发送邀请 - 批量邀请 - 从评委库导入 - 导出数据 - 刷新 ### 邀请码复制功能 点击表格中的邀请码(橙色标签),会自动复制到剪贴板,并显示成功提示。 支持两种复制方式: 1. 现代浏览器:使用 Clipboard API 2. 旧浏览器:使用 document.execCommand('copy') 降级方案 ## 使用流程 ### 1. 发送邀请 1. 进入评委邀请码管理页面 2. 选择赛事 3. 点击"发送邀请"或"批量邀请" 4. 填写评委信息和邀请消息 5. 系统自动生成邀请码 6. 发送邀请给评委 ### 2. 评委回复 评委收到邀请后,使用邀请码登录小程序: 1. 输入邀请码 2. 查看邀请详情 3. 选择接受或拒绝 4. 填写回复备注(可选) ### 3. 管理邀请 1. 查看邀请列表和统计 2. 对待回复的邀请进行重发或提醒 3. 确认已接受的邀请 4. 取消不需要的邀请 ## 状态说明 | 状态值 | 状态名称 | 标签颜色 | 说明 | |--------|---------|---------|------| | 0 | 待回复 | 橙色 | 邀请已发送,等待评委回复 | | 1 | 已接受 | 绿色 | 评委已接受邀请 | | 2 | 已拒绝 | 红色 | 评委已拒绝邀请 | | 3 | 已取消 | 灰色 | 主办方已取消邀请 | ## 注意事项 1. **邀请码唯一性**: 每个邀请码必须唯一,建议使用格式:`INV + 年份 + 序号` 2. **过期时间**: 邀请码应设置合理的过期时间,建议30天 3. **联系方式**: 确保填写正确的联系电话和邮箱,便于后续沟通 4. **状态流转**: - 待回复 → 已接受/已拒绝(评委操作) - 待回复 → 已取消(主办方操作) - 已接受 → 已取消(主办方操作) ## 技术实现 ### 后端 - **实体类**: `MartialJudgeInvite` - **VO类**: `MartialJudgeInviteVO`(包含关联的裁判信息) - **Mapper**: `MartialJudgeInviteMapper`(支持关联查询) - **Service**: `IMartialJudgeInviteService` - **Controller**: `MartialJudgeInviteController` ### 前端 - **框架**: Vue 3 + Element Plus - **API**: `src/api/martial/judgeInvite.js` - **页面**: `src/views/martial/judgeInvite/index.vue` ### 数据库 - **主表**: `martial_judge_invite` - **关联表**: - `martial_judge`(裁判信息) - `martial_competition`(赛事信息) ## 待完善功能 以下功能目前显示"开发中"提示,可以后续添加: 1. **发送邀请对话框**: 完整的邀请发送表单 2. **批量邀请对话框**: 批量选择评委并发送邀请 3. **从评委库导入**: 从裁判库中选择评委并自动生成邀请 4. **取消邀请对话框**: 填写取消原因 5. **查看详情对话框**: 显示邀请的完整信息 6. **导出功能**: 导出邀请名单为Excel文件 ## 测试建议 1. **单元测试**: 测试Service层的业务逻辑 2. **集成测试**: 测试Controller层的接口 3. **前端测试**: 测试页面交互和数据展示 4. **端到端测试**: 测试完整的邀请流程 ## 常见问题 ### Q1: 邀请码复制失败? A: 检查浏览器是否支持Clipboard API,或者是否在HTTPS环境下。如果都不满足,会自动使用降级方案。 ### Q2: 统计数据不准确? A: 确保数据库中的invite_status字段值正确,并且is_deleted字段为0。 ### Q3: 关联查询性能问题? A: 已为competition_id和invite_status字段添加索引,如果数据量很大,可以考虑添加更多索引或使用缓存。 ## 更新日志 ### 2025-12-12 - ✅ 创建评委邀请码管理页面 - ✅ 实现邀请码展示和复制功能 - ✅ 添加邀请状态管理 - ✅ 实现统计卡片 - ✅ 支持搜索和筛选 - ✅ 创建数据库升级脚本 - ✅ 实现后端关联查询 - ✅ 添加邀请统计接口