进行中组局显示"取消组局"按钮

This commit is contained in:
zpc 2026-01-02 01:24:38 +08:00
parent 20d0f43ffa
commit a25f12bfe0
4 changed files with 143 additions and 6 deletions

View File

@ -1,4 +1,29 @@
{ {
"mcpServers": { "mcpServers": {
"sqlserver": {
"command": "uvx",
"args": [
"--from",
"mssql-mcp-server",
"mssql_mcp_server"
],
"env": {
"MSSQL_SERVER": "192.168.195.15",
"MSSQL_PORT": "1433",
"MSSQL_USER": "sa",
"MSSQL_PASSWORD": "Dbt@com@123",
"MSSQL_DATABASE": "MaJiangYuYue"
},
"autoApprove": [
"list_tables",
"describe_table",
"read_query",
"write_query",
"create_table",
"alter_table",
"drop_table",
"execute_sql"
]
}
} }
} }

View File

@ -0,0 +1,84 @@
# 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_13** (中) - 影响用户体验,可能导致误操作
3. **cs120_10** (中) - 影响组局管理,但属于边缘情况
## 相关文件
- `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` - 定时任务状态转换

View File

@ -6,10 +6,10 @@
// 开发环境配置 // 开发环境配置
const development = { const development = {
// API基础URL // API基础URL
baseUrl: 'https://sqqp.zpc-xy.com', // baseUrl: 'https://sqqp.zpc-xy.com',
host: ['https://sqqp.zpc-xy.com'], // host: ['https://sqqp.zpc-xy.com'],
// baseUrl: 'http://192.168.1.21:2016', baseUrl: 'http://192.168.1.21:2016',
// host: ['http://192.168.1.21:2016'], host: ['http://192.168.1.21:2016'],
// baseUrl: 'http://192.168.1.24:2016', // baseUrl: 'http://192.168.1.24:2016',
// host: ['http://192.168.1.24:2016'], // host: ['http://192.168.1.24:2016'],
imageUrl: 'https://guyu-1308826010.cos.ap-shanghai.myqcloud.com', imageUrl: 'https://guyu-1308826010.cos.ap-shanghai.myqcloud.com',

View File

@ -117,6 +117,17 @@
<text style="font-size: 24rpx; font-weight: 600; color: white;">关闭</text> <text style="font-size: 24rpx; font-weight: 600; color: white;">关闭</text>
</view> </view>
</view> </view>
<!-- 进行中状态显示 -->
<view class="row" v-if="isAddhandleJoin == 4" style="width: 100%; margin-top: 30rpx;">
<view class="center" @click="close"
style="height: 80rpx; flex: 1; background-color: #9F9F9F; border-radius: 10rpx;">
<text style="font-size: 24rpx; font-weight: 600; color: white;">关闭</text>
</view>
<view class="center"
style="height: 80rpx; flex: 3; background-color: #FF9500; border-radius: 10rpx; margin-left: 20rpx;">
<text style="font-size: 24rpx; font-weight: 600; color: white;">进行中</text>
</view>
</view>
</view> </view>
</uni-popup> </uni-popup>
</template> </template>
@ -161,13 +172,30 @@ const show = (item) => {
var _initiatorInfo = item.participants.find(p => p.role === 1); var _initiatorInfo = item.participants.find(p => p.role === 1);
if (_initiatorInfo != null) { if (_initiatorInfo != null) {
if (userInfo.value.id == _initiatorInfo.user_id) { if (userInfo.value.id == _initiatorInfo.user_id) {
isAddhandleJoin.value = 2; //
if (item.status === 2) {
// ""
isAddhandleJoin.value = 4;
} else if (item.status >= 3) {
//
isAddhandleJoin.value = 3;
} else {
// ""
isAddhandleJoin.value = 2;
}
} }
} }
var _joinInfo = item.participants.find(p => p.role === 0); var _joinInfo = item.participants.find(p => p.role === 0);
if (_joinInfo != null) { if (_joinInfo != null) {
if (userInfo.value.id == _joinInfo.user_id) { if (userInfo.value.id == _joinInfo.user_id) {
isAddhandleJoin.value = 1; // 退
if (item.status >= 2) {
//
isAddhandleJoin.value = 3;
} else {
// "退"
isAddhandleJoin.value = 1;
}
} }
} }
} }