fix(qr-scanner): robustly handle array/object detection results and guarantee dialog dismissal
- Update QRScannerDialog.vue to handle both array and object detection results in onDetect fallback logic (supports vue-qrcode-reader returning arrays). - Ensure dialog closes and scan is processed for all detection result shapes. - Use arrow function for close() to guarantee correct binding with vue-facing-decorator. - Add enhanced logging for all dialog lifecycle and close/cleanup events. - In WebDialogQRScanner, use direct mount result (not $refs) for dialogComponent to ensure correct instance. - Add sessionId and improved logging for dialog open/close/cleanup lifecycle.
This commit is contained in:
45
src/utils/LogCollector.ts
Normal file
45
src/utils/LogCollector.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
type LogLevel = "log" | "info" | "warn" | "error";
|
||||
|
||||
interface LogEntry {
|
||||
level: LogLevel;
|
||||
message: any[];
|
||||
timestamp: string;
|
||||
}
|
||||
|
||||
class LogCollector {
|
||||
private logs: LogEntry[] = [];
|
||||
private originalConsole: Partial<
|
||||
Record<LogLevel, (..._args: any[]) => void>
|
||||
> = {};
|
||||
|
||||
constructor() {
|
||||
(["log", "info", "warn", "error"] as LogLevel[]).forEach((level) => {
|
||||
this.originalConsole[level] = console[level];
|
||||
console[level] = (..._args: any[]) => {
|
||||
this.logs.push({
|
||||
level,
|
||||
message: _args,
|
||||
timestamp: new Date().toISOString(),
|
||||
});
|
||||
this.originalConsole[level]?.apply(console, _args);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
getLogs(): string {
|
||||
return this.logs
|
||||
.map(
|
||||
(entry) =>
|
||||
`[${entry.timestamp}] [${entry.level.toUpperCase()}] ${entry.message
|
||||
.map((m) => (typeof m === "object" ? JSON.stringify(m) : String(m)))
|
||||
.join(" ")}`,
|
||||
)
|
||||
.join("\n");
|
||||
}
|
||||
|
||||
clear() {
|
||||
this.logs = [];
|
||||
}
|
||||
}
|
||||
|
||||
export const logCollector = new LogCollector();
|
||||
Reference in New Issue
Block a user