feat: 重构主应用逻辑,分离挂载操作到 main.js,优化中文语言包加载

This commit is contained in:
锦麟 王
2026-02-06 09:48:10 +08:00
parent a0c610f798
commit aa2f2439d6
3 changed files with 33 additions and 7 deletions

View File

@@ -126,7 +126,9 @@
<!-- xterm.js --> <!-- xterm.js -->
<script src="https://unpkg.com/xterm@5.3.0/lib/xterm.js"></script> <script src="https://unpkg.com/xterm@5.3.0/lib/xterm.js"></script>
<script src="https://unpkg.com/xterm-addon-fit@0.8.0/lib/xterm-addon-fit.js"></script> <script src="https://unpkg.com/xterm-addon-fit@0.8.0/lib/xterm-addon-fit.js"></script>
<!-- 组件 --> <!-- 主应用(创建 Vue 实例,但不挂载) -->
<script src="./js/app.js"></script>
<!-- 组件(注册到 app -->
<script src="./js/components/dashboard.js"></script> <script src="./js/components/dashboard.js"></script>
<script src="./js/components/llm-config.js"></script> <script src="./js/components/llm-config.js"></script>
<script src="./js/components/channels-config.js"></script> <script src="./js/components/channels-config.js"></script>
@@ -135,7 +137,7 @@
<script src="./js/components/scheduler.js"></script> <script src="./js/components/scheduler.js"></script>
<script src="./js/components/terminal.js"></script> <script src="./js/components/terminal.js"></script>
<script src="./js/components/logs.js"></script> <script src="./js/components/logs.js"></script>
<!-- 应用 --> <!-- 挂载应用 -->
<script src="./js/app.js"></script> <script src="./js/main.js"></script>
</body> </body>
</html> </html>

View File

@@ -7,6 +7,18 @@ const { createApp, ref, reactive, computed, onMounted, watch } = Vue;
// API 基础路径 // API 基础路径
const API_BASE = '/api'; const API_BASE = '/api';
// 全局 app 变量,供组件注册使用
var app = null;
// 获取 Element Plus 中文语言包(兼容不同变量名)
const zhCnLocale = (function() {
if (typeof ElementPlusLocaleZhCn !== 'undefined') return ElementPlusLocaleZhCn;
if (typeof ELEMENT_PLUS_LOCALE_ZH_CN !== 'undefined') return ELEMENT_PLUS_LOCALE_ZH_CN;
// 如果都没有,返回 undefinedElement Plus 会使用默认英文
console.warn('Element Plus 中文语言包未加载');
return undefined;
})();
// API 请求封装 // API 请求封装
const api = { const api = {
async get(url) { async get(url) {
@@ -40,7 +52,7 @@ const api = {
}; };
// 创建 Vue 应用 // 创建 Vue 应用
const app = createApp({ app = createApp({
setup() { setup() {
// 状态 // 状态
const isCollapsed = ref(false); const isCollapsed = ref(false);
@@ -230,7 +242,7 @@ const app = createApp({
saveLLMConfig, saveLLMConfig,
saveChannelsConfig, saveChannelsConfig,
saveProxyConfig, saveProxyConfig,
zhCn: ElementPlusLocaleZhCn zhCn: zhCnLocale
}; };
} }
}); });
@@ -243,5 +255,4 @@ for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
// 使用 Element Plus // 使用 Element Plus
app.use(ElementPlus); app.use(ElementPlus);
// 挂载应用 // 注意:挂载操作在 main.js 中进行,确保组件先注册
app.mount('#app');

View File

@@ -0,0 +1,13 @@
/**
* MineNASAI WebUI 入口文件
* 在所有组件注册完成后挂载应用
*/
// 确保 app 存在
if (typeof app !== 'undefined' && app) {
// 挂载应用
app.mount('#app');
console.log('MineNASAI WebUI 已启动');
} else {
console.error('Vue 应用初始化失败,请检查控制台错误');
}