本指南介绍如何在uni-app中实现动态路由跳转,无需在pages.json中预先配置所有页面路由。
pages.json中预先配置RouterManager 统一管理路由跳转PageGenerator 生成标准页面模板// 在页面中引入路由管理工具
import RouterManager from '@/utils/router';
// 简单跳转
RouterManager.navigateToService('学生信息');
// 带参数跳转
RouterManager.navigateToService('物业报修', {
params: {
type: 'urgent',
category: 'electrical'
}
});
// 带回调的跳转
RouterManager.navigateToService('场地预约', {
onSuccess: () => {
console.log('跳转成功');
},
onCreatePage: (serviceName, route) => {
console.log(`需要创建页面: ${serviceName} -> ${route}`);
}
});
<template>
<ServiceItem
title="学生信息"
@click="handleServiceClick"
>
<template #icon>
<u-icon name="account" size="24" />
</template>
</ServiceItem>
</template>
<script>
import RouterManager from '@/utils/router';
export default {
methods: {
handleServiceClick(service) {
RouterManager.navigateToService(service.title, {
onSuccess: () => {
console.log(`✅ 成功跳转到服务: ${service.title}`);
},
onCreatePage: (serviceName, route) => {
console.log(`📝 创建页面: ${serviceName} -> ${route}`);
}
});
}
}
}
</script>
mobile/src/utils/
├── router.js # 路由管理工具
├── page-generator.js # 页面模板生成器
└── permission.js # 权限管理(现有)
mobile/src/pages/
├── index/
│ └── index.vue # 首页(已更新)
├── student/ # 学工管理页面
├── logistics/ # 后勤管理页面
├── recruitment/ # 招生就业页面
├── hr/ # 人事管理页面
├── finance/ # 财务管理页面
└── system/ # 系统管理页面
在 mobile/src/utils/router.js 中配置服务路由映射:
// 服务路由映射配置
const SERVICE_ROUTES = {
// 学工管理
'student:info': '/pages/student/info/index',
'student:dorm': '/pages/student/dorm/index',
'student:leave': '/pages/student/leave/index',
// ... 更多路由
};
// 服务名称映射
const SERVICE_NAMES = {
'学生信息': 'student:info',
'宿舍管理': 'student:dorm',
'学生请假': 'student:leave',
// ... 更多映射
};
在 mobile/src/utils/page-generator.js 中配置权限标识:
static getPermissionKey(serviceName) {
const permissionMap = {
'学生信息': 'student:info',
'宿舍管理': 'student:dorm',
'学生请假': 'student:leave',
// ... 更多权限配置
};
return permissionMap[serviceName] || 'system:default';
}
import PageGenerator from '@/utils/page-generator';
// 生成学生信息列表页面模板
const listTemplate = PageGenerator.generateListPage('学生信息', '/pages/student/info/index');
console.log(listTemplate);
// 生成学生信息表单页面模板
const formTemplate = PageGenerator.generateFormPage('学生信息', '/pages/student/info/form');
console.log(formTemplate);
// 在路由管理工具中集成页面创建功能
RouterManager.navigateToService('学生信息', {
onCreatePage: async (serviceName, route) => {
// 生成页面模板
const listTemplate = PageGenerator.generateListPage(serviceName, route);
const formTemplate = PageGenerator.generateFormPage(serviceName, route);
// 这里可以调用API创建页面文件
// 或者保存到本地文件系统
console.log('生成的列表页面模板:', listTemplate);
console.log('生成的表单页面模板:', formTemplate);
}
});
<u-button
v-if="hasPermi(['student:info:add'])"
type="primary"
@click="handleAdd"
>
新增
</u-button>
// 在页面加载时检查权限
onLoad() {
if (!this.hasPermi(['student:info:list'])) {
uni.showToast({
title: '无访问权限',
icon: 'none'
});
uni.navigateBack();
return;
}
this.loadData();
}
// 自动检测页面是否存在
RouterManager.navigateToService('学生信息', {
fail: (error) => {
// 显示创建页面对话框
uni.showModal({
title: '页面不存在',
content: '学生信息页面尚未创建,是否创建该页面?',
confirmText: '创建页面',
cancelText: '取消',
success: (res) => {
if (res.confirm) {
// 生成页面模板
this.createPageTemplate('学生信息', '/pages/student/info/index');
}
}
});
}
});
// 在页面模板中自动处理网络错误
async loadData() {
try {
const response = await api.get('/student/info/list', { params });
// 处理成功响应
} catch (error) {
console.error('加载数据失败:', error);
uni.showToast({
title: '网络错误',
icon: 'none'
});
}
}
| 模块 | 服务数量 | 状态 |
|---|---|---|
| 学工管理 | 6个 | ✅ 已配置 |
| 后勤管理 | 6个 | ✅ 已配置 |
| 招生就业 | 3个 | ✅ 已配置 |
| 人事管理 | 3个 | ✅ 已配置 |
| 财务管理 | 3个 | ✅ 已配置 |
| 系统管理 | 6个 | ✅ 已配置 |
用户点击 → 检查权限 → 查找路由 → 执行跳转
跳转失败 → 显示对话框 → 用户确认 → 生成模板 → 创建页面
生成模板 → 保存文件 → 更新路由 → 重新跳转
// 测试路由跳转
RouterManager.navigateToService('学生信息');
// 测试页面存在性检查
const exists = await RouterManager.checkPageExists('/pages/student/info/index');
console.log('页面是否存在:', exists);
// 测试模板生成
const template = PageGenerator.generateListPage('学生信息', '/pages/student/info/index');
console.log('生成的模板长度:', template.length);
// 测试权限检查
const hasPermission = hasPermi(['student:info:list']);
console.log('是否有权限:', hasPermission);
如有问题或建议,请联系开发团队或查看项目仓库的 Issues。
📝 维护: 移动端动态路由使用指南
🔄 更新: 2025-01-26
📁 文件: docs/开发文档/移动端动态路由使用指南.md