功能优化

This commit is contained in:
2025-07-25 14:47:06 +08:00
parent 9b69c232a3
commit d31dc9003d
2 changed files with 178 additions and 9 deletions

View File

@@ -199,9 +199,31 @@ export function setupIPC() {
newWindow.loadURL(url); newWindow.loadURL(url);
// 可选:添加错误处理 // 添加重试机制的错误处理
let failLoadCount = 0;
const maxRetries = 2;
const retryDelay = 1000;
newWindow.webContents.on('did-fail-load', (event, errorCode, errorDescription) => { newWindow.webContents.on('did-fail-load', (event, errorCode, errorDescription) => {
console.error('页面加载失败:', errorDescription); console.error('页面加载失败:', errorDescription);
failLoadCount++;
if (failLoadCount <= maxRetries) {
console.log(`页面加载失败,${retryDelay}ms后进行第${failLoadCount}次重试...`);
setTimeout(() => {
newWindow.reload();
}, retryDelay);
} else {
console.error('页面加载失败次数超过最大重试次数');
}
});
// 页面加载成功时重置失败计数
newWindow.webContents.on('did-finish-load', () => {
if (failLoadCount > 0) {
console.log('页面加载成功,重置失败计数');
failLoadCount = 0;
}
}); });
return 'success'; return 'success';
@@ -222,9 +244,31 @@ export function setupIPC() {
newWindow.loadURL(url); newWindow.loadURL(url);
// 可选:添加错误处理 // 添加重试机制的错误处理
let failLoadCount2 = 0;
const maxRetries2 = 2;
const retryDelay2 = 1000;
newWindow.webContents.on('did-fail-load', (event, errorCode, errorDescription) => { newWindow.webContents.on('did-fail-load', (event, errorCode, errorDescription) => {
console.error('页面加载失败:', errorDescription); console.error('页面加载失败:', errorDescription);
failLoadCount2++;
if (failLoadCount2 <= maxRetries2) {
console.log(`页面加载失败,${retryDelay2}ms后进行第${failLoadCount2}次重试...`);
setTimeout(() => {
newWindow.reload();
}, retryDelay2);
} else {
console.error('页面加载失败次数超过最大重试次数');
}
});
// 页面加载成功时重置失败计数
newWindow.webContents.on('did-finish-load', () => {
if (failLoadCount2 > 0) {
console.log('页面加载成功,重置失败计数');
failLoadCount2 = 0;
}
}); });
return 'success'; return 'success';

View File

@@ -168,18 +168,57 @@ export async function createWindow() {
mainWindow.loadURL(h5_client_url) mainWindow.loadURL(h5_client_url)
// 监听页面加载失败事件 // 监听页面加载失败事件
mainWindow.webContents.on('did-fail-load', (event, errorCode, errorDescription, validatedURL) => { let failLoadCount = 0;
logger.error(`主窗口页面加载失败: code=${errorCode}, desc=${errorDescription}, url=${validatedURL}`) const maxRetries = 3;
// 跳转到网络错误页面 const retryDelay = 2000; // 2秒后重试
mainWindow.webContents.on('did-fail-load', async (event, errorCode, errorDescription, validatedURL) => {
logger.error(`主窗口页面加载失败: code=${errorCode}, desc=${errorDescription}, url=${validatedURL}, 失败次数: ${failLoadCount + 1}`)
// 增加失败计数
failLoadCount++;
if (failLoadCount <= maxRetries) {
logger.info(`页面加载失败,${retryDelay}ms后进行第${failLoadCount}次重试...`);
setTimeout(async () => {
try {
const { checkNetworkConnection } = await import('./utils/networkUtils.js');
const isApiOk = await checkNetworkConnection();
if (isApiOk) {
logger.info('接口正常,重新加载页面');
mainWindow.reload();
} else {
logger.warn('接口异常,跳转到网络错误页面');
jumpToNetworkErrorPage();
}
} catch (error) {
logger.error('重试过程中出错:', error);
jumpToNetworkErrorPage();
}
}, retryDelay);
} else {
// 超过最大重试次数,跳转到网络错误页面
logger.error(`页面加载失败次数超过${maxRetries}次,跳转到网络错误页面`);
jumpToNetworkErrorPage();
}
});
// 页面加载成功时重置失败计数
mainWindow.webContents.on('did-finish-load', () => {
if (failLoadCount > 0) {
logger.info('页面加载成功,重置失败计数');
failLoadCount = 0;
}
});
// 跳转到网络错误页面的函数
function jumpToNetworkErrorPage() {
if (is.dev && process.env['ELECTRON_RENDERER_URL']) { if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'] + '/#/network_error') mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'] + '/#/network_error')
} else { } else {
mainWindow.loadFile(join(__dirname, '../renderer/index.html'), { hash: '/network_error' }) mainWindow.loadFile(join(__dirname, '../renderer/index.html'), { hash: '/network_error' })
} }
}
})
// 接口超过30分钟不活动则退出登录 // 接口超过30分钟不活动则退出登录
await tokenExpireTimer() await tokenExpireTimer()
@@ -457,7 +496,50 @@ export async function createNewWindow(url, access_token, refresh_token,sandbox=f
difyfullScreenWindow.loadURL(url) difyfullScreenWindow.loadURL(url)
// 添加重试机制的错误处理
let failLoadCount = 0;
const maxRetries = 3;
const retryDelay = 2000;
difyfullScreenWindow.webContents.on('did-fail-load', async (event, errorCode, errorDescription, validatedURL) => {
logger.error(`全屏窗口页面加载失败: code=${errorCode}, desc=${errorDescription}, url=${validatedURL}, 失败次数: ${failLoadCount + 1}`)
failLoadCount++;
if (failLoadCount <= maxRetries) {
logger.info(`全屏窗口页面加载失败,${retryDelay}ms后进行第${failLoadCount}次重试...`);
setTimeout(async () => {
try {
// 在重试前先检查网络连接
const { checkDefaultClientConnection } = await import('./utils/networkUtils.js');
const isNetworkConnected = await checkDefaultClientConnection(3000);
if (isNetworkConnected) {
logger.info('网络连接正常,重新加载全屏窗口页面');
difyfullScreenWindow.reload();
} else {
logger.warn('网络连接异常,关闭全屏窗口');
difyfullScreenWindow.close();
}
} catch (error) {
logger.error('全屏窗口重试过程中出错:', error);
difyfullScreenWindow.close();
}
}, retryDelay);
} else {
logger.error(`全屏窗口页面加载失败次数超过${maxRetries}次,关闭窗口`);
difyfullScreenWindow.close();
}
});
// 页面加载成功时重置失败计数
difyfullScreenWindow.webContents.on('did-finish-load', () => {
if (failLoadCount > 0) {
logger.info('全屏窗口页面加载成功,重置失败计数');
failLoadCount = 0;
}
});
} }
@@ -517,12 +599,55 @@ export function createDrageWindow() {
logger.log(h5_client_url) logger.log(h5_client_url)
drageWindow.loadURL(h5_client_url) drageWindow.loadURL(h5_client_url)
// 添加重试机制的错误处理
let drageFailLoadCount = 0;
const drageMaxRetries = 2;
const drageRetryDelay = 1000;
drageWindow.webContents.on('did-fail-load', async (event, errorCode, errorDescription, validatedURL) => {
logger.error(`悬浮窗口页面加载失败: code=${errorCode}, desc=${errorDescription}, url=${validatedURL}, 失败次数: ${drageFailLoadCount + 1}`)
drageFailLoadCount++;
if (drageFailLoadCount <= drageMaxRetries) {
logger.info(`悬浮窗口页面加载失败,${drageRetryDelay}ms后进行第${drageFailLoadCount}次重试...`);
setTimeout(async () => {
try {
// 在重试前先检查网络连接
const { checkDefaultClientConnection } = await import('./utils/networkUtils.js');
const isNetworkConnected = await checkDefaultClientConnection(3000);
if (isNetworkConnected) {
logger.info('网络连接正常,重新加载悬浮窗口页面');
drageWindow.reload();
} else {
logger.warn('网络连接异常,隐藏悬浮窗口');
drageWindow.hide();
}
} catch (error) {
logger.error('悬浮窗口重试过程中出错:', error);
drageWindow.hide();
}
}, drageRetryDelay);
} else {
logger.error(`悬浮窗口页面加载失败次数超过${drageMaxRetries}次,隐藏窗口`);
drageWindow.hide();
}
});
// 页面加载成功时重置失败计数
drageWindow.webContents.on('did-finish-load', () => {
if (drageFailLoadCount > 0) {
logger.info('悬浮窗口页面加载成功,重置失败计数');
drageFailLoadCount = 0;
}
});
const { width: screenWidth, height: screenHeight } = screen.getPrimaryDisplay().workAreaSize const { width: screenWidth, height: screenHeight } = screen.getPrimaryDisplay().workAreaSize
drageWindow.setPosition(screenWidth - drageWindow.getSize()[0] -100, screenHeight - drageWindow.getSize()[1] - 100) drageWindow.setPosition(screenWidth - drageWindow.getSize()[0] -100, screenHeight - drageWindow.getSize()[1] - 100)
} }
export async function tokenExpireTimer(){ export async function tokenExpireTimer(){
let lastLogTime = 0; // 记录上次打印日志的时间 let lastLogTime = 0; // 记录上次打印日志的时间
const LOG_INTERVAL = 60000; // 日志打印间隔60秒打印一次 const LOG_INTERVAL = 60000; // 日志打印间隔60秒打印一次