This commit is contained in:
zpc 2026-01-02 15:05:50 +08:00
parent c2700dce4e
commit fe9fc40569
3 changed files with 84 additions and 9 deletions

View File

@ -73,8 +73,55 @@
## 修复优先级
1. **cs120_11 & cs120_12** (高) - 影响核心业务流程,用户无法正常签到
2. **cs120_13** (中) - 影响用户体验,可能导致误操作
3. **cs120_10** (中) - 影响组局管理,但属于边缘情况
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` - 前端签到按钮显示逻辑

View File

@ -268,22 +268,46 @@ public class SQController : ControllerBase
var userId = _user.ID;
var list = await _sQReservationEvaluateServices.QueryListByClauseAsync(it => it.reservation_id == reId && it.user_id == userId);
var participants = await _dbBase.Ado.SqlQueryAsync<SQReservationParticipantsApiEavDto>($"select p.id,p.reservation_id,p.status,p.join_time,p.user_id, p.role,u.nickName UserName,u.avatarImage AvatarImage,ISNULL(u.play_level,4) play_level,ISNULL(u.skills_level,4) skills_level from SQReservationParticipants p inner join CoreCmsUser u on p.user_id=u.id where p.status=0 and p.reservation_id ={reId} and p.is_arrive=1 ");
if (participants == null || participants.Count == 0)
// 过滤掉当前用户自己,只保留可评价的其他用户
var evaluableParticipants = participants?.Where(p => p.user_id != userId).ToList();
// 如果没有可评价的用户(只剩发起者一人),自动为当前用户创建一条空评价记录
// 这样该组局就会从"我的页面"消失
if (evaluableParticipants == null || evaluableParticipants.Count == 0)
{
// 检查是否已经有评价记录,如果没有则创建一条标记记录
var existingEvaluate = await _sQReservationEvaluateServices.QueryByClauseAsync(
it => it.reservation_id == reId && it.user_id == userId);
if (existingEvaluate == null)
{
// 创建一条空评价记录,标记该用户已处理过此组局
var emptyEvaluate = new SQReservationEvaluate()
{
created_at = DateTime.Now,
play_level = 0,
skills_level = 0,
reservation_id = reId,
role = 0,
to_user_id = userId, // 指向自己,表示无人可评价
user_id = userId,
};
await _sQReservationEvaluateServices.InsertAsync(emptyEvaluate);
}
return new WebApiDto()
{
Code = 0,
Data = null
Data = null,
Msg = "暂无可评价的牌友,组局已自动完成"
};
}
var userBlack = await _coreCmsUserBlacklistServices.GetUserBlacklists(userId);
List<object> obj = new List<object>();
foreach (var item in participants)
foreach (var item in evaluableParticipants)
{
if (item.user_id == userId)
{
continue;
}
var is_evaluate = false;
decimal play_level = 0;
decimal skills_level = 0;

View File

@ -76,6 +76,10 @@ const show = async (reservation) => {
uni.hideLoading()
if (!data || data.length === 0) {
uni.showToast({ title: '暂无评价', icon: 'none' })
//
setTimeout(() => {
uni.$emit('evaluateSuccess')
}, 1500)
return
}
evaluateList.value = []