# 游客模式逻辑错误修复 ## 问题描述 游客访问服务列表页面时,出现401错误: ``` {code: 401, message: "不存在", silent: true} ``` 即使已经将服务相关接口添加到游客白名单,问题仍然存在。 ## 根本原因 在 `peidu/uniapp/src/utils/request.js` 中发现**游客模式判断逻辑完全相反**! ### 错误的逻辑(第119-123行) ```javascript // 游客模式下,如果访问订单接口,直接静默失败 if (isGuest && isGuestAllowedUrl(options.url)) { console.log('[Request] 游客模式,访问白名单接口,静默失败:', options.url) reject({ code: 401, message: '未登录', silent: true }) return } ``` **问题**: 这个逻辑是反的! - 当游客访问**白名单中的接口**时 → 拒绝请求 ❌ - 当游客访问**非白名单接口**时 → 允许请求 ❌ 这导致: - ❌ 游客无法访问 `/api/service/list`(在白名单中) - ❌ 游客无法访问 `/api/category/all`(在白名单中) - ❌ 游客无法访问 `/api/service/search`(在白名单中) ### 正确的逻辑 ```javascript // 游客模式下,如果访问的接口不在白名单中,直接静默失败 if (isGuest && !isGuestAllowedUrl(options.url)) { console.log('[Request] 游客模式,访问非白名单接口,静默失败:', options.url) reject({ code: 401, message: '未登录', silent: true }) return } ``` **正确行为**: - 当游客访问**白名单中的接口**时 → 允许请求 ✅ - 当游客访问**非白名单接口**时 → 拒绝请求 ✅ ## 修复方案 ### 1. 修复 request.js 中的逻辑错误 **文件**: `peidu/uniapp/src/utils/request.js` **修改位置**: 第119-123行 **修改内容**: ```javascript // 修改前 if (isGuest && isGuestAllowedUrl(options.url)) { reject({ code: 401, message: '未登录', silent: true }) return } // 修改后 if (isGuest && !isGuestAllowedUrl(options.url)) { // ✅ 添加了 ! 取反 reject({ code: 401, message: '未登录', silent: true }) return } ``` ### 2. 确认游客白名单配置正确 **文件**: `peidu/uniapp/src/utils/request.js` **白名单配置**: ```javascript const GUEST_ALLOWED_URLS = [ '/api/notification/unread-count', '/api/timecard/list', '/api/home/courses', '/api/banner/list', '/api/service/list', // ✅ 服务列表 '/api/service/search', // ✅ 搜索服务 '/api/category/all', // ✅ 服务分类 '/api/teacher/list', '/api/course/list', '/api/order/list', '/api/order/list-full' ] ``` ### 3. 删除错误的页面配置 **文件**: `peidu/uniapp/src/pages.json` **删除内容**: activity-package 中的 `pages/promo/detail` 配置(因为文件在主包中) ## 影响范围 这个逻辑错误影响了**所有游客模式的功能**: ### 修复前(错误逻辑) - ❌ 游客无法查看首页课程 - ❌ 游客无法查看轮播图 - ❌ 游客无法查看服务列表 - ❌ 游客无法搜索服务 - ❌ 游客无法查看订单列表(即使是空列表) - ❌ 所有白名单接口都被拒绝 ### 修复后(正确逻辑) - ✅ 游客可以查看首页课程 - ✅ 游客可以查看轮播图 - ✅ 游客可以查看服务列表 - ✅ 游客可以搜索服务 - ✅ 游客可以查看订单列表(显示空列表) - ✅ 游客可以浏览所有白名单接口 - ❌ 游客无法提交订单(需要登录) ## 测试验证 ### 测试1: 浏览服务列表 1. 清除登录状态 2. 打开小程序 3. 点击"服务"标签 4. **预期结果**: - ✅ 正常显示服务分类 - ✅ 正常显示服务列表 - ✅ 不显示401错误 ### 测试2: 搜索服务 1. 以游客身份进入服务页面 2. 输入搜索关键词 3. **预期结果**: - ✅ 正常显示搜索结果 - ✅ 不显示401错误 ### 测试3: 查看首页 1. 以游客身份打开小程序 2. 查看首页内容 3. **预期结果**: - ✅ 正常显示轮播图 - ✅ 正常显示课程列表 - ✅ 正常显示所有内容 ### 测试4: 提交订单(登录拦截) 1. 以游客身份浏览服务 2. 点击"立即预约" 3. 填写预约信息 4. 点击"确认预约" 5. **预期结果**: - 🔔 显示"请先登录"提示 - 🔄 跳转到登录页面 ## 修改的文件 1. `peidu/uniapp/src/utils/request.js` - 修复游客模式判断逻辑 2. `peidu/uniapp/src/pages.json` - 删除错误的页面配置 3. `Archive/[一次性]清除缓存重新编译-服务列表游客模式-2026-02-01.bat` - 更新说明 ## 执行步骤 1. ✅ 修复 `request.js` 中的逻辑错误 2. ✅ 删除 `pages.json` 中错误的页面配置 3. ✅ 创建清除缓存的批处理文件 4. ⏳ 执行批处理文件清除缓存 5. ⏳ 在微信开发者工具中重新编译 6. ⏳ 测试游客模式各项功能 ## 经验教训 1. **逻辑取反要小心** - 一个 `!` 的差别导致整个功能反向工作 2. **白名单的含义** - 白名单是"允许访问的列表",不是"拒绝访问的列表" 3. **充分测试** - 修改后要测试所有相关功能,不只是单个功能 4. **代码审查** - 关键逻辑需要仔细审查,避免低级错误 ## 注意事项 1. **必须清除缓存** - 修改后必须清除所有缓存并重新编译 2. **测试覆盖** - 测试所有游客模式功能,确保都正常工作 3. **登录拦截** - 确保需要登录的操作仍然被正确拦截 --- **修复时间**: 2026-02-01 **修复人员**: Kiro AI **问题级别**: 严重(影响所有游客模式功能) **修复状态**: 已完成,待测试