From 5607d07586d455e3d1d370137463258beb1e53ab Mon Sep 17 00:00:00 2001 From: cirry <812852553@qq.com> Date: Fri, 10 Apr 2026 15:50:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4eslint=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .prettierrc.json | 4 +- package-lock.json | 1 - package.json | 8 +- src/main/index.js | 34 +++- src/renderer/components/base/LucideIcon.vue | 42 +++++ src/renderer/layouts/DefaultLayout.vue | 193 ++++++++++++++------ src/renderer/main.js | 2 + src/renderer/stores/app.js | 2 +- src/renderer/style.css | 9 + src/renderer/views/home/HomeView.vue | 19 +- 10 files changed, 223 insertions(+), 91 deletions(-) create mode 100644 src/renderer/components/base/LucideIcon.vue diff --git a/.prettierrc.json b/.prettierrc.json index 908da1a..1d97e3f 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,5 +1,5 @@ { - "printWidth": 100, + "printWidth": 120, "tabWidth": 2, "useTabs": false, "semi": true, @@ -8,4 +8,4 @@ "bracketSpacing": true, "arrowParens": "always", "endOfLine": "lf" -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index 603985d..d9dad01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8883,7 +8883,6 @@ "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, diff --git a/package.json b/package.json index 57686c4..980b0e3 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "my-app", - "productName": "my-app", + "name": "Zhiju", + "productName": "Zhiju", "version": "1.0.0", - "description": "My Electron application description", + "description": "Zhiju Ai Assistant", "main": ".vite/build/main.js", "private": true, "scripts": { @@ -16,7 +16,7 @@ "format:check": "prettier --check ." }, "keywords": [], - "author": "houakang", + "author": "zhiju.com.cn", "license": "MIT", "devDependencies": { "@commitlint/cli": "^20.5.0", diff --git a/src/main/index.js b/src/main/index.js index 967d78d..d562d5c 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -1,4 +1,4 @@ -import { app, BrowserWindow, shell, ipcMain } from 'electron'; +import { app, BrowserWindow, shell, ipcMain, Menu } from 'electron'; import path from 'node:path'; import fs from 'node:fs'; import net from 'node:net'; @@ -129,9 +129,7 @@ async function startOpencode() { }); opencodeProcess.stdout?.on('data', (d) => console.log(`[opencode] ${d.toString().trim()}`)); - opencodeProcess.stderr?.on('data', (d) => - console.error(`[opencode error] ${d.toString().trim()}`) - ); + opencodeProcess.stderr?.on('data', (d) => console.error(`[opencode error] ${d.toString().trim()}`)); opencodeProcess.once('error', (e) => console.error('[opencode spawn error]', e)); opencodeProcess.once('close', (code) => { console.log(`[opencode exited] code=${code}`); @@ -203,10 +201,31 @@ function registerIpcHandlers() { // Bonjour ipcMain.handle('bonjour:get-services', () => getDiscoveredServices()); + + // 窗口控制 + ipcMain.on('window:minimize', (event) => { + const win = BrowserWindow.fromWebContents(event.sender); + win?.minimize(); + }); + ipcMain.on('window:maximize', (event) => { + const win = BrowserWindow.fromWebContents(event.sender); + if (win?.isMaximized()) { + win.unmaximize(); + } else { + win?.maximize(); + } + }); + ipcMain.on('window:close', (event) => { + const win = BrowserWindow.fromWebContents(event.sender); + win?.close(); + }); } // ========== 窗口 ========== const createWindow = () => { + // 移除菜单栏,保留窗口边框和原生按钮 + Menu.setApplicationMenu(null); + const mainWindow = new BrowserWindow({ width: 1280, height: 800, @@ -217,10 +236,11 @@ const createWindow = () => { contextIsolation: true, nodeIntegration: false, }, - titleBarStyle: 'hiddenInset', + frame: false, show: false, }); + mainWindow.webContents.openDevTools(); mainWindow.once('ready-to-show', () => mainWindow.show()); mainWindow.webContents.setWindowOpenHandler(({ url }) => { @@ -231,9 +251,7 @@ const createWindow = () => { // 注入 baseUrl,让渲染进程的 getBaseUrl() 能拿到正确端口 mainWindow.webContents.on('did-finish-load', () => { if (opencodePort) { - mainWindow.webContents.executeJavaScript( - `window.__opencodeBaseUrl = 'http://127.0.0.1:${opencodePort}'` - ); + mainWindow.webContents.executeJavaScript(`window.__opencodeBaseUrl = 'http://127.0.0.1:${opencodePort}'`); } }); diff --git a/src/renderer/components/base/LucideIcon.vue b/src/renderer/components/base/LucideIcon.vue new file mode 100644 index 0000000..1097940 --- /dev/null +++ b/src/renderer/components/base/LucideIcon.vue @@ -0,0 +1,42 @@ + + + + + + diff --git a/src/renderer/layouts/DefaultLayout.vue b/src/renderer/layouts/DefaultLayout.vue index fff0dc8..0819bf2 100644 --- a/src/renderer/layouts/DefaultLayout.vue +++ b/src/renderer/layouts/DefaultLayout.vue @@ -1,83 +1,156 @@ - - -