--- description: globs: alwaysApply: false --- # 智慧生态项目常见问题排查指南 ## 登录相关问题 ### Token 失效处理 问题:用户 Token 过期后的处理 解决方案: 1. 在 [request.js](mdc:utils/request.js) 中检测 401 错误 2. 清除本地 Token:`removeToken()` 3. 跳转到登录页:`uni.reLaunch({ url: '/pages/login' })` ### 权限拦截不生效 问题:页面权限拦截失效 检查点: 1. 确认 [permission.js](mdc:permission.js) 已在 [main.js](mdc:main.js) 中引入 2. 检查页面路径是否在白名单中 3. 确认使用了正确的跳转方法(navigateTo、redirectTo 等) ## API 请求问题 ### 跨域问题 在开发环境中遇到跨域: 1. H5 开发:在 [manifest.json](mdc:manifest.json) 配置代理 2. 小程序:在小程序开发工具中关闭域名校验 3. 生产环境:确保服务器配置了正确的 CORS 头 ### 请求超时 调整请求超时时间: ```javascript // 在 request.js 中设置 const service = uni.request({ timeout: 10000 // 10秒超时 }) ``` ## 小程序特定问题 ### 包体积超限 解决方案: 1. 使用分包加载,配置在 [pages.json](mdc:pages.json) 2. 压缩图片资源 3. 移除未使用的代码和依赖 4. 使用 CDN 加载大型资源 ### 真机调试问题 1. 确保 [config.js](mdc:config.js) 中的 baseUrl 使用 HTTPS 2. 在小程序管理后台配置合法域名 3. 检查 [manifest.json](mdc:manifest.json) 中的权限申请 ### 小程序授权失败 检查: 1. `manifest.json` 中的 `permission` 配置 2. `requiredPrivateInfos` 是否声明了需要的接口 3. 用户是否拒绝了授权 ## 样式问题 ### 样式不生效 1. 检查是否使用了 `scoped` 2. uni-app 不支持的 CSS 选择器 3. 使用 `/deep/` 或 `::v-deep` 穿透组件样式 ### rpx 单位问题 ```scss // 使用 uni.scss 中的变量 @import '@/uni.scss'; .container { padding: 20rpx; // 自动适配不同屏幕 } ``` ## 状态管理问题 ### Vuex 数据不更新 1. 确认使用了 `commit` 提交 mutation 2. 检查是否正确使用了命名空间 3. 使用 `mapState`、`mapGetters` 辅助函数 ### 页面刷新数据丢失 解决方案: 1. 重要数据持久化到 storage 2. 在 `onShow` 生命周期重新获取数据 3. 使用 Vuex 配合持久化插件 ## 性能优化 ### 页面加载慢 1. 减少首屏加载的数据量 2. 使用图片懒加载 3. 分页加载列表数据 4. 使用骨架屏提升体验 ### 列表滚动卡顿 ```vue ``` ## 开发环境问题 ### HBuilderX 相关 1. 确保使用最新版本的 HBuilderX 2. 清理项目缓存:工具 -> 清理缓存 3. 重启 HBuilderX 和开发者工具 ### 依赖安装问题 ```powershell # 清理缓存 Remove-Item -Recurse -Force node_modules Remove-Item package-lock.json # 重新安装 npm install ``` ## 调试技巧 ### 查看网络请求 1. 小程序:使用开发者工具的 Network 面板 2. H5:使用浏览器开发者工具 3. APP:使用 `console.log` 或远程调试 ### 查看存储数据 ```javascript // 获取所有存储的键 const res = uni.getStorageInfoSync() console.log('keys:', res.keys) // 查看特定数据 const token = uni.getStorageSync('token') console.log('token:', token) ``` ### 页面栈信息 ```javascript // 获取当前页面栈 const pages = getCurrentPages() console.log('页面栈:', pages) // 获取当前页面实例 const currentPage = pages[pages.length - 1] ``` ## 发布部署 ### 小程序发布前检查 1. 关闭调试模式 2. 检查 API 地址是否正确 3. 压缩代码和资源 4. 测试各项权限申请 ### 版本更新提示 ```javascript // 在 App.vue 中添加 onShow() { // #ifdef MP-WEIXIN const updateManager = uni.getUpdateManager() updateManager.onUpdateReady(() => { uni.showModal({ title: '更新提示', content: '新版本已经准备好,是否重启应用?', success: (res) => { if (res.confirm) { updateManager.applyUpdate() } } }) }) // #endif }