# 赛程编排界面更新总结

## 更新时间
2025-12-09

## 更新目标
根据参考图片修改赛程编排页面的显示界面,使其更加简洁紧凑,同时保持所有现有业务逻辑不变。

## 参考图片
1. `doc/image/订单管理页面/微信图片_20251127165909_228_2.png` - 竞赛分组Tab界面
2. `doc/image/订单管理页面/微信图片_20251127165915_229_2.png` - 场地Tab界面

## 主要改动

### 1. 竞赛分组Tab (Competition Grouping Tab)

#### 改动前
- 使用卡片式布局展示分组
- 场地时间信息显示为按钮
- 布局较为分散,占用空间较大

#### 改动后
- 采用紧凑列表布局
- 分组标题显示为:"序号. 项目名称 类型标签 队伍数 人数 编号"
- 集体项目:子项显示为"序号. 单位名称 场地标签..."
- 个人项目:子项显示为"序号. 单位-姓名 场地标签"
- 场地信息以小标签形式内联显示(如"场A场")

#### 新增样式类
- `.groups-list-compact` - 紧凑列表容器
- `.group-item-compact` - 分组项
- `.group-header-compact` - 分组标题区
- `.group-number` - 序号样式
- `.group-title-text` - 标题文本
- `.group-type-badge` - 类型标签(集体/个人)
- `.group-meta-text` - 元信息文本
- `.team-list-compact` - 集体项目队伍列表
- `.team-item-compact` - 队伍项
- `.individual-list-compact` - 个人项目列表
- `.individual-item-compact` - 个人项
- `.venue-labels` - 场地标签容器
- `.venue-label` - 单个场地标签

### 2. 场地Tab (Venue Tab)

#### 改动前
- 按场地分区显示,每个场地一个大卡片
- 每个场地内显示该场地的所有分组
- 使用与竞赛分组Tab相同的卡片布局

#### 改动后
- **按场地分区显示**,保持场地分区结构
- 添加时间段选择器(与竞赛分组Tab一致)
- 每个场地显示一个**独立的表格**
- 场地标题采用蓝色背景样式
- 使用Element Plus的`el-table`组件
- 表格列:
  - 序号 (80px, 居中)
  - 项目 (最小200px)
  - 单人/集体 (100px, 居中, 带标签)
  - 队伍 (80px, 居中)
  - 组数 (80px, 居中)
  - 合并场 (100px, 居中)
  - 序号 (100px, 居中)

#### 新增计算属性
```javascript
venueTableDataByVenue() {
  // 按场地生成表格数据数组
  // 每个场地一个对象: { venueId, venueName, tableData }
  // 根据当前选中时间段过滤该场地的分组
  // 集体项目:按单位(organizationGroups)生成行
  // 个人项目:整个分组作为一行
}
```

#### 新增样式类
- `.venue-section-table` - 场地分区容器
- `.venue-header` - 场地标题(蓝色背景)
- `.empty-venue` - 场地无数据提示
- `.venue-table-container` - 表格容器
- Element Plus表格样式覆盖

### 3. 公共改进

#### 时间段选择器
- 两个Tab都显示时间段选择器
- 选中的时间段高亮显示
- 根据选中时间段过滤显示的数据

#### 样式优化
- 统一使用更紧凑的间距
- 调整颜色方案以匹配参考图片
- 使用内联标签代替按钮显示场地信息
- 优化字体大小和权重

## 文件修改

### 修改的文件
- `src/views/martial/schedule/index.vue`

### 具体修改内容

#### Template部分
1. **竞赛分组Tab** (行 38-113)
   - 重写分组列表结构为紧凑布局
   - 移除按钮,使用标签显示场地
   - 简化嵌套结构

2. **场地Tab** (行 115-172)
   - 保持场地分区结构
   - 每个场地显示独立表格
   - 添加时间段选择器
   - 使用`el-table`组件
   - 添加场地标题和空数据提示

#### Script部分
1. **computed属性** (行 238-331)
   - 保留`currentTimeSlotGroups`
   - 保留`groupsByVenue`
   - 新增`venueTableDataByVenue` - 按场地生成表格数据数组

#### Style部分 (行 527-775)
1. 完全重写样式
2. 移除旧的`.groups-list`相关样式
3. 新增`.groups-list-compact`相关样式
4. 新增`.venue-section-table`相关样式(场地分区+表格)
5. 保持页面整体布局样式不变

## 保持不变的功能

### 数据加载
- `loadCompetitionInfo()` - 加载赛事信息
- `loadVenues()` - 加载场地列表
- `loadScheduleResult()` - 加载编排结果
- `generateTimeSlots()` - 生成时间段

### 业务逻辑
- 自动编排逻辑(后端)
- 数据结构(scheduleGroups)
- API调用
- 保存和锁定功能
- 刷新功能

### 删除的功能
- 场地详情对话框相关代码(场地信息已直接在表格中显示)
- `handleVenueDetailClick()` 方法(不再需要)
- `handleParticipantDetailClick()` 方法(不再需要)
- 相关的dialog组件(不再需要)

## 兼容性说明

### 数据结构兼容
完全兼容现有后端API返回的数据结构:
- `scheduleGroups` 数组
- `organizationGroups` (集体项目)
- `participants` (个人项目)
- `scheduleDetails` 场地时间信息

### 功能兼容
- 所有后端API保持不变
- 所有业务逻辑保持不变
- 仅UI展示方式改变

## 测试建议

### 界面测试
1. 检查竞赛分组Tab显示是否正确
2. 检查场地Tab表格显示是否正确
3. 测试时间段切换功能
4. 测试Tab切换功能
5. 检查在不同数据量下的显示效果

### 数据测试
1. 测试无数据情况
2. 测试集体项目数据
3. 测试个人项目数据
4. 测试混合数据
5. 测试大数据量(1000+参赛者)

### 功能测试
1. 测试刷新功能
2. 测试保存编排功能
3. 测试锁定状态显示
4. 测试导出功能

## 后续优化建议

### 功能增强
1. 添加表格排序功能
2. 添加表格搜索/过滤功能
3. 添加分页功能(数据量大时)
4. 支持拖拽调整分组顺序

### 交互优化
1. 添加点击表格行显示详情
2. 添加右键菜单快捷操作
3. 添加批量编辑功能
4. 添加场地冲突高亮提示

### 导出功能
1. 支持导出为Excel
2. 支持导出为PDF
3. 支持打印预览
4. 支持自定义导出模板

## 总结

本次更新成功将赛程编排界面改造为更加紧凑清晰的布局,主要亮点:

✅ 竞赛分组Tab采用紧凑列表,信息密度更高
✅ 场地Tab保持场地分区结构,每个场地显示独立表格
✅ 两个Tab都支持时间段筛选
✅ 场地标题采用醒目的蓝色背景样式
✅ 保持所有现有业务逻辑不变
✅ 完全兼容现有后端API
✅ 样式清晰,符合参考图片要求

**关键改进点:**
- 场地Tab按"一号场地"、"二号场地"等分区显示
- 每个场地区域内显示该场地的赛程表格
- 表格数据根据选中的时间段动态过滤
- 集体项目按单位(队伍)展开为多行
- 个人项目整个分组显示为一行

---

**修改人**: Claude Code
**修改日期**: 2025-12-09
**文件位置**: `src/views/martial/schedule/index.vue`
