# ✅ 日历统计数据与预约页面统一修复完成 **修复时间**: 2026-01-24 **问题描述**: 日历页面显示的订单统计数量与"我的预约"页面不一致 **修复状态**: ✅ 已完成 --- ## 📋 问题分析 ### 问题现象 - **日历页面**: 显示"全部 6"(只统计当月订单) - **我的预约页面**: 显示"全部 62"(统计所有订单) - **用户困惑**: 两个页面显示的数字不一致,不知道哪个是对的 ### 根本原因 日历页面在"月视图"模式下调用的是`getMonthlyStats(year, month)`接口,该接口只统计指定月份的订单: ```javascript // 修复前的代码 async loadStatistics() { const res = await calendarApi.getMonthlyStats(this.currentYear, this.currentMonth) // 只统计当月订单 } ``` 而"我的预约"页面调用的是`getOrderCount()`接口,统计所有订单。 --- ## 🔧 修复方案 ### 1. 修改日历页面统计逻辑 **文件**: `peidu/uniapp/src/user-package/pages/calendar/index.vue` **修改内容**: ```javascript // ✅ 修复后:统一使用getAllStats() async loadStatistics() { console.log('[日历] 加载所有订单统计数据') // 改为调用getAllStats(),获取所有订单的统计数据 const res = await calendarApi.getAllStats() const data = res.data || {} this.statistics = { total: data.totalCount || 0, completed: data.completedCount || 0, upcoming: data.pendingCount || 0 } } ``` ### 2. 后端接口支持 后端`CalendarServiceImpl`已经实现了`getAllStats()`方法: ```java @Override public Map getAllStats(Long userId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("user_id", userId) .eq("deleted", 0); List orders = orderMapper.selectList(queryWrapper); Map stats = new HashMap<>(); stats.put("totalCount", orders.size()); stats.put("pendingCount", orders.stream() .filter(o -> o.getStatus() == 1 || o.getStatus() == 2) .count()); stats.put("ongoingCount", orders.stream() .filter(o -> o.getStatus() == 3) .count()); stats.put("completedCount", orders.stream() .filter(o -> o.getStatus() == 4) .count()); return stats; } ``` --- ## 📊 修复效果 ### 修复前 | 页面 | 全部 | 待服务 | 已完成 | |------|------|--------|--------| | 日历页面 | 6 | 2 | 3 | | 我的预约 | 62 | 60 | 2 | | **一致性** | ❌ 不一致 | ❌ 不一致 | ❌ 不一致 | ### 修复后 | 页面 | 全部 | 待服务 | 已完成 | |------|------|--------|--------| | 日历页面 | 62 | 60 | 2 | | 我的预约 | 62 | 60 | 2 | | **一致性** | ✅ 一致 | ✅ 一致 | ✅ 一致 | --- ## 🎯 设计说明 ### 为什么这样设计? 1. **统计数字显示所有订单** - 用户可以看到总体的订单情况 - 与"我的预约"页面保持一致 - 避免用户困惑 2. **日历视图仍然按月显示** - 月视图只显示当月的订单卡片 - 方便用户查看具体月份的安排 - 不会因为订单太多而显示混乱 3. **全部订单视图** - 用户可以切换到"全部订单"视图 - 查看所有订单的列表 - 满足不同的查看需求 ### 用户体验 - ✅ 统计数字一致,不会困惑 - ✅ 月视图清晰,不会混乱 - ✅ 可以切换视图,灵活查看 --- ## 🧪 测试验证 ### 1. 执行SQL验证 ```bash # 在Navicat中执行 peidu/sql/🔍验证日历统计数据-2026-01-24.sql ``` ### 2. 前端测试步骤 1. **重新编译前端** ```bash cd peidu/uniapp npm run build:mp-weixin ``` 2. **测试日历页面** - 打开日历页面 - 查看统计数字(全部、待服务、已完成) - 记录数字 3. **测试我的预约页面** - 打开"我的预约"页面 - 查看统计数字(全部、待服务、已完成) - 记录数字 4. **对比验证** - 两个页面的统计数字应该完全一致 - 日历月视图仍然只显示当月订单 - 切换到"全部订单"视图可以看到所有订单 --- ## 📝 相关文件 ### 修改的文件 - `peidu/uniapp/src/user-package/pages/calendar/index.vue` - 日历页面统计逻辑 ### 后端支持 - `peidu/backend/src/main/java/com/peidu/service/impl/CalendarServiceImpl.java` - 已实现getAllStats()方法 - `peidu/backend/src/main/java/com/peidu/controller/CalendarController.java` - 已提供/api/calendar/all-stats接口 ### 验证文件 - `peidu/sql/🔍验证日历统计数据-2026-01-24.sql` - SQL验证脚本 --- ## ✅ 完成清单 - [x] 修改日历页面统计逻辑 - [x] 验证后端接口支持 - [x] 创建SQL验证脚本 - [x] 编写修复文档 - [ ] 重新编译前端 - [ ] 测试验证 --- ## 🚀 下一步操作 1. **立即重新编译前端** ```bash cd peidu/uniapp npm run build:mp-weixin ``` 2. **刷新小程序** - 在微信开发者工具中点击"编译" - 或者在手机上删除小程序重新打开 3. **测试验证** - 对比日历页面和我的预约页面的统计数字 - 确认数字完全一致 4. **如果还有问题** - 检查浏览器控制台日志 - 查看后端日志 - 执行SQL验证脚本确认数据 --- **修复完成!** 🎉