- AuditLog +298(筛选/详情/i18n)+ audit 后端 record/mod - AI 命令层:generate_image +81 / fetch_url / fetch_search / skills / tool_registry / tools/file / provider / conversation - 前端组件:AiChat/TopBar/ConversationSidebar/GitChanges/ApprovalPopup/Dashboard/ProjectDetail 等 30+ + composables + i18n - 诊断文档: aichat历史会话实证诊断-2026-08-04 + project_soft_delete 测试
26 lines
1.2 KiB
TypeScript
26 lines
1.2 KiB
TypeScript
import { createApp } from "vue";
|
||
import App from "./App.vue";
|
||
import router from "./router";
|
||
import i18n from "./i18n";
|
||
import "./styles/global.css";
|
||
import "./styles/ai-md.css";
|
||
import "./styles/components.css";
|
||
import "./components/settings/settings.css"; // UX 重构阶段1:设置统一组件库全局
|
||
|
||
const app = createApp(App);
|
||
|
||
// 全局错误兜底:捕获 Vue runtime 未处理错误(组件渲染/生命周期/事件回调抛错),
|
||
// 仅记录不中断,防止整页白屏。组件级降级 UI 由 ErrorBoundary.vue 负责。
|
||
app.config.errorHandler = (err, instance, info) => {
|
||
const tag = instance?.$options?.name || instance?.$options?.__name || "unknown";
|
||
console.error(`[Vue error] <${tag}> ${info}:`, err);
|
||
};
|
||
|
||
app.use(router).use(i18n);
|
||
|
||
// 等路由就绪再 mount:分离窗口(approval-popup / ai-detached / fe-detached)的 hash 路由须先解析完,
|
||
// App.vue 的 isDetached(route.path === '/approval-popup' ...)才命中真值。否则初始帧 route.path='/'
|
||
// → isDetached=false → AppLayout 把完整主布局(侧栏+主区+AI 面板)渲染进分离小窗
|
||
// (approval-popup 380×480 尤为明显,看起来像「小小的完整 DevFlow 界面」)。
|
||
router.isReady().then(() => app.mount("#app"));
|