394 lines
14 KiB
Markdown
394 lines
14 KiB
Markdown
# 麻将组局预约小程序 v1.0.0 Bug报告
|
||
|
||
## Bug统计
|
||
- **总数量**: 9个
|
||
- **已修复**: 7个 ✅
|
||
- **未修改**: 2个
|
||
- **分类**: 后端问题 6个,前端问题 2个,前后端问题 3个
|
||
|
||
---
|
||
|
||
## Bug详情
|
||
|
||
### cs110_23 - 后台房间管理图标说明缺失
|
||
**状态**: ✅ 已修复
|
||
**类型**: 后端
|
||
**优先级**: 低
|
||
|
||
**问题描述**:
|
||
后台房间预约管理页面,颜色和图标意义不明确,用户无法理解各种状态的含义。
|
||
|
||
**解决方案**:
|
||
补充图标和颜色说明文档,在页面添加图例说明。
|
||
|
||
**修复内容**:
|
||
1. **房间价格管理页面** (`sqroompricing/index.html`)
|
||
- 添加了可折叠的状态图例说明区域
|
||
- 包含时间段状态说明:可预约(绿色)、已预约(橙色)、使用中(灰色)、不可预约(红色)、后台预约(深橙色)
|
||
- 包含特殊日期标识:今天(青色边框)、节假日价格(橙色边框+节字标识)
|
||
- 添加了操作说明和使用提示
|
||
|
||
2. **预约管理页面** (`sqreservations/index.html`)
|
||
- 添加了参与者角色说明:发起者(绿色)、参与者(蓝色)
|
||
- 添加了参与状态说明:正常(绿色)、已退出(红色)
|
||
- 添加了鸽子费状态说明:无需退款(灰色)、已付鸽子费(蓝色)、退款中(黄色)、退款成功(绿色)、退款失败(红色)
|
||
- 添加了展开/收起功能,节省页面空间
|
||
|
||
**修复时间**: 2025-01-01
|
||
**测试状态**: 待测试
|
||
|
||
---
|
||
|
||
### cs110_24 - 已评价组局消息未消失
|
||
**状态**: ✅ 已修复
|
||
**类型**: 后端
|
||
**优先级**: 中
|
||
|
||
**问题描述**:
|
||
我的页面中,已结束的牌局在给牌友评价后,该组局消息没有消失。
|
||
|
||
**解决方案**:
|
||
用户只要评价过一次(不管评价了谁),这个预约就应该从"我的页面"中消失。如果用户还想继续评价其他人,可以去"预约记录"页面找到这个预约继续评价。
|
||
|
||
**修复内容**:
|
||
1. **后端接口修改** (`server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs`)
|
||
- 修改`GetMyUseReservation`接口的SQL查询条件
|
||
- 添加`NOT EXISTS`子查询,排除当前用户已经评价过的预约
|
||
- 查询逻辑:如果用户对某个预约有评价记录,该预约就不会显示在"我的页面"中
|
||
|
||
2. **前端评价组件** (`uniapp/mahjong_group/components/com/page/reservation-evaluate.vue`)
|
||
- 修改`submitEvaluate`方法
|
||
- 评价成功后触发全局事件`evaluateSuccess`
|
||
- 延迟1.5秒后关闭弹窗并通知刷新数据
|
||
|
||
3. **我的页面** (`uniapp/mahjong_group/pages/me/me-page.vue`)
|
||
- 添加`onLoad`、`onUnload`生命周期导入
|
||
- 在`onLoad`中监听`evaluateSuccess`事件
|
||
- 收到事件后重新调用`loadCurrentAppointment()`刷新数据
|
||
- 在`onUnload`中移除事件监听,避免内存泄漏
|
||
|
||
**修复逻辑**:
|
||
- 用户评价任意一个人后,该预约立即从"我的页面"消失
|
||
- 如需继续评价其他人,用户可前往"预约记录"页面查找
|
||
- 保持页面简洁,避免已处理预约长期占用显示空间
|
||
|
||
**修复时间**: 2025-01-01
|
||
**测试状态**: 待测试
|
||
---
|
||
|
||
### cs120_1 - 时间段预约逻辑错误
|
||
**状态**: ✅ 已修复
|
||
**类型**: 后端
|
||
**优先级**: 高
|
||
|
||
**问题描述**:
|
||
当前时间14:00,房间列表显示凌晨、上午不可预约,但进入预约页面时:
|
||
1. 开始时间、结束时间能选择凌晨和上午的时间
|
||
2. 能成功发起预约
|
||
3. 发起后前端首页看不到该组局
|
||
4. 我的页面能看到组局信息但不能解散
|
||
5. 点击取消提示"预约开始前30分钟无法取消"
|
||
|
||
**解决方案**:
|
||
凌晨、上午已经被预约时,提交预约应直接提示用户该时间段已被预约,不允许创建。
|
||
|
||
**修复内容**:
|
||
1. **后端接口修改** (`server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs`)
|
||
- 在`CanCreateSQReservation`方法中添加时间验证
|
||
- 检查预约开始时间是否为过去时间
|
||
- 如果`start_time`小于等于当前时间,返回错误信息"不能预约过去的时间"
|
||
- 验证位置:在参数校验之后,时长验证之前
|
||
|
||
**修复逻辑**:
|
||
- 获取当前时间`DateTime.Now`
|
||
- 比较预约开始时间与当前时间
|
||
- 如果开始时间已过去,立即返回错误,阻止预约创建
|
||
- 确保用户无法创建过去时间的预约
|
||
|
||
**修复时间**: 2025-01-01
|
||
**测试状态**: 待测试
|
||
|
||
**涉及接口**:
|
||
- `CanCreateSQReservation` - 预约前校验
|
||
- `AddSQReservation` - 创建预约
|
||
|
||
---
|
||
|
||
### cs120_2 - 开始时间选择无限制
|
||
**状态**: 未修改
|
||
**类型**: 后端
|
||
**优先级**: 高
|
||
|
||
**问题描述**:
|
||
发起预约时,"开始时间"没有做限制,能选择已过去的时间。
|
||
例如:当前时间14:00,可以预约今天早上8点~9点的局。
|
||
|
||
**解决方案**:
|
||
对"开始时间"做以下限制:
|
||
1. **限制一**:只能选择可预约的时间段
|
||
- 如早上约满了,现在是早上时间,只能选择下午时间段
|
||
2. **限制二**:当前时间段无人预约时
|
||
- 只能选择当前时间+30分钟的时间
|
||
- 不能选择已经过去的时间
|
||
- 如当前时间为14:00,开始时间只能选择14:30及以后的时间
|
||
3. **结束时间**:默认为开始时间的一小时后,不能低于1小时
|
||
|
||
**涉及接口**:
|
||
- `GetAvailableDates` - 可选日期
|
||
- `GetRoomListWithSlotsNew` - 房间时段状态
|
||
|
||
---
|
||
|
||
### cs120_3 - 首页高度显示异常
|
||
**状态**: 已修改
|
||
**类型**: 前端
|
||
**优先级**: 中
|
||
|
||
**问题描述**:
|
||
首页空状态和列表的高度不对,高度过高,不是之前的高度。
|
||
|
||
**解决方案**:
|
||
下调到和以前一样的高度。
|
||
|
||
**涉及文件**:
|
||
- `pages/index/index.vue`
|
||
|
||
---
|
||
|
||
### cs120_4 - 房间卡片文字显示不全
|
||
**状态**: 未修改
|
||
**类型**: 前端
|
||
**优先级**: 中
|
||
|
||
**问题描述**:
|
||
首页房间列表,房间的底图没有把该房间全部文字都包裹进去,文字被截断。
|
||
|
||
**解决方案**:
|
||
调整卡片样式,确保包裹全部文字内容。
|
||
|
||
**涉及文件**:
|
||
- `components/index/MahjongCard.vue`
|
||
|
||
---
|
||
|
||
### cs120_5 - 签到后页面状态未刷新
|
||
**状态**: ✅ 已修复
|
||
**类型**: 前端+后端
|
||
**优先级**: 中
|
||
|
||
**问题描述**:
|
||
我的页面,签到成功后,前端状态没有改变,用户看不到最新状态。
|
||
|
||
**解决方案**:
|
||
签到成功后应强制刷新当前页面或更新页面状态。
|
||
|
||
**修复内容**:
|
||
1. **签到弹窗组件** (`uniapp/mahjong_group/components/com/page/qiandao-popup.vue`)
|
||
- 修改`submit`方法,签到成功后触发全局事件`checkInSuccess`
|
||
- 传递预约ID等相关信息给事件监听者
|
||
- 延迟1秒关闭弹窗,确保事件能够被正确处理
|
||
|
||
2. **我的页面** (`uniapp/mahjong_group/pages/me/me-page.vue`)
|
||
- 在`onLoad`生命周期中添加`checkInSuccess`事件监听
|
||
- 收到签到成功事件后调用`loadCurrentAppointment()`刷新预约数据
|
||
- 在`onUnload`生命周期中移除事件监听,避免内存泄漏
|
||
|
||
**修复逻辑**:
|
||
- 用户完成签到操作后,签到弹窗触发全局事件
|
||
- 我的页面监听到事件后立即刷新预约列表数据
|
||
- 用户能够看到签到后的最新状态(如预约状态变化、参与者状态更新等)
|
||
- 保持页面数据的实时性和准确性
|
||
|
||
**修复时间**: 2025-01-01
|
||
**测试状态**: 待测试
|
||
|
||
**涉及文件**:
|
||
- `pages/me/me-page.vue`
|
||
- `components/com/page/qiandao-popup.vue`
|
||
|
||
---
|
||
|
||
### cs120_6 - 首页Banner未显示
|
||
**状态**: 已完成
|
||
**类型**: 前端+后端
|
||
**优先级**: 中
|
||
|
||
**问题描述**:
|
||
后台配置了首页banner,但前端没显示。
|
||
|
||
**解决方案**:
|
||
1. 前端应显示banner
|
||
2. 需要明确后台"广告位置列表"和"广告列表"的区别
|
||
|
||
**涉及文件**:
|
||
- `pages/index/index.vue`
|
||
|
||
---
|
||
|
||
### cs120_7 - 个人信息数值显示异常
|
||
**状态**: ✅ 已修复
|
||
**类型**: 前端+后端
|
||
**优先级**: 中
|
||
|
||
**问题描述**:
|
||
我的页面,我的评分、信誉、牌品、牌技、鸽子数没有数值显示。
|
||
|
||
**解决方案**:
|
||
应显示默认数值或用户参与评价后的修正数值:
|
||
- 信誉分:默认5.0
|
||
- 牌品:默认4.0
|
||
- 牌技:默认4.0
|
||
- 鸽子数:默认0
|
||
|
||
**问题根本原因**:
|
||
1. **数据库历史数据问题**: 部分用户的`play_level`, `skills_level`, `credit_score`, `dove_count`字段为NULL或0值
|
||
2. **数据不一致**: 不同时期注册的用户有不同的默认值设置
|
||
3. **前端显示逻辑**: 直接绑定数值,当值为0或NULL时显示异常
|
||
|
||
**修复内容**:
|
||
1. **数据库数据修复**
|
||
- 执行SQL更新语句,将NULL和0值更新为正确的默认值
|
||
- `play_level` 和 `skills_level`: NULL/0 → 4.0
|
||
- `credit_score`: NULL/0 → 5.0
|
||
- `dove_count`: NULL → 0
|
||
- 影响用户数:5个用户的数据得到修复
|
||
|
||
2. **CheckInReservation逻辑修复**
|
||
- 确认出席用户的`user.dove_count++`已被注释掉(代码中已修复)
|
||
- 鸽子数只在用户未出席时增加,出席用户不增加鸽子数
|
||
|
||
**修复验证**:
|
||
- 数据库查询确认所有用户现在都有正确的默认值
|
||
- 前端显示应该正常显示星级评分和数值
|
||
- 新用户通过`SmsLogin`注册时会自动设置正确的默认值
|
||
|
||
**修复时间**: 2025-01-01
|
||
**测试状态**: 待测试
|
||
|
||
**涉及文件**:
|
||
- 数据库: `CoreCmsUser`表数据修复
|
||
- `server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs` (CheckInReservation方法)
|
||
- `uniapp/mahjong_group/pages/me/me-page.vue` (前端显示)
|
||
|
||
---
|
||
|
||
### cs120_8 - 评价后分数显示错误
|
||
**状态**: ✅ 已修复
|
||
**类型**: 后端
|
||
**优先级**: 中
|
||
|
||
**问题描述**:
|
||
组局结束后对牌友进行评价:
|
||
1. 评价前显示了该牌友当前的牌品、牌技分
|
||
2. 评价后分数变成了刚刚给该牌友的评分(而不是修正后的平均分)
|
||
|
||
**解决方案**:
|
||
评分后再次点开,应显示修正后的分值(重新计算的平均分)。
|
||
|
||
**问题根本原因**:
|
||
在`GetEvaluateServices`接口中,当用户已经评价过某人时,返回的`user_play_level`和`user_skills_level`使用的是评价记录表(`SQReservationEvaluate`)中的分数,而不是被评价用户在用户表(`CoreCmsUser`)中更新后的平均分。
|
||
|
||
**修复内容**:
|
||
1. **GetEvaluateServices接口修复** (`server/CoreCms.Net.Web.WebApi/Controllers/SQController.cs`)
|
||
- 修改第303-304行的逻辑
|
||
- 当用户已评价时,`user_play_level`和`user_skills_level`改为使用`item.play_level`和`item.skills_level`
|
||
- 这样显示的是被评价用户的当前平均分,而不是评价记录中的分数
|
||
|
||
**修复逻辑**:
|
||
- `play_level`和`skills_level`: 保持显示用户给出的评分(用于回显)
|
||
- `user_play_level`和`user_skills_level`: 显示被评价用户的当前平均分(修正后的分值)
|
||
|
||
**修复前后对比**:
|
||
- **修复前**: 评价后显示"我给他4分,他当前4分"(错误)
|
||
- **修复后**: 评价后显示"我给他4分,他当前4.2分"(正确的平均分)
|
||
|
||
**修复时间**: 2025-01-01
|
||
**测试状态**: 待测试
|
||
|
||
**涉及接口**:
|
||
- `GetEvaluateServices` - 获取预约评价信息
|
||
- `AddEvaluateServices` - 添加评价(计算逻辑正确,无需修改)
|
||
|
||
---
|
||
|
||
### cs120_9 - 鸽子费审核功能缺失
|
||
**状态**: ✅ 已修复
|
||
**类型**: 后端
|
||
**优先级**: 高
|
||
|
||
**问题描述**:
|
||
测试场景:
|
||
1. 组了有鸽子费的局,2个人,每人付0.01元
|
||
2. 签到时选择某人未到场,提交
|
||
3. 后台的未到场审核里没有数据
|
||
|
||
**解决方案**:
|
||
后台应有未到场审核功能:
|
||
- **通过审核**:到场人员平分鸽子费
|
||
- **不通过审核**:鸽子费各自退回
|
||
|
||
**问题根本原因**:
|
||
后台审核页面的查询条件有误。在`CheckInReservation`签到流程中,未赴约用户被设置为:
|
||
- `is_arrive = 2` (未赴约待审核)
|
||
- `status = 1` (已退出)
|
||
|
||
但审核页面的查询条件要求`status = 0`,导致待审核记录不显示。
|
||
|
||
**修复内容**:
|
||
1. **后端查询条件修复** (`server/CoreCms.Net.Web.Admin/Controllers/SQ/SQReservationsController.cs`)
|
||
- 修改`GetPigeonFeeAuditList`接口的SQL查询条件
|
||
- 移除`AND p.status = 0`条件
|
||
- 只保留`p.is_arrive = 2`和`ISNULL(r.deposit_fee, 0) > 0`条件
|
||
- 允许已退出但待审核的用户记录显示
|
||
|
||
**功能验证**:
|
||
- ✅ 前端审核页面已存在且功能完整
|
||
- ✅ 后端审核接口已存在且逻辑完整
|
||
- ✅ 数据库中有待审核记录(修复后能正常显示)
|
||
|
||
**审核功能说明**:
|
||
1. **审核通过** (`ApprovePigeonFee`):
|
||
- 扣除未赴约用户的鸽子费
|
||
- 将鸽子费平分给符合条件的已赴约用户
|
||
- 创建收益记录和系统消息通知
|
||
- 更新参与者状态为`is_arrive = 3`(已审核)
|
||
|
||
2. **审核未通过** (`RejectPigeonFee`):
|
||
- 将参与者状态改为已赴约(`is_arrive = 1`)
|
||
- 标记为发起退款(`is_refund = 3`)
|
||
- 发送退款通知消息
|
||
|
||
**修复时间**: 2025-01-01
|
||
**测试状态**: 待测试
|
||
|
||
**需要开发**:
|
||
- ✅ 后台审核页面(已存在)
|
||
- ✅ 审核通过/拒绝的处理逻辑(已存在)
|
||
- ✅ 鸽子费分配/退回机制(已存在)
|
||
|
||
---
|
||
|
||
## 修复优先级建议
|
||
|
||
### 🔴 高优先级(影响核心功能)
|
||
- ✅ cs120_1 - 时间段预约逻辑错误(已修复)
|
||
- cs120_2 - 开始时间选择无限制
|
||
- ✅ cs120_9 - 鸽子费审核功能缺失(已修复)
|
||
|
||
### 🟡 中优先级(影响用户体验)
|
||
- ✅ cs110_24 - 已评价组局消息未消失(已修复)
|
||
- cs120_3 - 首页高度显示异常
|
||
- cs120_4 - 房间卡片文字显示不全
|
||
- ✅ cs120_5 - 签到后页面状态未刷新(已修复)
|
||
- cs120_6 - 首页Banner未显示
|
||
- ✅ cs120_7 - 个人信息数值显示异常(已修复)
|
||
- ✅ cs120_8 - 评价后分数显示错误(已修复)
|
||
|
||
### 🟢 低优先级(优化项)
|
||
- ✅ cs110_23 - 后台房间管理图标说明缺失(已修复)
|
||
|
||
---
|
||
|
||
**更新时间**: 2024年
|
||
**版本**: v1.0.0
|
||
**整理人**: 开发团队 |