mahjong_group/docs/bug/1.0.1_bug文档.md
2026-01-02 15:05:50 +08:00

131 lines
6.6 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.0.1 Bug修复文档
## Bug列表
### cs120_10 - 鸽子费审核后组局未自动取消
**状态**: 已验证 ❌
**类型**: 后端逻辑缺陷
**描述**: 签到时有用户未到场,后台通过未到场审核后,该组局没有自动取消
**期望**: 应自动取消该组局
**问题分析**:
- 位置: `server/CoreCms.Net.Web.Admin/Controllers/SQ/SQReservationsController.cs` ApprovePigeonFee方法
- 当前逻辑: 审核通过鸽子费后,只分配费用给已赴约用户,但没有检查是否需要取消组局
- 缺失逻辑: 需要在审核后检查剩余有效参与者数量,如果不足则自动取消组局
**修复方案**: 在鸽子费审核通过后,检查剩余参与者数量是否满足最低要求,不满足则将预约状态设为取消(4)
---
### cs120_11 & cs120_12 - 锁定状态组局无法签到 (合并问题)
**状态**: 已验证 ❌
**类型**: 前端时间验证逻辑缺陷
**描述**: 组局成功锁定后,用户无法进行签到。无论是正常到时间还是后台修改时间,都会出现无法签到的问题
**期望**: 锁定状态的组局在合理时间范围内应该可以签到
**数据库验证结果**:
- 预约ID 2068: 状态1(锁定中)开始时间2025-12-31 23:25:00已过期1478分钟
- 该预约4个参与者人数已满但从未成功签到(check_reservation都为NULL)
**问题分析**:
- **前端验证**: `uniapp/mahjong_group/components/com/page/reservation-item.vue` 第78-111行
- **验证逻辑**: 签到按钮只在以下条件显示:
1. `item.status === 1` (锁定状态) ✅
2. `item.role === 1` (发起者权限) ✅
3. **时间条件**: 开始前10分钟内 OR 开始后结束前 ❌
- **根本原因**: 前端时间验证过于严格,超过结束时间后签到按钮消失
- **后端验证**: `CheckInReservation`方法本身没有时间限制,问题在前端
**具体问题**:
1. **cs120_11**: 正常情况下,如果用户错过了签到时间窗口,签到按钮就消失了
2. **cs120_12**: 后台修改时间后,如果当前时间不在新的时间窗口内,同样无法签到
**修复方案**:
1. **放宽前端时间验证**: 允许锁定状态的组局在更宽松的时间范围内签到
2. **增加管理员权限**: 后台修改时间后应该重置签到时间窗口
3. **或者增加强制签到功能**: 发起者可以在任何时间对锁定状态的组局进行签到
---
### cs120_13 - 进行中组局显示"取消组局"按钮 (新发现)
**状态**: 已修复 ✅
**类型**: 前端按钮显示逻辑缺陷
**描述**: 当组局状态为进行中(status=2)时,点击详情弹窗仍显示"取消组局"按钮,但此时组局已经开始,不应该允许取消
**期望**: 进行中和已结束的组局不应该显示取消按钮
**问题分析**:
- **位置**: `uniapp/mahjong_group/components/com/index/ReservationPopup.vue` 第154-173行
- **当前逻辑**: 只根据用户角色判断按钮显示,没有考虑预约状态
- **缺失逻辑**: 需要结合预约状态判断按钮显示
**修复方案**: ✅ 已实施
1. 新增 `isAddhandleJoin == 4` 状态,专门处理进行中的组局
2. 修改按钮显示逻辑,根据预约状态判断:
- 状态0-1(待开始/锁定中) + 发起者 → 显示"取消组局"
- 状态2(进行中) + 发起者 → 显示"进行中"(橙色,无点击事件)
- 状态3+(已结束/取消) + 发起者 → 只显示"关闭"
- 状态2+(进行中及以后) + 参与者 → 只显示"关闭"
**修复内容**:
- 增加了进行中状态的UI显示
- 完善了状态判断逻辑
- 确保进行中的组局不会显示误导性的操作按钮
## 修复优先级
1. **cs120_11 & cs120_12** (高) - 影响核心业务流程,用户无法正常签到
2. **cs120_14** (高) - 影响核心业务流程,组局卡住无法消失
3. **cs120_13** (中) - 影响用户体验,可能导致误操作
4. **cs120_10** (中) - 影响组局管理,但属于边缘情况
---
### cs120_14 - 只剩发起者一人的组局无法消失
**状态**: ✅ 已修复
**类型**: 后端+前端
**优先级**: 高
**问题描述**:
组2人局签到时选择另一人未到场一直等到结束时间后进入评价牌友阶段因为只剩发起者一人在我的页面点击【牌友评价】按钮会弹出系统提示"暂无评价",该组局信息在我的页面也不会消失、不能解散组局,一直卡在这,只能在后台删除该组局。
**期望行为**:
应在点击【牌友评价】弹出系统提示后,检测到该组局只有发起者一人,自动解散该组局。或到达结束时间后,检测到该组局只有发起者一人,自动解散该组局。
**问题根本原因**:
1. 签到时选择参与者未到场,参与者被标记为`is_arrive=2`(未赴约)和`status=1`(已退出)
2. `GetEvaluateServices`接口查询条件:`p.status=0 and p.is_arrive=1`
3. 只有发起者满足条件,但发起者被排除(不能评价自己)
4. 返回空列表,前端显示"暂无评价"
5. 由于没有评价记录,组局不会从"我的页面"消失
**修复内容**:
1. **后端接口修改** (`server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs`)
- 修改`GetEvaluateServices`接口逻辑
- 当检测到无人可评价时(只剩发起者一人),自动创建一条空评价记录
- 空评价记录的`to_user_id`指向自己,表示无人可评价
- 返回消息"暂无可评价的牌友,组局已自动完成"
2. **前端组件修改** (`uniapp/mahjong_group/components/com/page/reservation-evaluate.vue`)
- 修改`show`方法
- 当收到空数据时延迟1.5秒后触发`evaluateSuccess`事件
- 让"我的页面"刷新数据,组局自动消失
**修复逻辑**:
- 用户点击【牌友评价】
- 后端检测到无人可评价
- 自动创建空评价记录(标记该用户已处理此组局)
- 前端显示"暂无评价"后触发刷新事件
- 组局从"我的页面"消失
**修复时间**: 2025-01-02
**测试状态**: 待测试
**涉及文件**:
- `server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs` (GetEvaluateServices方法)
- `uniapp/mahjong_group/components/com/page/reservation-evaluate.vue` (show方法)
## 相关文件
- `uniapp/mahjong_group/components/com/page/reservation-item.vue` - 前端签到按钮显示逻辑
- `uniapp/mahjong_group/components/com/index/ReservationPopup.vue` - 详情弹窗按钮显示逻辑
- `server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs` - 后端签到逻辑
- `server/CoreCms.Net.Web.Admin/Controllers/SQ/SQReservationsController.cs` - 鸽子费审核
- `server/CoreCms.Net.Task/SQReservationJob.cs` - 定时任务状态转换