feat: 重构主应用逻辑,分离挂载操作到 main.js,优化中文语言包加载
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
|
// 如果都没有,返回 undefined,Element 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');
|
|
||||||
|
|||||||
13
src/minenasai/webtui/static/webui/js/main.js
Normal file
13
src/minenasai/webtui/static/webui/js/main.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* MineNASAI WebUI 入口文件
|
||||||
|
* 在所有组件注册完成后挂载应用
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 确保 app 存在
|
||||||
|
if (typeof app !== 'undefined' && app) {
|
||||||
|
// 挂载应用
|
||||||
|
app.mount('#app');
|
||||||
|
console.log('MineNASAI WebUI 已启动');
|
||||||
|
} else {
|
||||||
|
console.error('Vue 应用初始化失败,请检查控制台错误');
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user