239 lines
7.2 KiB
JavaScript
239 lines
7.2 KiB
JavaScript
/**
|
|
* 路由管理工具类
|
|
* 支持动态路由跳转,无需在pages.json中预先配置
|
|
*/
|
|
|
|
// 服务路由映射配置
|
|
const SERVICE_ROUTES = {
|
|
// 学工管理
|
|
'student:info': '/pages/xg/xsjcxx/xsjcxx/index',
|
|
'student:dorm': '/pages/student/dorm/index',
|
|
'student:leave': '/pages/xg/xsjcxx/xsqj/leave/index',
|
|
'student:psychology': '/pages/student/psychology/index',
|
|
'student:club': '/pages/student/club/index',
|
|
'student:counsel': '/pages/student/counsel/index',
|
|
|
|
// 后勤管理
|
|
'logistics:repair': '/pages/logistics/repair/index',
|
|
'logistics:venue': '/pages/logistics/venue/index',
|
|
'logistics:hall': '/pages/logistics/hall/index',
|
|
'logistics:survey': '/pages/logistics/survey/index',
|
|
'logistics:canteen': '/pages/logistics/canteen/index',
|
|
'logistics:property': '/pages/logistics/property/index',
|
|
|
|
// 招生就业
|
|
'recruitment:student': '/pages/recruitment/student/index',
|
|
'recruitment:graduate': '/pages/recruitment/graduate/index',
|
|
'recruitment:job': '/pages/recruitment/job/index',
|
|
|
|
// 人事管理
|
|
'hr:staff': '/pages/hr/staff/index',
|
|
'hr:abroad': '/pages/hr/abroad/index',
|
|
'hr:training': '/pages/hr/training/index',
|
|
|
|
// 财务管理
|
|
'finance:budget': '/pages/finance/budget/index',
|
|
'finance:expense': '/pages/finance/expense/index',
|
|
'finance:invoice': '/pages/finance/invoice/index',
|
|
|
|
// 系统管理
|
|
'system:user': '/pages/system/user/index',
|
|
'system:role': '/pages/system/role/index',
|
|
'system:menu': '/pages/system/menu/index',
|
|
'system:dept': '/pages/system/dept/index',
|
|
'system:config': '/pages/system/config/index',
|
|
'monitor:online': '/pages/monitor/online/index',
|
|
};
|
|
|
|
// 服务名称映射
|
|
const SERVICE_NAMES = {
|
|
学生信息: 'student:info',
|
|
宿舍管理: 'student:dorm',
|
|
学生请假: 'student:leave',
|
|
心理健康: 'student:psychology',
|
|
社团管理: 'student:club',
|
|
心理咨询: 'student:counsel',
|
|
物业报修: 'logistics:repair',
|
|
场地预约: 'logistics:venue',
|
|
报告厅预约: 'logistics:hall',
|
|
满意度调查: 'logistics:survey',
|
|
食堂管理: 'logistics:canteen',
|
|
物业管理: 'logistics:property',
|
|
学生管理: 'recruitment:student',
|
|
毕业生信息: 'recruitment:graduate',
|
|
就业信息: 'recruitment:job',
|
|
员工管理: 'hr:staff',
|
|
出国申请: 'hr:abroad',
|
|
培训管理: 'hr:training',
|
|
预算管理: 'finance:budget',
|
|
费用报销: 'finance:expense',
|
|
发票管理: 'finance:invoice',
|
|
用户管理: 'system:user',
|
|
角色管理: 'system:role',
|
|
菜单管理: 'system:menu',
|
|
部门管理: 'system:dept',
|
|
参数设置: 'system:config',
|
|
在线用户: 'monitor:online',
|
|
};
|
|
|
|
/**
|
|
* 路由管理类
|
|
*/
|
|
class RouterManager {
|
|
/**
|
|
* 根据服务名称跳转到对应页面
|
|
* @param {string} serviceName - 服务名称
|
|
* @param {object} options - 跳转选项
|
|
*/
|
|
static navigateToService(serviceName, options = {}) {
|
|
const serviceKey = SERVICE_NAMES[serviceName];
|
|
if (!serviceKey) {
|
|
this.showServiceNotConfigured(serviceName);
|
|
return;
|
|
}
|
|
|
|
const route = SERVICE_ROUTES[serviceKey];
|
|
if (!route) {
|
|
this.showServiceNotConfigured(serviceName);
|
|
return;
|
|
}
|
|
|
|
// 构建完整URL(支持参数传递)
|
|
let url = route;
|
|
if (options.params) {
|
|
const queryString = Object.keys(options.params)
|
|
.map((key) => `${key}=${encodeURIComponent(options.params[key])}`)
|
|
.join('&');
|
|
url += `?${queryString}`;
|
|
}
|
|
|
|
// 执行跳转
|
|
uni.navigateTo({
|
|
url,
|
|
success: () => {
|
|
console.log(`✅ 成功跳转到: ${url}`);
|
|
if (options.onSuccess) {
|
|
options.onSuccess();
|
|
}
|
|
},
|
|
fail: (error) => {
|
|
console.warn(`⚠️ 页面跳转失败: ${url}`, error);
|
|
this.handlePageNotExist(serviceName, route, options);
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 处理页面不存在的情况
|
|
* @param {string} serviceName - 服务名称
|
|
* @param {string} route - 路由路径
|
|
* @param {object} options - 选项
|
|
*/
|
|
static handlePageNotExist(serviceName, route, options = {}) {
|
|
uni.showModal({
|
|
title: '页面不存在',
|
|
content: `${serviceName}页面尚未创建,是否创建该页面?`,
|
|
confirmText: '创建页面',
|
|
cancelText: '取消',
|
|
success: (res) => {
|
|
if (res.confirm) {
|
|
this.createPageTemplate(serviceName, route, options);
|
|
} else {
|
|
this.showServiceNotImplemented(serviceName);
|
|
}
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 创建页面模板
|
|
* @param {string} serviceName - 服务名称
|
|
* @param {string} route - 路由路径
|
|
* @param {object} options - 选项
|
|
*/
|
|
static createPageTemplate(serviceName, route, options = {}) {
|
|
// 这里可以实现页面创建逻辑
|
|
// 1. 调用后端API创建页面文件
|
|
// 2. 跳转到页面创建向导
|
|
// 3. 生成标准页面模板
|
|
|
|
console.log(`📝 需要创建页面: ${route} - ${serviceName}`);
|
|
|
|
// 临时提示
|
|
uni.showToast({
|
|
title: '页面创建功能开发中',
|
|
icon: 'none',
|
|
duration: 2000,
|
|
});
|
|
|
|
// 可以在这里添加实际的页面创建逻辑
|
|
if (options.onCreatePage) {
|
|
options.onCreatePage(serviceName, route);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 显示服务未配置提示
|
|
* @param {string} serviceName - 服务名称
|
|
*/
|
|
static showServiceNotConfigured(serviceName) {
|
|
uni.showToast({
|
|
title: `服务未配置: ${serviceName}`,
|
|
icon: 'none',
|
|
duration: 2000,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 显示服务未实现提示
|
|
* @param {string} serviceName - 服务名称
|
|
*/
|
|
static showServiceNotImplemented(serviceName) {
|
|
uni.showToast({
|
|
title: `功能开发中: ${serviceName}`,
|
|
icon: 'none',
|
|
duration: 2000,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 检查页面是否存在
|
|
* @param {string} route - 路由路径
|
|
* @returns {Promise<boolean>}
|
|
*/
|
|
static async checkPageExists(route) {
|
|
return new Promise((resolve) => {
|
|
// 尝试跳转但不实际跳转,用于检查页面是否存在
|
|
uni.navigateTo({
|
|
url: route,
|
|
success: () => {
|
|
// 立即返回,避免实际跳转
|
|
uni.navigateBack();
|
|
resolve(true);
|
|
},
|
|
fail: () => {
|
|
resolve(false);
|
|
},
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 获取所有可用的服务路由
|
|
* @returns {object}
|
|
*/
|
|
static getAvailableRoutes() {
|
|
return { ...SERVICE_ROUTES };
|
|
}
|
|
|
|
/**
|
|
* 获取服务名称映射
|
|
* @returns {object}
|
|
*/
|
|
static getServiceNames() {
|
|
return { ...SERVICE_NAMES };
|
|
}
|
|
}
|
|
|
|
export default RouterManager;
|