import { router } from './router'
|
import App from './App.vue'
|
import { NModal } from 'naive-ui'
|
// 同时也修改 NDialog 的全局默认行为,以防止 dialog.create 创建的弹窗点击蒙版关闭
|
|
// 全局配置 NModal 的 maskClosable 默认值为 false,防止点击蒙版关闭弹窗
|
if (NModal && NModal.props && NModal.props.maskClosable) {
|
NModal.props.maskClosable.default = false
|
}
|
// 注意: NDialogProvider 是一个组件,并不是直接包含 dialog options 的地方,但 dialog 会受到 NModal 的影响。
|
|
function getCurrentRouteInfo() {
|
const currentRoute = router.currentRoute.value
|
return {
|
name: currentRoute?.name ?? '',
|
path: currentRoute?.path ?? '',
|
fullPath: currentRoute?.fullPath ?? '',
|
query: currentRoute?.query ?? {},
|
params: currentRoute?.params ?? {},
|
}
|
}
|
|
function logGlobalError(type: string, payload: Record<string, unknown>) {
|
console.error(`[global-error] ${type}`, {
|
...payload,
|
route: getCurrentRouteInfo(),
|
timestamp: new Date().toISOString(),
|
})
|
}
|
|
window.addEventListener('error', (event) => {
|
logGlobalError('window.error', {
|
message: event.message,
|
filename: event.filename,
|
lineno: event.lineno,
|
colno: event.colno,
|
error: event.error,
|
})
|
})
|
|
window.addEventListener('unhandledrejection', (event) => {
|
logGlobalError('window.unhandledrejection', {
|
reason: event.reason,
|
})
|
})
|
|
// 创建应用实例并挂载
|
const app = createApp(App)
|
|
app.config.errorHandler = (error, instance, info) => {
|
logGlobalError('vue.errorHandler', {
|
info,
|
component: instance?.type,
|
error,
|
})
|
}
|
|
app.mount('#app')
|