feat: 登录接口对接
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
import type { Plugin } from 'vue'
|
||||
import logger from './logger'
|
||||
|
||||
export const errorHandler: Plugin = (app) => {
|
||||
export const errorHandler: Plugin = (app) => {
|
||||
app.config.errorHandler = (err, instance, info) => {
|
||||
logger.error('Vue error:', err, instance, info);
|
||||
// 过滤掉无法序列化的 Vue 实例对象
|
||||
logger.error('Vue error:', err, info);
|
||||
};
|
||||
|
||||
window.onerror = (message, source, lineno, colno, error) => {
|
||||
|
||||
@@ -1,5 +1,67 @@
|
||||
const safeStringify = (arg: any) => {
|
||||
try {
|
||||
// 处理 Error 对象
|
||||
if (arg instanceof Error) {
|
||||
return {
|
||||
message: arg.message,
|
||||
stack: arg.stack,
|
||||
name: arg.name
|
||||
}
|
||||
}
|
||||
// 简单值直接返回
|
||||
if (typeof arg !== 'object' || arg === null) {
|
||||
return arg
|
||||
}
|
||||
// 处理 Vue 响应式对象(Proxy)
|
||||
if (arg?.__v_isRef || arg?.__v_isReactive || arg?.__v_isReadonly) {
|
||||
// 尝试解包 Proxy/Ref
|
||||
try {
|
||||
const raw = JSON.parse(JSON.stringify(arg))
|
||||
return raw
|
||||
} catch (e) {
|
||||
return '[Vue Reactive Object]'
|
||||
}
|
||||
}
|
||||
// 尝试深拷贝,如果失败则说明包含不可序列化对象
|
||||
const raw = JSON.parse(JSON.stringify(arg))
|
||||
return raw
|
||||
} catch (e) {
|
||||
// 序列化失败,返回字符串描述
|
||||
return String(arg)
|
||||
}
|
||||
}
|
||||
|
||||
export const logger = window.api.logger ?? console;
|
||||
// 缓存原始 console 方法,防止递归调用和保持控制台输出
|
||||
const originalConsole = {
|
||||
debug: console.debug.bind(console),
|
||||
log: console.log.bind(console),
|
||||
info: console.info.bind(console),
|
||||
warn: console.warn.bind(console),
|
||||
error: console.error.bind(console),
|
||||
}
|
||||
|
||||
const createSafeLogger = (originalLogger: any) => {
|
||||
return {
|
||||
debug: (message: string, ...meta: any[]) => {
|
||||
originalConsole.debug(message, ...meta)
|
||||
originalLogger.debug(String(message), ...meta.map(safeStringify))
|
||||
},
|
||||
info: (message: string, ...meta: any[]) => {
|
||||
originalConsole.info(message, ...meta)
|
||||
originalLogger.info(String(message), ...meta.map(safeStringify))
|
||||
},
|
||||
warn: (message: string, ...meta: any[]) => {
|
||||
originalConsole.warn(message, ...meta)
|
||||
originalLogger.warn(String(message), ...meta.map(safeStringify))
|
||||
},
|
||||
error: (message: string, ...meta: any[]) => {
|
||||
originalConsole.error(message, ...meta)
|
||||
originalLogger.error(String(message), ...meta.map(safeStringify))
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
export const logger = window.api.logger ? createSafeLogger(window.api.logger) : console
|
||||
|
||||
if (window.api.logger) {
|
||||
console.debug = logger.debug;
|
||||
|
||||
Reference in New Issue
Block a user