minishouyin/test/fix-menu.js
2025-11-12 11:35:57 +08:00

184 lines
6.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 菜单功能修复脚本
* 修复"启动收银台.bat"启动后菜单功能无法正常使用的问题
*/
const fs = require('fs');
const path = require('path');
console.log('=== 菜单功能修复工具 ===');
// 修复Layout.js中的菜单点击处理函数
function fixLayoutMenuClick() {
console.log('\n1. 修复Layout.js菜单点击处理函数...');
try {
const layoutPath = path.join(__dirname, 'src', 'renderer', 'components', 'Layout.js');
if (fs.existsSync(layoutPath)) {
let content = fs.readFileSync(layoutPath, 'utf8');
// 备份原文件
fs.writeFileSync(layoutPath + '.backup', content);
console.log(' ✅ 已备份原文件');
// 查找现有的handleMenuClick函数
const oldFunction = `const handleMenuClick = ({ key }) => {
try {
// 使用electronNavigate处理导航
electronNavigate(key, navigate);
} catch (error) {
console.error('菜单导航失败:', error);
}
};`;
// 新的增强版函数
const newFunction = `const handleMenuClick = ({ key }) => {
console.log('菜单点击:', key);
try {
// 首先尝试使用electronNavigate处理导航
if (typeof electronNavigate === 'function') {
electronNavigate(key, navigate);
console.log('通过electronNavigate导航成功');
return;
}
} catch (error) {
console.warn('electronNavigate导航失败:', error);
}
// 备用方案1: 直接使用React Router的navigate
try {
if (navigate && typeof navigate === 'function') {
navigate(key);
console.log('通过React Router导航成功');
return;
}
} catch (error) {
console.warn('React Router导航失败:', error);
}
// 备用方案2: 使用window.location.hash
try {
if (key.startsWith('/')) {
window.location.hash = key;
console.log('通过window.location.hash导航成功');
return;
}
} catch (error) {
console.warn('window.location.hash导航失败:', error);
}
// 最后的备选方案: 刷新页面
console.error('所有导航方案都失败了,将刷新页面');
window.location.reload();
};`;
// 替换函数
if (content.includes(oldFunction)) {
content = content.replace(oldFunction, newFunction);
fs.writeFileSync(layoutPath, content, 'utf8');
console.log(' ✅ Layout.js菜单点击处理函数已修复');
} else {
console.log(' ⚠️ 未找到预期的handleMenuClick函数可能已被修改');
// 尝试更通用的替换
const genericPattern = /const handleMenuClick = \({ key }\) => {[\s\S]*?};/;
if (genericPattern.test(content)) {
content = content.replace(genericPattern, newFunction);
fs.writeFileSync(layoutPath, content, 'utf8');
console.log(' ✅ Layout.js菜单点击处理函数已通过通用模式修复');
} else {
console.log(' ❌ 无法定位handleMenuClick函数进行修复');
}
}
} else {
console.log(' ❌ Layout.js文件不存在');
}
} catch (error) {
console.error(' ❌ 修复Layout.js失败:', error);
}
}
// 修复App.js中的路由配置
function fixAppRouting() {
console.log('\n2. 检查App.js路由配置...');
try {
const appPath = path.join(__dirname, 'src', 'renderer', 'App.js');
if (fs.existsSync(appPath)) {
let content = fs.readFileSync(appPath, 'utf8');
// 检查是否使用HashRouter
if (content.includes('HashRouter as Router')) {
console.log(' ✅ 已正确使用HashRouter');
} else if (content.includes('BrowserRouter as Router')) {
console.log(' ⚠️ 使用了BrowserRouter可能需要改为HashRouter');
} else {
console.log(' ⚠️ 未明确使用HashRouter或BrowserRouter');
}
// 检查路由配置
const routePattern = /<Route path="\/cashier" element={<Cashier \/>} \/>/;
if (routePattern.test(content)) {
console.log(' ✅ 收银台路由配置正确');
} else {
console.log(' ⚠️ 收银台路由配置可能存在问题');
}
} else {
console.log(' ❌ App.js文件不存在');
}
} catch (error) {
console.error(' ❌ 检查App.js失败:', error);
}
}
// 更新HTML模板确保基础路径正确
function updateHtmlTemplate() {
console.log('\n3. 检查HTML模板...');
try {
const htmlPath = path.join(__dirname, 'src', 'renderer', 'index.html');
if (fs.existsSync(htmlPath)) {
let content = fs.readFileSync(htmlPath, 'utf8');
// 检查base标签
if (content.includes('<base href="./">')) {
console.log(' ✅ base标签已正确设置');
} else {
// 添加base标签
const headEndIndex = content.indexOf('</head>');
if (headEndIndex > 0) {
const baseTag = '\n <base href="./">\n';
content = content.slice(0, headEndIndex) + baseTag + content.slice(headEndIndex);
fs.writeFileSync(htmlPath, content, 'utf8');
console.log(' ✅ 已添加base标签');
} else {
console.log(' ⚠️ 无法定位head标签未添加base标签');
}
}
} else {
console.log(' ❌ index.html文件不存在');
}
} catch (error) {
console.error(' ❌ 检查HTML模板失败:', error);
}
}
// 主函数
function main() {
console.log('开始修复菜单功能问题...\n');
fixLayoutMenuClick();
fixAppRouting();
updateHtmlTemplate();
console.log('\n=== 菜单功能修复完成 ===');
console.log('修复内容:');
console.log('1. 增强了Layout.js中的菜单点击处理函数添加多重备选导航方案');
console.log('2. 确保使用HashRouter以兼容Electron环境');
console.log('3. 在HTML模板中添加了正确的base标签');
console.log('\n请重新构建并启动应用以使更改生效:');
console.log(' 1. npm run build');
console.log(' 2. npm start');
console.log('\n或者直接运行"启动收银台.bat"');
}
// 执行修复
main();