戒酒的李白

Fix BUG.

@@ -172,16 +172,32 @@ @@ -172,16 +172,32 @@
172 /* 控制台输出 */ 172 /* 控制台输出 */
173 .console-output { 173 .console-output {
174 flex: 1; 174 flex: 1;
175 - padding: 15px;  
176 background-color: #000000; 175 background-color: #000000;
177 color: #00ff00; 176 color: #00ff00;
178 font-family: 'Courier New', monospace; 177 font-family: 'Courier New', monospace;
179 font-size: 12px; 178 font-size: 12px;
  179 + overflow: hidden; /* 隐藏滚动条,由内部面板控制 */
  180 + position: relative;
  181 + min-height: 0; /* 允许内容缩小 */
  182 + max-height: 100%; /* 限制最大高度 */
  183 + }
  184 +
  185 + /* 控制台面板 */
  186 + .console-panel {
  187 + position: absolute;
  188 + top: 0;
  189 + left: 0;
  190 + width: 100%;
  191 + height: 100%;
  192 + padding: 15px;
180 overflow-y: auto; 193 overflow-y: auto;
181 white-space: pre-wrap; 194 white-space: pre-wrap;
182 word-break: break-all; 195 word-break: break-all;
183 - min-height: 0; /* 允许内容缩小 */  
184 - max-height: 100%; /* 限制最大高度 */ 196 + display: none; /* 默认隐藏 */
  197 + }
  198 +
  199 + .console-panel.active {
  200 + display: block; /* 激活时显示 */
185 } 201 }
186 202
187 .console-line { 203 .console-line {
@@ -304,7 +320,20 @@ @@ -304,7 +320,20 @@
304 320
305 <!-- 控制台输出 --> 321 <!-- 控制台输出 -->
306 <div class="console-output" id="consoleOutput"> 322 <div class="console-output" id="consoleOutput">
307 - <div class="console-line">[系统] 等待连接...</div> 323 + <!-- Insight Engine 控制台 -->
  324 + <div class="console-panel active" id="console-insight">
  325 + <div class="console-line">[系统] Insight Engine 控制台</div>
  326 + </div>
  327 +
  328 + <!-- Media Engine 控制台 -->
  329 + <div class="console-panel" id="console-media">
  330 + <div class="console-line">[系统] Media Engine 控制台</div>
  331 + </div>
  332 +
  333 + <!-- Query Engine 控制台 -->
  334 + <div class="console-panel" id="console-query">
  335 + <div class="console-line">[系统] Query Engine 控制台</div>
  336 + </div>
308 </div> 337 </div>
309 </div> 338 </div>
310 </div> 339 </div>
@@ -338,6 +367,9 @@ @@ -338,6 +367,9 @@
338 checkStatus(); 367 checkStatus();
339 setInterval(checkStatus, 5000); 368 setInterval(checkStatus, 5000);
340 369
  370 + // 初始化行计数
  371 + lastLineCount = { insight: 1, media: 1, query: 1 }; // 跳过初始消息
  372 +
341 // 定期刷新控制台输出 373 // 定期刷新控制台输出
342 setInterval(() => { 374 setInterval(() => {
343 refreshConsoleOutput(); 375 refreshConsoleOutput();
@@ -363,8 +395,16 @@ @@ -363,8 +395,16 @@
363 }); 395 });
364 396
365 socket.on('console_output', function(data) { 397 socket.on('console_output', function(data) {
366 - if (data.app === currentApp) {  
367 - addConsoleOutput(data.line); 398 + // 直接添加到对应应用的控制台面板,不依赖currentApp
  399 + const consolePanel = document.getElementById(`console-${data.app}`);
  400 + if (consolePanel) {
  401 + const div = document.createElement('div');
  402 + div.className = 'console-line';
  403 + div.textContent = data.line;
  404 + consolePanel.appendChild(div);
  405 +
  406 + // 自动滚动到底部
  407 + consolePanel.scrollTop = consolePanel.scrollHeight;
368 } 408 }
369 }); 409 });
370 410
@@ -449,12 +489,24 @@ @@ -449,12 +489,24 @@
449 489
450 currentApp = app; 490 currentApp = app;
451 491
452 - // 清空并加载新的控制台输出  
453 - document.getElementById('consoleOutput').innerHTML = '<div class="console-line">[系统] 切换到 ' + app + ' 应用</div>'; 492 + // 切换控制台面板显示
  493 + document.querySelectorAll('.console-panel').forEach(panel => {
  494 + panel.classList.remove('active');
  495 + });
  496 + document.getElementById(`console-${app}`).classList.add('active');
454 497
455 - // 重置行计数  
456 - lastLineCount[app] = 0; 498 + // 只在面板为空时加载输出,不重置行计数
  499 + const consolePanel = document.getElementById(`console-${app}`);
  500 + if (consolePanel && consolePanel.children.length <= 1) { // 只有初始消息
457 loadConsoleOutput(app); 501 loadConsoleOutput(app);
  502 + }
  503 +
  504 + // 切换后滚动到底部
  505 + setTimeout(() => {
  506 + if (consolePanel) {
  507 + consolePanel.scrollTop = consolePanel.scrollHeight;
  508 + }
  509 + }, 100);
458 510
459 // 更新嵌入页面 511 // 更新嵌入页面
460 updateEmbeddedPage(app); 512 updateEmbeddedPage(app);
@@ -469,7 +521,7 @@ @@ -469,7 +521,7 @@
469 .then(response => response.json()) 521 .then(response => response.json())
470 .then(data => { 522 .then(data => {
471 if (data.success && data.output.length > 0) { 523 if (data.success && data.output.length > 0) {
472 - const consoleOutput = document.getElementById('consoleOutput'); 524 + const consolePanel = document.getElementById(`console-${app}`);
473 525
474 // 只添加新的行 526 // 只添加新的行
475 const lastCount = lastLineCount[app] || 0; 527 const lastCount = lastLineCount[app] || 0;
@@ -479,11 +531,11 @@ @@ -479,11 +531,11 @@
479 const div = document.createElement('div'); 531 const div = document.createElement('div');
480 div.className = 'console-line'; 532 div.className = 'console-line';
481 div.textContent = line; 533 div.textContent = line;
482 - consoleOutput.appendChild(div); 534 + consolePanel.appendChild(div);
483 }); 535 });
484 536
485 lastLineCount[app] = data.output.length; 537 lastLineCount[app] = data.output.length;
486 - consoleOutput.scrollTop = consoleOutput.scrollHeight; 538 + consolePanel.scrollTop = consolePanel.scrollHeight;
487 } 539 }
488 }) 540 })
489 .catch(error => { 541 .catch(error => {
@@ -491,17 +543,19 @@ @@ -491,17 +543,19 @@
491 }); 543 });
492 } 544 }
493 545
494 - // 刷新当前应用的控制台输出 546 + // 刷新所有应用的控制台输出
495 function refreshConsoleOutput() { 547 function refreshConsoleOutput() {
496 - if (appStatus[currentApp] === 'running' || appStatus[currentApp] === 'starting') {  
497 - fetch(`/api/output/${currentApp}`) 548 + // 为每个应用刷新输出,不只是当前应用
  549 + Object.keys(appStatus).forEach(app => {
  550 + if (appStatus[app] === 'running' || appStatus[app] === 'starting') {
  551 + fetch(`/api/output/${app}`)
498 .then(response => response.json()) 552 .then(response => response.json())
499 .then(data => { 553 .then(data => {
500 if (data.success && data.output.length > 0) { 554 if (data.success && data.output.length > 0) {
501 - const consoleOutput = document.getElementById('consoleOutput'); 555 + const consolePanel = document.getElementById(`console-${app}`);
502 556
503 // 只添加新的行 557 // 只添加新的行
504 - const lastCount = lastLineCount[currentApp] || 0; 558 + const lastCount = lastLineCount[app] || 0;
505 const newLines = data.output.slice(lastCount); 559 const newLines = data.output.slice(lastCount);
506 560
507 if (newLines.length > 0) { 561 if (newLines.length > 0) {
@@ -509,30 +563,37 @@ @@ -509,30 +563,37 @@
509 const div = document.createElement('div'); 563 const div = document.createElement('div');
510 div.className = 'console-line'; 564 div.className = 'console-line';
511 div.textContent = line; 565 div.textContent = line;
512 - consoleOutput.appendChild(div); 566 + consolePanel.appendChild(div);
513 }); 567 });
514 568
515 - lastLineCount[currentApp] = data.output.length;  
516 - consoleOutput.scrollTop = consoleOutput.scrollHeight; 569 + lastLineCount[app] = data.output.length;
  570 + // 只有当前显示的面板才自动滚动
  571 + if (app === currentApp) {
  572 + consolePanel.scrollTop = consolePanel.scrollHeight;
  573 + }
517 } 574 }
518 } 575 }
519 }) 576 })
520 .catch(error => { 577 .catch(error => {
521 - console.error('刷新输出失败:', error); 578 + console.error(`刷新${app}输出失败:`, error);
522 }); 579 });
523 } 580 }
  581 + });
524 } 582 }
525 583
526 // 添加控制台输出 584 // 添加控制台输出
527 function addConsoleOutput(line) { 585 function addConsoleOutput(line) {
528 - const consoleOutput = document.getElementById('consoleOutput'); 586 + // 根据当前应用添加到对应的控制台面板
  587 + const consolePanel = document.getElementById(`console-${currentApp}`);
  588 + if (consolePanel) {
529 const div = document.createElement('div'); 589 const div = document.createElement('div');
530 div.className = 'console-line'; 590 div.className = 'console-line';
531 div.textContent = line; 591 div.textContent = line;
532 - consoleOutput.appendChild(div); 592 + consolePanel.appendChild(div);
533 593
534 // 自动滚动到底部显示最新内容 594 // 自动滚动到底部显示最新内容
535 - consoleOutput.scrollTop = consoleOutput.scrollHeight; 595 + consolePanel.scrollTop = consolePanel.scrollHeight;
  596 + }
536 } 597 }
537 598
538 // 预加载的iframe存储 599 // 预加载的iframe存储