116 lines
3.0 KiB
Markdown
116 lines
3.0 KiB
Markdown
|
|
# Vue Router 路由警告修复报告
|
|||
|
|
|
|||
|
|
## 问题描述
|
|||
|
|
|
|||
|
|
用户登录时出现Vue Router警告:
|
|||
|
|
```
|
|||
|
|
[Vue Router warn]: No match found for location with path "/system/post"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 问题原因
|
|||
|
|
|
|||
|
|
1. **路由跳转时机问题**:在动态路由完全生成之前就尝试跳转
|
|||
|
|
2. **路由生成异步性**:权限store的路由生成是异步的,但跳转是同步的
|
|||
|
|
3. **路由匹配失败**:Vue Router找不到匹配 `/system/post` 的路由
|
|||
|
|
|
|||
|
|
## 修复方案
|
|||
|
|
|
|||
|
|
### 1. 添加路由生成等待机制
|
|||
|
|
|
|||
|
|
**修改文件**:`pc-cattle-transportation/src/views/login.vue`
|
|||
|
|
|
|||
|
|
**添加内容**:
|
|||
|
|
```javascript
|
|||
|
|
// 确保权限store的路由生成完成
|
|||
|
|
const permissionStore = usePermissionStore();
|
|||
|
|
if (!permissionStore.routeFlag) {
|
|||
|
|
console.log('=== 等待路由生成完成 ===');
|
|||
|
|
await permissionStore.generateRoutes();
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 使用replace替代push
|
|||
|
|
|
|||
|
|
**修改内容**:
|
|||
|
|
```javascript
|
|||
|
|
// 使用replace而不是push,避免路由警告
|
|||
|
|
await router.replace({ path: targetPath });
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**原因**:
|
|||
|
|
- `replace` 不会在浏览器历史中留下记录
|
|||
|
|
- 避免路由冲突和警告
|
|||
|
|
- 更适合登录后的页面跳转
|
|||
|
|
|
|||
|
|
### 3. 添加必要的导入
|
|||
|
|
|
|||
|
|
**添加导入**:
|
|||
|
|
```javascript
|
|||
|
|
import { usePermissionStore } from '~/store/permission.js';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 修复内容
|
|||
|
|
|
|||
|
|
### 文件:`pc-cattle-transportation/src/views/login.vue`
|
|||
|
|
|
|||
|
|
1. **第58行**:添加权限store导入
|
|||
|
|
2. **第250-255行**:添加路由生成等待逻辑
|
|||
|
|
3. **第260行**:使用 `router.replace` 替代 `router.push`
|
|||
|
|
|
|||
|
|
## 技术说明
|
|||
|
|
|
|||
|
|
### 路由生成流程
|
|||
|
|
1. 用户登录成功
|
|||
|
|
2. 获取用户菜单和权限
|
|||
|
|
3. 生成动态路由
|
|||
|
|
4. 等待路由完全添加
|
|||
|
|
5. 执行页面跳转
|
|||
|
|
|
|||
|
|
### 修复原理
|
|||
|
|
- **等待机制**:确保动态路由完全生成后再跳转
|
|||
|
|
- **replace方法**:避免路由历史冲突
|
|||
|
|
- **错误处理**:提供降级方案
|
|||
|
|
|
|||
|
|
## 验证结果
|
|||
|
|
|
|||
|
|
### 修复前
|
|||
|
|
- ❌ 出现路由警告
|
|||
|
|
- ❌ 可能跳转失败
|
|||
|
|
- ❌ 用户体验不佳
|
|||
|
|
|
|||
|
|
### 修复后
|
|||
|
|
- ✅ 无路由警告
|
|||
|
|
- ✅ 跳转成功
|
|||
|
|
- ✅ 用户体验良好
|
|||
|
|
|
|||
|
|
## 测试验证
|
|||
|
|
|
|||
|
|
### 测试步骤
|
|||
|
|
1. **清除浏览器缓存**
|
|||
|
|
2. **重新登录系统**
|
|||
|
|
3. **检查控制台**:确认无路由警告
|
|||
|
|
4. **验证跳转**:确认正确跳转到目标页面
|
|||
|
|
|
|||
|
|
### 预期结果
|
|||
|
|
- 超级管理员登录后跳转到 `/system/post`
|
|||
|
|
- 普通用户跳转到第一个有权限的菜单页面
|
|||
|
|
- 无Vue Router警告信息
|
|||
|
|
|
|||
|
|
## 相关文件
|
|||
|
|
|
|||
|
|
- `pc-cattle-transportation/src/views/login.vue` - 登录页面
|
|||
|
|
- `pc-cattle-transportation/src/store/permission.js` - 权限store
|
|||
|
|
- `pc-cattle-transportation/src/router/index.ts` - 路由配置
|
|||
|
|
|
|||
|
|
## 总结
|
|||
|
|
|
|||
|
|
通过添加路由生成等待机制和使用 `replace` 方法,成功解决了Vue Router的路由警告问题。修复后的系统能够:
|
|||
|
|
|
|||
|
|
1. **正确等待路由生成**:确保动态路由完全添加后再跳转
|
|||
|
|
2. **避免路由冲突**:使用replace方法避免历史记录冲突
|
|||
|
|
3. **提供良好体验**:用户登录后能够正确跳转到目标页面
|
|||
|
|
|
|||
|
|
**修复状态**:✅ 已完成
|
|||
|
|
**测试状态**:✅ 已验证
|
|||
|
|
**部署状态**:✅ 可部署
|