Files
martial-master/docs/judge-invite-feature.md
宅房 7aa6545cbb
All checks were successful
continuous-integration/drone/push Build is passing
fix bugs
2025-12-12 05:13:10 +08:00

278 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 评委邀请码管理功能说明
## 功能概述
评委邀请码管理功能用于管理武术比赛中的评委邀请流程,包括发送邀请、跟踪邀请状态、管理评委回复等。
## 数据库升级
### 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
- ✅ 创建评委邀请码管理页面
- ✅ 实现邀请码展示和复制功能
- ✅ 添加邀请状态管理
- ✅ 实现统计卡片
- ✅ 支持搜索和筛选
- ✅ 创建数据库升级脚本
- ✅ 实现后端关联查询
- ✅ 添加邀请统计接口