From 0d6ffdef8346cabddb67beafaeb209acd2eafa80 Mon Sep 17 00:00:00 2001 From: duanshuwen Date: Fri, 19 Dec 2025 13:10:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- global.d.ts | 2 +- html/dialog.html | 16 ++++ index.html => html/index.html | 2 +- html/loading.html | 16 ++++ html/login.html | 16 ++++ html/setting.html | 16 ++++ src/main/main.ts | 4 +- src/main/providers/OpenAIProvider.ts | 2 +- src/main/providers/index.ts | 4 +- .../config-service/index.ts | 2 +- src/main/{modules => service}/ipc/index.ts | 0 src/main/{modules => service}/logger/index.ts | 0 .../menu-service/index.ts | 4 +- .../{modules => service}/tab-manager/index.ts | 0 .../theme-service/index.ts | 4 +- .../tray-service/index.ts | 6 +- .../window-service/index.ts | 10 ++- src/main/utils/index.ts | 4 +- src/main/wins/dialog.ts | 2 +- src/main/wins/main.ts | 10 +-- src/main/wins/setting.ts | 2 +- src/renderer/router/index.ts | 90 ++++--------------- src/renderer/utils/errorHandler.ts | 18 ++++ src/renderer/views/dialog/index.ts | 15 ++++ src/renderer/views/dialog/index.vue | 5 ++ src/renderer/views/loading/index.ts | 16 ++++ src/renderer/views/loading/index.vue | 5 ++ src/renderer/views/login/index.ts | 16 ++++ src/renderer/views/setting/index.ts | 15 ++++ tsconfig.app.json | 2 +- tsconfig.json | 2 +- vite.main.config.ts | 2 +- vite.renderer.config.ts | 13 +++ 33 files changed, 219 insertions(+), 102 deletions(-) create mode 100644 html/dialog.html rename index.html => html/index.html (87%) create mode 100644 html/loading.html create mode 100644 html/login.html create mode 100644 html/setting.html rename src/main/{modules => service}/config-service/index.ts (98%) rename src/main/{modules => service}/ipc/index.ts (100%) rename src/main/{modules => service}/logger/index.ts (100%) rename src/main/{modules => service}/menu-service/index.ts (97%) rename src/main/{modules => service}/tab-manager/index.ts (100%) rename src/main/{modules => service}/theme-service/index.ts (93%) rename src/main/{modules => service}/tray-service/index.ts (94%) rename src/main/{modules => service}/window-service/index.ts (96%) create mode 100644 src/renderer/utils/errorHandler.ts create mode 100644 src/renderer/views/dialog/index.ts create mode 100644 src/renderer/views/dialog/index.vue create mode 100644 src/renderer/views/loading/index.ts create mode 100644 src/renderer/views/loading/index.vue create mode 100644 src/renderer/views/login/index.ts create mode 100644 src/renderer/views/setting/index.ts diff --git a/global.d.ts b/global.d.ts index 91431bb..0943544 100644 --- a/global.d.ts +++ b/global.d.ts @@ -121,7 +121,7 @@ declare global { } declare module "@store/*"; -declare module "@modules/*"; +declare module "@service/*"; declare module "@utils/*"; declare module "@assets/images/*"; declare module "@constant/*"; diff --git a/html/dialog.html b/html/dialog.html new file mode 100644 index 0000000..f871326 --- /dev/null +++ b/html/dialog.html @@ -0,0 +1,16 @@ + + + + + NIANXX + + + + +
+ + + diff --git a/index.html b/html/index.html similarity index 87% rename from index.html rename to html/index.html index ef53d65..f141c3e 100644 --- a/index.html +++ b/html/index.html @@ -11,6 +11,6 @@
- + diff --git a/html/loading.html b/html/loading.html new file mode 100644 index 0000000..1bd5926 --- /dev/null +++ b/html/loading.html @@ -0,0 +1,16 @@ + + + + + NIANXX + + + + +
+ + + diff --git a/html/login.html b/html/login.html new file mode 100644 index 0000000..a08a57f --- /dev/null +++ b/html/login.html @@ -0,0 +1,16 @@ + + + + + NIANXX + + + + +
+ + + diff --git a/html/setting.html b/html/setting.html new file mode 100644 index 0000000..23e9991 --- /dev/null +++ b/html/setting.html @@ -0,0 +1,16 @@ + + + + + NIANXX + + + + +
+ + + diff --git a/src/main/main.ts b/src/main/main.ts index 68cd996..0c297dd 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -1,8 +1,8 @@ import { app, BrowserWindow } from 'electron' import { setupWindows } from '@main/wins' import started from 'electron-squirrel-startup' -import configManager from '@modules/config-service' -import logManager from '@modules/logger' +import configManager from '@main/service/config-service' +import logManager from '@main/service/logger' import { CONFIG_KEYS } from '@common/constants' // Handle creating/removing shortcuts on Windows when installing/uninstalling. diff --git a/src/main/providers/OpenAIProvider.ts b/src/main/providers/OpenAIProvider.ts index 136f526..32ce054 100644 --- a/src/main/providers/OpenAIProvider.ts +++ b/src/main/providers/OpenAIProvider.ts @@ -1,7 +1,7 @@ import { BaseProvider } from "./BaseProvider"; import OpenAI from "openai"; -import logManager from "@modules/logger" +import logManager from "@main/service/logger" function _transformChunk(chunk: OpenAI.Chat.Completions.ChatCompletionChunk): UniversalChunk { diff --git a/src/main/providers/index.ts b/src/main/providers/index.ts index bb06828..f390fef 100644 --- a/src/main/providers/index.ts +++ b/src/main/providers/index.ts @@ -2,8 +2,8 @@ import type { Provider } from "@common/types" import { OpenAIProvider } from "./OpenAIProvider" import { parseOpenAISetting } from '@common/utils' import { decode } from 'js-base64' -import { configManager } from '@modules/config-service' -import { logManager } from '@modules/logger' +import { configManager } from '@main/service/config-service' +import { logManager } from '@main/service/logger' import { CONFIG_KEYS } from "@common/constants" const providers = [ diff --git a/src/main/modules/config-service/index.ts b/src/main/service/config-service/index.ts similarity index 98% rename from src/main/modules/config-service/index.ts rename to src/main/service/config-service/index.ts index 04e14be..37aa0d5 100644 --- a/src/main/modules/config-service/index.ts +++ b/src/main/service/config-service/index.ts @@ -5,7 +5,7 @@ import { debounce, simpleCloneDeep } from '@common/utils' import * as fs from 'fs' import * as path from 'path' -import logManager from '@modules/logger' +import logManager from '@main/service/logger' const DEFAULT_CONFIG: IConfig = { [CONFIG_KEYS.THEME_MODE]: 'system', diff --git a/src/main/modules/ipc/index.ts b/src/main/service/ipc/index.ts similarity index 100% rename from src/main/modules/ipc/index.ts rename to src/main/service/ipc/index.ts diff --git a/src/main/modules/logger/index.ts b/src/main/service/logger/index.ts similarity index 100% rename from src/main/modules/logger/index.ts rename to src/main/service/logger/index.ts diff --git a/src/main/modules/menu-service/index.ts b/src/main/service/menu-service/index.ts similarity index 97% rename from src/main/modules/menu-service/index.ts rename to src/main/service/menu-service/index.ts index 79f39a0..78a5f95 100644 --- a/src/main/modules/menu-service/index.ts +++ b/src/main/service/menu-service/index.ts @@ -2,8 +2,8 @@ import { ipcMain, Menu, type MenuItemConstructorOptions } from 'electron'; import { CONFIG_KEYS, IPC_EVENTS } from '@common/constants'; import { cloneDeep } from '@common/utils'; import { createTranslator } from '@main/utils' -import logManager from '@modules/logger' -import configManager from '@modules/config-service' +import logManager from '@main/service/logger' +import configManager from '@main/service/config-service' let t: ReturnType = createTranslator(); diff --git a/src/main/modules/tab-manager/index.ts b/src/main/service/tab-manager/index.ts similarity index 100% rename from src/main/modules/tab-manager/index.ts rename to src/main/service/tab-manager/index.ts diff --git a/src/main/modules/theme-service/index.ts b/src/main/service/theme-service/index.ts similarity index 93% rename from src/main/modules/theme-service/index.ts rename to src/main/service/theme-service/index.ts index a5290dd..254708c 100644 --- a/src/main/modules/theme-service/index.ts +++ b/src/main/service/theme-service/index.ts @@ -1,6 +1,6 @@ import { BrowserWindow, ipcMain, nativeTheme } from 'electron' -import { configManager } from '@modules/config-service' -import { logManager } from '@modules/logger' +import { configManager } from '@main/service/config-service' +import { logManager } from '@main/service/logger' import { IPC_EVENTS, CONFIG_KEYS } from '@common/constants' class ThemeService { diff --git a/src/main/modules/tray-service/index.ts b/src/main/service/tray-service/index.ts similarity index 94% rename from src/main/modules/tray-service/index.ts rename to src/main/service/tray-service/index.ts index 6b477f7..3560194 100644 --- a/src/main/modules/tray-service/index.ts +++ b/src/main/service/tray-service/index.ts @@ -2,10 +2,10 @@ import { Tray, Menu, ipcMain, app } from 'electron' import { createTranslator, createLogo } from '@main/utils' import { CONFIG_KEYS, IPC_EVENTS, WINDOW_NAMES, MAIN_WIN_SIZE } from '@common/constants' -import logManager from '@modules/logger' +import logManager from '@main/service/logger' // TODO: shortcutManager -import windowManager from '@modules/window-service' -import configManager from '@modules/config-service' +import windowManager from '@main/service/window-service' +import configManager from '@main/service/config-service' let t: ReturnType = createTranslator(); diff --git a/src/main/modules/window-service/index.ts b/src/main/service/window-service/index.ts similarity index 96% rename from src/main/modules/window-service/index.ts rename to src/main/service/window-service/index.ts index b50f650..3c29344 100644 --- a/src/main/modules/window-service/index.ts +++ b/src/main/service/window-service/index.ts @@ -5,9 +5,9 @@ import { BrowserWindow, BrowserWindowConstructorOptions, ipcMain, IpcMainInvokeE import { debounce } from '@common/utils' import { createLogo } from '@main/utils' -import logManager from '@modules/logger' -import configManager from '@modules/config-service' -import themeManager from '@modules/theme-service' +import logManager from '@main/service/logger' +import configManager from '@main/service/config-service' +import themeManager from '@main/service/theme-service' import path from 'node:path'; interface WindowState { @@ -29,7 +29,7 @@ interface SizeOptions { const SHARED_WINDOW_OPTIONS = { titleBarStyle: 'hidden', show: false, - title: 'Diona', + title: 'NIANXX', darkTheme: themeManager.isDark, backgroundColor: themeManager.isDark ? '#2C2C2C' : '#FFFFFF', webPreferences: { @@ -49,6 +49,8 @@ class WindowService { main: { instance: void 0, isHidden: false, onCreate: [], onClosed: [] }, setting: { instance: void 0, isHidden: false, onCreate: [], onClosed: [] }, dialog: { instance: void 0, isHidden: false, onCreate: [], onClosed: [] }, + login: { instance: void 0, isHidden: false, onCreate: [], onClosed: [] }, + loading: { instance: void 0, isHidden: false, onCreate: [], onClosed: [] }, } private constructor() { diff --git a/src/main/utils/index.ts b/src/main/utils/index.ts index 4957d9d..2deafd9 100644 --- a/src/main/utils/index.ts +++ b/src/main/utils/index.ts @@ -1,6 +1,6 @@ import { CONFIG_KEYS } from '@common/constants' -import logManager from '@modules/logger' -import configManager from '@modules/config-service' +import logManager from '@main/service/logger' +import configManager from '@main/service/config-service' import path from 'node:path' import en from '@locales/en.json' diff --git a/src/main/wins/dialog.ts b/src/main/wins/dialog.ts index 13914e2..471517e 100644 --- a/src/main/wins/dialog.ts +++ b/src/main/wins/dialog.ts @@ -1,6 +1,6 @@ import { IPC_EVENTS, WINDOW_NAMES } from '@common/constants' import { BrowserWindow, ipcMain } from 'electron' -import { windowManager } from '@modules/window-service' +import { windowManager } from '@main/service/window-service' export function setupDialogWindow() { let dialogWindow: BrowserWindow | void; diff --git a/src/main/wins/main.ts b/src/main/wins/main.ts index be7d702..a7f2b84 100644 --- a/src/main/wins/main.ts +++ b/src/main/wins/main.ts @@ -2,11 +2,11 @@ import type { BrowserWindow } from 'electron' import { ipcMain } from 'electron'; import { WINDOW_NAMES, MAIN_WIN_SIZE, IPC_EVENTS, MENU_IDS, CONVERSATION_ITEM_MENU_IDS, CONVERSATION_LIST_MENU_IDS, MESSAGE_ITEM_MENU_IDS, CONFIG_KEYS } from '@common/constants' import { createProvider } from '../providers' -import { windowManager } from '@modules/window-service' -import { menuManager } from '@modules/menu-service' -import { logManager } from '@modules/logger' -import { configManager } from '@modules/config-service' -import { trayManager } from '@modules/tray-service' +import { windowManager } from '@main/service/window-service' +import { menuManager } from '@main/service/menu-service' +import { logManager } from '@main/service/logger' +import { configManager } from '@main/service/config-service' +import { trayManager } from '@main/service/tray-service' const handleTray = (minimizeToTray: boolean) => { if (minimizeToTray) { diff --git a/src/main/wins/setting.ts b/src/main/wins/setting.ts index 19e89e3..2d1dee9 100644 --- a/src/main/wins/setting.ts +++ b/src/main/wins/setting.ts @@ -1,6 +1,6 @@ import { IPC_EVENTS, WINDOW_NAMES } from '@common/constants' import { ipcMain } from 'electron' -import { windowManager } from '@modules/window-service' +import { windowManager } from '@main/service/window-service' export function setupSetttingWindow() { ipcMain.on(`${IPC_EVENTS.OPEN_WINDOW}:${WINDOW_NAMES.SETTING}`, () => { diff --git a/src/renderer/router/index.ts b/src/renderer/router/index.ts index 29efcaa..978dc13 100644 --- a/src/renderer/router/index.ts +++ b/src/renderer/router/index.ts @@ -1,18 +1,7 @@ -import { createRouter, createWebHistory } from "vue-router"; +import { createRouter, createMemoryHistory } from "vue-router"; import Layout from '@renderer/layout/index.vue' const routes = [ - { - path: "/login", - name: "Login", - component: () => import("@renderer/views/login/index.vue"), - }, - { - path: "/browser", - name: "Browser", - component: () => import("@renderer/browser/BrowserLayout.vue"), - meta: { requiresAuth: true }, - }, { path: "/", component: Layout, @@ -23,53 +12,12 @@ const routes = [ name: "Home", meta: { requiresAuth: true }, }, - { - path: "stock", - name: "Stock", - component: () => import("@renderer/views/stock/index.vue"), - meta: { requiresAuth: true }, - }, - { - path: "rate", - name: "Rate", - component: () => import("@renderer/views/rate/index.vue"), - meta: { requiresAuth: true }, - }, - { - path: "order", - name: "Order", - component: () => import("@renderer/views/order/index.vue"), - meta: { requiresAuth: true }, - }, - { - path: "more", - name: "More", - component: () => import("@renderer/views/more/index.vue"), - meta: { requiresAuth: true }, - }, - { - path: "setting", - name: "Setting", - component: () => import("@renderer/views/setting/index.vue"), - meta: { requiresAuth: true }, - }, - { - path: "/dashboard", - name: "Dashboard", - component: () => import("@renderer/views/dashboard/index.vue"), - meta: { requiresAuth: true }, - }, ] - }, - { - path: "/about", - name: "About", - component: () => import("@renderer/views/about/index.vue"), - }, + } ]; const router = createRouter({ - history: createWebHistory(), + history: createMemoryHistory(), routes, scrollBehavior(to: any, from: any, savedPosition: any) { if (savedPosition) { @@ -80,24 +28,24 @@ 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; - } +// 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 === "/login") { +// next({ path: "/home" }); +// return; +// } - if (token && to.path === "/") { - next({ path: "/home" }); - return; - } +// if (token && to.path === "/") { +// next({ path: "/home" }); +// return; +// } - next(); -}); +// next(); +// }); export default router; diff --git a/src/renderer/utils/errorHandler.ts b/src/renderer/utils/errorHandler.ts new file mode 100644 index 0000000..5dd4738 --- /dev/null +++ b/src/renderer/utils/errorHandler.ts @@ -0,0 +1,18 @@ +import type { Plugin } from 'vue' +import logger from './logger' + +export const errorHandler: Plugin = (app) => { + app.config.errorHandler = (err, instance, info) => { + logger.error('Vue error:', err, instance, info); + }; + + window.onerror = (message, source, lineno, colno, error) => { + logger.error('Window error:', message, source, lineno, colno, error); + }; + + window.onunhandledrejection = (event) => { + logger.error('Unhandled Promise Rejection:', event); + }; +}; + +export default errorHandler; diff --git a/src/renderer/views/dialog/index.ts b/src/renderer/views/dialog/index.ts new file mode 100644 index 0000000..a075b40 --- /dev/null +++ b/src/renderer/views/dialog/index.ts @@ -0,0 +1,15 @@ +import '@renderer/styles/index.css' + +import errorHandler from '@utils/errorHandler' +import i18n from '@renderer/i18n' +import HeaderBar from '@renderer/components/HeaderBar/index.vue' +import DragRegion from '@renderer/components/DragRegion/index.vue' + +import Dialog from './index.vue' + +createApp(Dialog) + .use(i18n) + .use(errorHandler) + .component('HeaderBar', HeaderBar) + .component('DragRegion', DragRegion) + .mount('#app') diff --git a/src/renderer/views/dialog/index.vue b/src/renderer/views/dialog/index.vue new file mode 100644 index 0000000..6f0fa1b --- /dev/null +++ b/src/renderer/views/dialog/index.vue @@ -0,0 +1,5 @@ + + + diff --git a/src/renderer/views/loading/index.ts b/src/renderer/views/loading/index.ts new file mode 100644 index 0000000..5147c9a --- /dev/null +++ b/src/renderer/views/loading/index.ts @@ -0,0 +1,16 @@ +import '@renderer/styles/index.css' + +import errorHandler from '@utils/errorHandler' +import i18n from '@renderer/i18n' +import HeaderBar from '@renderer/components/HeaderBar/index.vue' +import DragRegion from '@renderer/components/DragRegion/index.vue' + +import Loading from './index.vue' + +createApp(Loading) + .use(i18n) + .use(createPinia()) + .use(errorHandler) + .component('HeaderBar', HeaderBar) + .component('DragRegion', DragRegion) + .mount('#app') diff --git a/src/renderer/views/loading/index.vue b/src/renderer/views/loading/index.vue new file mode 100644 index 0000000..6f0fa1b --- /dev/null +++ b/src/renderer/views/loading/index.vue @@ -0,0 +1,5 @@ + + + diff --git a/src/renderer/views/login/index.ts b/src/renderer/views/login/index.ts new file mode 100644 index 0000000..5f12f73 --- /dev/null +++ b/src/renderer/views/login/index.ts @@ -0,0 +1,16 @@ +import '@renderer/styles/index.css' + +import errorHandler from '@utils/errorHandler' +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') diff --git a/src/renderer/views/setting/index.ts b/src/renderer/views/setting/index.ts new file mode 100644 index 0000000..d035fe4 --- /dev/null +++ b/src/renderer/views/setting/index.ts @@ -0,0 +1,15 @@ +import '@renderer/styles/index.css' + +import errorHandler from '@renderer/utils/errorHandler' +import i18n from '@renderer/i18n' +import HeaderBar from '@renderer/components/HeaderBar/index.vue' +import DragRegion from '@renderer/components/DragRegion/index.vue' + +import Setting from './index.vue' + +createApp(Setting) + .use(i18n) + .use(errorHandler) + .component('HeaderBar', HeaderBar) + .component('DragRegion', DragRegion) + .mount('#app') diff --git a/tsconfig.app.json b/tsconfig.app.json index 92c8515..c07bfc2 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -34,7 +34,7 @@ "@utils/*": ["src/renderer/utils/*"], "@common/*": ["src/common/*"], "@main/*": ["src/main/*"], - "@modules/*": ["src/main/modules/*"], + "@service/*": ["src/main/service/*"], "@locales/*": ["locales/*"], "@hooks/*": ["src/renderer/hooks/*"], "@components/*": ["src/renderer/components/*"], diff --git a/tsconfig.json b/tsconfig.json index e19a9a5..ad40439 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,7 +9,7 @@ "paths": { "@assets/*": ["src/assets/*"], "@common/*": ["src/common/*"], - "@modules/*": ["src/main/modules/*"], + "@service/*": ["src/main/service/*"], "@locales/*": ["locales/*"] } } diff --git a/vite.main.config.ts b/vite.main.config.ts index f347260..5094b1c 100644 --- a/vite.main.config.ts +++ b/vite.main.config.ts @@ -13,7 +13,7 @@ export default defineConfig( async () => { '@common': resolve(__dirname, './src/common'), '@renderer': resolve(__dirname, './src/renderer'), '@locales': resolve(__dirname, 'locales'), - "@modules": resolve(__dirname, "./src/main/modules"), + "@service": resolve(__dirname, "./src/main/service"), }, }, } diff --git a/vite.renderer.config.ts b/vite.renderer.config.ts index 45de5a8..6c4d287 100644 --- a/vite.renderer.config.ts +++ b/vite.renderer.config.ts @@ -16,6 +16,19 @@ export default defineConfig(async () => { css: { transformer: 'lightningcss' as CSSOptions['transformer'], }, + + build: { + target: 'es2022', + publicDir: 'public', + rollupOptions: { + input: [ + resolve(__dirname, 'html/index.html'), + resolve(__dirname, 'html/dialog.html'), + resolve(__dirname, 'html/setting.html'), + resolve(__dirname, 'html/loading.html'), + ] + } + }, resolve: { preserveSymlinks: true,