diff --git a/electron-vue-template/public/icon/icon.png b/electron-vue-template/public/icon/icon.png index d826be6..d007c7e 100644 Binary files a/electron-vue-template/public/icon/icon.png and b/electron-vue-template/public/icon/icon.png differ diff --git a/electron-vue-template/src/main/main.ts b/electron-vue-template/src/main/main.ts index e16b702..521bdc9 100644 --- a/electron-vue-template/src/main/main.ts +++ b/electron-vue-template/src/main/main.ts @@ -250,6 +250,7 @@ function createWindow() { width: 1280, height: 800, show: false, // + frame: false, autoHideMenuBar: true, icon: getIconPath(), backgroundColor: '#f5f5f5', @@ -726,6 +727,33 @@ ipcMain.handle('set-launch-config', (event, launchConfig: { autoLaunch: boolean; // 刷新页面 ipcMain.handle('reload', () => mainWindow?.webContents.reload()); +// 窗口控制 API +ipcMain.handle('window-minimize', () => { + if (mainWindow && !mainWindow.isDestroyed()) { + mainWindow.minimize(); + } +}); + +ipcMain.handle('window-maximize', () => { + if (mainWindow && !mainWindow.isDestroyed()) { + if (mainWindow.isMaximized()) { + mainWindow.unmaximize(); + } else { + mainWindow.maximize(); + } + } +}); + +ipcMain.handle('window-close', () => { + if (mainWindow && !mainWindow.isDestroyed()) { + mainWindow.close(); + } +}); + +ipcMain.handle('window-is-maximized', () => { + return mainWindow && !mainWindow.isDestroyed() ? mainWindow.isMaximized() : false; +}); + async function getFileSize(url: string): Promise { return new Promise((resolve) => { diff --git a/electron-vue-template/src/main/preload.ts b/electron-vue-template/src/main/preload.ts index a3cbde2..0bd3117 100644 --- a/electron-vue-template/src/main/preload.ts +++ b/electron-vue-template/src/main/preload.ts @@ -37,6 +37,12 @@ const electronAPI = { // 刷新页面 API reload: () => ipcRenderer.invoke('reload'), + // 窗口控制 API + windowMinimize: () => ipcRenderer.invoke('window-minimize'), + windowMaximize: () => ipcRenderer.invoke('window-maximize'), + windowClose: () => ipcRenderer.invoke('window-close'), + windowIsMaximized: () => ipcRenderer.invoke('window-is-maximized'), + onDownloadProgress: (callback: (progress: any) => void) => { ipcRenderer.removeAllListeners('download-progress') ipcRenderer.on('download-progress', (event, progress) => callback(progress)) diff --git a/electron-vue-template/src/renderer/App.vue b/electron-vue-template/src/renderer/App.vue index fadd3c8..02bfefb 100644 --- a/electron-vue-template/src/renderer/App.vue +++ b/electron-vue-template/src/renderer/App.vue @@ -629,7 +629,8 @@ onUnmounted(() => { @open-device="openDeviceManager" @open-settings="openSettings" @open-account-manager="openAccountManager" - @check-update="handleCheckUpdate"/> + @check-update="handleCheckUpdate" + @show-login="showAuthDialog = true"/>
{ align-items: center; justify-content: center; padding: 12px 0; - border-bottom: 1px solid #e8eaec; margin: 0 0 12px 0; } .user-avatar img { - width: 50px; - height: 50px; - border-radius: 50%; + width: 90px; + object-fit: contain; background: #ffffff; } @@ -997,14 +996,13 @@ onUnmounted(() => { .vip-status-card { margin-top: auto; width: 100%; - min-height: 64px; border-radius: 8px; display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; box-sizing: border-box; - background: linear-gradient(135deg, #FFFAF0 0%, #FFE4B5 50%, #FFD700 100%); + background: linear-gradient(90deg, #FFF7CC 0%, #FFEB80 100%); box-shadow: 0 2px 8px rgba(255, 215, 0, 0.15); transition: all 0.3s ease; position: relative; @@ -1025,7 +1023,7 @@ onUnmounted(() => { .vip-status-card.vip-active, .vip-status-card.vip-normal, .vip-status-card.vip-warning { - background: linear-gradient(135deg, #FFFAF0 0%, #FFE4B5 50%, #FFD700 100%); + background: linear-gradient(90deg, #FFF7CC 0%, #FFEB80 100%); box-shadow: 0 2px 8px rgba(255, 215, 0, 0.15); } diff --git a/electron-vue-template/src/renderer/components/amazon/AmazonDashboard.vue b/electron-vue-template/src/renderer/components/amazon/AmazonDashboard.vue index 5cf7430..0ff09a9 100644 --- a/electron-vue-template/src/renderer/components/amazon/AmazonDashboard.vue +++ b/electron-vue-template/src/renderer/components/amazon/AmazonDashboard.vue @@ -492,8 +492,8 @@ onMounted(async () => { @@ -229,7 +362,6 @@ function handleCommand(command: string) { padding: 4px 0 !important; border-radius: 12px !important; margin-top: 4px !important; - margin-right: 8px !important; } .settings-dropdown .username-item { diff --git a/electron-vue-template/src/renderer/components/rakuten/RakutenDashboard.vue b/electron-vue-template/src/renderer/components/rakuten/RakutenDashboard.vue index 8fe3077..b3e8299 100644 --- a/electron-vue-template/src/renderer/components/rakuten/RakutenDashboard.vue +++ b/electron-vue-template/src/renderer/components/rakuten/RakutenDashboard.vue @@ -651,19 +651,16 @@ onMounted(loadLatest) .rakuten-root { position: absolute; inset: 0; - background: #f5f5f5; - padding: 12px; + background: #fff; box-sizing: border-box; } .main-container { - background: #fff; - border-radius: 4px; - padding: 15px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); height: 100%; display: flex; flex-direction: column; + padding: 12px; + box-sizing: border-box; } .body-layout { display: flex; gap: 12px; height: 100%; } @@ -859,11 +856,10 @@ onMounted(loadLatest) .pagination-fixed { flex-shrink: 0; - padding: 8px 12px; + padding: 8px 12px 0 12px; background: #fff; display: flex; justify-content: flex-end; - margin-top: 8px; } .pagination-fixed :deep(.el-pager li.is-active) { diff --git a/electron-vue-template/src/renderer/components/zebra/ZebraDashboard.vue b/electron-vue-template/src/renderer/components/zebra/ZebraDashboard.vue index e34350b..ed024bc 100644 --- a/electron-vue-template/src/renderer/components/zebra/ZebraDashboard.vue +++ b/electron-vue-template/src/renderer/components/zebra/ZebraDashboard.vue @@ -575,8 +575,8 @@ export default {