From c467f54dab8ad7869f5c5eeb89653571baef91f1 Mon Sep 17 00:00:00 2001 From: DEV_DSW <562304744@qq.com> Date: Mon, 22 Dec 2025 11:24:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=81=94=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- global.d.ts | 3 +- src/common/constants.ts | 1 + src/main/service/window-service/index.ts | 16 ++++++--- src/preload.ts | 3 +- src/renderer/main.ts | 4 +++ src/renderer/router/index.ts | 34 +++++------------- src/renderer/views/home/index.vue | 2 +- src/renderer/views/login/index.ts | 44 ++++++++++++++++++------ src/renderer/views/login/index.vue | 12 +++---- vite.renderer.config.ts | 1 + 10 files changed, 71 insertions(+), 49 deletions(-) diff --git a/global.d.ts b/global.d.ts index ca97b9b..1948951 100644 --- a/global.d.ts +++ b/global.d.ts @@ -60,7 +60,8 @@ declare global { isWindowMaximized: () => Promise, viewIsReady: () => void app: { - setFrameless: (route?: string) => void + setFrameless: (route?: string) => void, + loadPage: (page: string) => void }, tabs: { create: (url?: string) => void, diff --git a/src/common/constants.ts b/src/common/constants.ts index 297c68c..a958ff3 100644 --- a/src/common/constants.ts +++ b/src/common/constants.ts @@ -7,6 +7,7 @@ export enum IPC_EVENTS { WINDOW_CLOSE = 'window-close', IS_WINDOW_MAXIMIZED = 'is-window-maximized', APP_SET_FRAMELESS = 'app:set-frameless', + APP_LOAD_PAGE = 'app:load-page', TAB_CREATE = 'tab:create', TAB_LIST = 'tab:list', TAB_NAVIGATE = 'tab:navigate', diff --git a/src/main/service/window-service/index.ts b/src/main/service/window-service/index.ts index 3160ff1..2ff29f0 100644 --- a/src/main/service/window-service/index.ts +++ b/src/main/service/window-service/index.ts @@ -90,6 +90,10 @@ class WindowService { ipcMain.on(IPC_EVENTS.WINDOW_MINIMIZE, handleMinimizeWindow); ipcMain.on(IPC_EVENTS.WINDOW_MAXIMIZE, handleMaximizeWindow); ipcMain.handle(IPC_EVENTS.IS_WINDOW_MAXIMIZED, handleIsWindowMaximized); + ipcMain.handle(IPC_EVENTS.APP_LOAD_PAGE, (e: IpcMainInvokeEvent, page: string) => { + const win = BrowserWindow.fromWebContents(e.sender); + if (win) this._loadPage(win, page); + }); } public static getInstance(): WindowService { @@ -211,12 +215,16 @@ class WindowService { } } - private _loadWindowTemplate(window: BrowserWindow, name: WindowNames) { - // 检查是否存在开发服务器 URL,若存在则表示处于开发环境 + private _loadPage(window: BrowserWindow, pageName: string) { if (MAIN_WINDOW_VITE_DEV_SERVER_URL) { - return window.loadURL(`${MAIN_WINDOW_VITE_DEV_SERVER_URL}${'/html/' + (name === 'main' ? '' : name)}`); + return window.loadURL(`${MAIN_WINDOW_VITE_DEV_SERVER_URL}/html/${pageName}.html`); } - window.loadFile(path.join(__dirname, `../renderer/${MAIN_WINDOW_VITE_NAME}/html/${name === 'main' ? 'login' : name}.html`)); + window.loadFile(path.join(__dirname, `../renderer/${MAIN_WINDOW_VITE_NAME}/html/${pageName}.html`)); + } + + private _loadWindowTemplate(window: BrowserWindow, name: WindowNames) { + const page = name === 'main' ? 'login' : name; + this._loadPage(window, page); } diff --git a/src/preload.ts b/src/preload.ts index e4d87eb..271aae7 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -16,7 +16,8 @@ const api: WindowApi = { viewIsReady: () => ipcRenderer.send(IPC_EVENTS.RENDERER_IS_READY), app: { - setFrameless: (route?: string) => ipcRenderer.invoke(IPC_EVENTS.APP_SET_FRAMELESS, route) + setFrameless: (route?: string) => ipcRenderer.invoke(IPC_EVENTS.APP_SET_FRAMELESS, route), + loadPage: (page: string) => ipcRenderer.invoke(IPC_EVENTS.APP_LOAD_PAGE, page) }, tabs: { diff --git a/src/renderer/main.ts b/src/renderer/main.ts index ed0ca32..69c1e7b 100644 --- a/src/renderer/main.ts +++ b/src/renderer/main.ts @@ -3,8 +3,12 @@ import { createPinia } from "pinia" import errorHandler from "@utils/errorHandler" import router from "./router" import App from "./App.vue" + +// 引入 Element Plus 组件库 import ElementPlus from 'element-plus' import locale from 'element-plus/es/locale/lang/zh-cn' + +// 引入 i18n 插件 import i18n from './i18n' // import './permission' diff --git a/src/renderer/router/index.ts b/src/renderer/router/index.ts index 0e6fecd..8d8bc14 100644 --- a/src/renderer/router/index.ts +++ b/src/renderer/router/index.ts @@ -2,11 +2,15 @@ import { createRouter, createMemoryHistory } from "vue-router"; const routes = [ { - path: "/", - component: () => import("@renderer/views/login/index.vue"), - name: "Login", - meta: { requiresAuth: false }, - } + path: '/', + redirect: '/home' + }, + { + path: "/home", + component: () => import("@renderer/views/home/index.vue"), + name: "Home", + meta: { requiresAuth: true }, + }, ]; const router = createRouter({ @@ -21,24 +25,4 @@ const router = createRouter({ }, }); -// router.beforeEach((to: any, from: any, next: any) => { -// const token = localStorage.getItem("token"); -// if (to.meta && (to.meta as any).requiresAuth && !token) { -// next({ path: "/login" }); -// return; -// } - -// if (token && to.path === "/login") { -// next({ path: "/home" }); -// return; -// } - -// if (token && to.path === "/") { -// next({ path: "/home" }); -// return; -// } - -// next(); -// }); - export default router; diff --git a/src/renderer/views/home/index.vue b/src/renderer/views/home/index.vue index 8075179..60ac872 100644 --- a/src/renderer/views/home/index.vue +++ b/src/renderer/views/home/index.vue @@ -1,5 +1,5 @@ diff --git a/src/renderer/views/login/index.ts b/src/renderer/views/login/index.ts index 5f12f73..b5ad8d5 100644 --- a/src/renderer/views/login/index.ts +++ b/src/renderer/views/login/index.ts @@ -1,16 +1,38 @@ -import '@renderer/styles/index.css' - +import { createApp, type Plugin } from "vue" import errorHandler from '@utils/errorHandler' + +// 引入 Element Plus 组件库 +import ElementPlus from 'element-plus' +import locale from 'element-plus/es/locale/lang/zh-cn' + +// 引入 i18n 插件 import i18n from '@renderer/i18n' -import HeaderBar from '@renderer/components/HeaderBar/index.vue' -import DragRegion from '@renderer/components/DragRegion/index.vue' import Login from './index.vue' -createApp(Login) - .use(i18n) - .use(createPinia()) - .use(errorHandler) - .component('HeaderBar', HeaderBar) - .component('DragRegion', DragRegion) - .mount('#app') +// 样式文件隔离 +import '@renderer/styles/index.css' +import 'element-plus/dist/index.css' + +// 引入全局组件 +import HeaderBar from '@components/HeaderBar/index.vue' +import DragRegion from '@components/DragRegion/index.vue' + +const components: Plugin = (app) => { + app.component('HeaderBar', HeaderBar); + app.component('DragRegion', DragRegion); +} + +// 创建 Vue 应用实例 +const app = createApp(Login); +const pinia = createPinia(); + +// 使用 Pinia 状态管理 +app.use(pinia); +app.use(ElementPlus, { locale }) +app.use(components) +app.use(i18n) +app.use(errorHandler) + +// 挂载应用到 DOM +app.mount("#app"); diff --git a/src/renderer/views/login/index.vue b/src/renderer/views/login/index.vue index 56190c0..0416a2a 100644 --- a/src/renderer/views/login/index.vue +++ b/src/renderer/views/login/index.vue @@ -32,7 +32,8 @@
密码
- + @@ -75,12 +76,12 @@ -
+
- + @@ -122,8 +123,7 @@ const onSubmit = async () => { try { userStore.login(form).then(() => { - // window.location.href = 'index.html' - console.log(form) + window.api.app.loadPage('index'); }) } finally { getVerifyCode() diff --git a/vite.renderer.config.ts b/vite.renderer.config.ts index b40d6a3..d907b1a 100644 --- a/vite.renderer.config.ts +++ b/vite.renderer.config.ts @@ -25,6 +25,7 @@ export default defineConfig(async () => { resolve(__dirname, 'html/index.html'), resolve(__dirname, 'html/dialog.html'), resolve(__dirname, 'html/setting.html'), + resolve(__dirname, 'html/login.html'), ] } },