From a5c1cf38f63fda28b1bd9d670b59daef6a6010ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E6=B5=A9?= Date: Tue, 17 Dec 2024 09:21:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=20PrimeVue=20=E6=8F=92=E4=BB=B6=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E5=92=8C=E8=B7=AF=E7=94=B1=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.ts | 10 ++++++++++ src/plugins/primevue.ts | 21 ++++++++++----------- src/plugins/router.ts | 7 +++++-- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/main.ts b/src/main.ts index 5e5a0f5..375722c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -20,6 +20,16 @@ async function init() { .use(createHead()) .use(createPinia().use(piniaPluginPersistedstate)); + app.config.errorHandler = (error, instance, info) => { + console.error('Global error:', error); + console.error('Component:', instance); + console.error('Error Info:', info); + // 这里你可以: + // 1. 发送错误到日志服务 + // 2. 显示全局错误提示 + // 3. 进行错误分析和处理 + }; + setupVueI18n(app); setupPrimeVue(app); setupRouter(app); diff --git a/src/plugins/primevue.ts b/src/plugins/primevue.ts index 00f91cf..90a147e 100644 --- a/src/plugins/primevue.ts +++ b/src/plugins/primevue.ts @@ -1,13 +1,19 @@ /** * 需要把 放在 App.vue 的 template 中 */ +import 'primeicons/primeicons.css'; import '../assets/reset-primevue.css'; +import Aura from '@primevue/themes/aura'; +import zhCN from 'primelocale/zh-CN.json'; +import PrimeVue from 'primevue/config'; + // ======================================================================== // ========================== ConfirmationService ========================= // ======================================================================== // @ts-expect-error - Ignore missing types import ConfirmationEventBus from 'primevue/confirmationeventbus'; + import type { ConfirmationOptions } from 'primevue/confirmationoptions'; interface HConfirmationOptions extends ConfirmationOptions { rejectProps?: import('primevue/button').ButtonProps; @@ -27,6 +33,7 @@ const ConfirmationService = { // ======================================================================== // @ts-expect-error - Ignore missing types import ToastEventBus from 'primevue/toasteventbus'; + import type { ToastServiceMethods } from 'primevue/toastservice'; // https://github.com/primefaces/primevue/blob/61929eae7526015af0362fc5889f2af7527403d1/packages/primevue/src/toastservice/ToastService.js const ToastService: ToastServiceMethods = { @@ -49,7 +56,9 @@ const ToastService: ToastServiceMethods = { // ======================================================================== // @ts-expect-error - Ignore missing types import DynamicDialogEventBus from 'primevue/dynamicdialogeventbus'; + import type { DialogServiceMethods } from 'primevue/dialogservice'; + // https://github.com/primefaces/primevue/blob/18367429f624285ff32d0ef775c1825a43a02fb1/packages/primevue/src/dialogservice/DialogService.js#L7 const DialogService: DialogServiceMethods = { open: (content, options) => { @@ -73,10 +82,6 @@ function useDialogRef() { return inject('dialogRef'); } -import Aura from '@primevue/themes/aura'; -import zhCN from 'primelocale/zh-CN.json'; -import PrimeVue from 'primevue/config'; -import 'primeicons/primeicons.css'; function setupPrimeVue(app: import('vue').App) { app.use(PrimeVue, { locale: { @@ -94,10 +99,4 @@ function setupPrimeVue(app: import('vue').App) { }); } -export { - ConfirmationService, - ToastService, - DialogService, - useDialogRef, - setupPrimeVue, // -}; +export { ConfirmationService, DialogService, setupPrimeVue, ToastService, useDialogRef }; diff --git a/src/plugins/router.ts b/src/plugins/router.ts index fae4892..fdd36aa 100644 --- a/src/plugins/router.ts +++ b/src/plugins/router.ts @@ -3,7 +3,7 @@ import { createLogGuard, createProgressGuard, createStackGuard } from 'utils4u/v import { createRouter, createWebHistory } from 'vue-router'; import { handleHotUpdate, routes } from 'vue-router/auto-routes'; -export const router = createRouter({ +const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes, strict: true, @@ -11,10 +11,11 @@ export const router = createRouter({ router.onError((error) => { console.debug('🚨 [router error]: ', error); }); + if (import.meta.hot) handleHotUpdate(router); if ($__DEV__) Object.assign(window, { router }); -export function setupRouter(app: import('vue').App) { +function setupRouter(app: import('vue').App) { app // Register the plugin before the router .use(DataLoaderPlugin, { router }) @@ -26,3 +27,5 @@ export function setupRouter(app: import('vue').App) { createLogGuard(router); Object.assign(window, { stack: createStackGuard(router) }); } + +export { router, setupRouter };