Files
iov_data_analysis_agent/web/static/index.html

204 lines
11 KiB
HTML
Raw Normal View History

2026-01-09 16:52:45 +08:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>IOV Data Analysis Agent</title>
2026-01-31 20:27:17 +08:00
<link rel="stylesheet" href="/static/clean_style.css">
2026-01-09 16:52:45 +08:00
2026-01-31 20:27:17 +08:00
<!-- Fonts -->
2026-01-09 16:52:45 +08:00
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
2026-01-22 22:26:04 +08:00
<link
2026-01-31 20:27:17 +08:00
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500&display=swap"
2026-01-22 22:26:04 +08:00
rel="stylesheet">
2026-01-31 20:27:17 +08:00
<!-- Icons -->
2026-01-09 16:52:45 +08:00
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
2026-01-31 20:27:17 +08:00
<!-- Markdown -->
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
2026-01-09 16:52:45 +08:00
</head>
<body>
<div class="app-container">
<!-- Sidebar -->
<aside class="sidebar">
<div class="brand">
2026-01-31 20:27:17 +08:00
<i class="fa-solid fa-cube"></i>
<span>IOV Agent</span>
2026-01-09 16:52:45 +08:00
</div>
2026-01-31 20:27:17 +08:00
<nav class="nav-menu">
<button class="nav-item active" onclick="switchView('analysis')">
2026-01-09 16:52:45 +08:00
<i class="fa-solid fa-chart-line"></i> Analysis
</button>
2026-01-31 20:27:17 +08:00
<div class="nav-divider"></div>
<div class="nav-section-title">History</div>
<div id="historyList" class="history-list">
<!-- History items loaded via JS -->
<div style="padding:0.5rem; font-size:0.8rem; color:#9CA3AF;">Loading...</div>
2026-01-09 16:52:45 +08:00
</div>
2026-01-31 20:27:17 +08:00
</nav>
2026-01-09 16:52:45 +08:00
2026-01-31 20:27:17 +08:00
<div class="status-bar">
<div id="statusDot" class="status-dot"></div>
<span id="statusText">Ready</span>
2026-01-09 16:52:45 +08:00
</div>
</aside>
2026-01-31 20:27:17 +08:00
<!-- Main Content -->
2026-01-09 16:52:45 +08:00
<main class="main-content">
2026-01-31 20:27:17 +08:00
<header class="header">
<h2 id="pageTitle">Analysis Dashboard</h2>
</header>
<div class="content-area">
<!-- VIEW: ANALYSIS -->
<div id="viewAnalysis" class="section active">
<div class="analysis-grid">
<!-- Configuration Panel -->
<div class="panel">
<div class="panel-title">
<span>Configuration</span>
</div>
<div class="form-group">
<label class="form-label">1. Data Upload</label>
<div id="uploadZone" class="upload-area">
<i class="fa-solid fa-cloud-arrow-up upload-icon"></i>
<p>Click or Drag CSV/Excel Files</p>
<div id="fileList" class="file-list"></div>
</div>
<input type="file" id="fileInput" multiple accept=".csv,.xlsx,.xls" hidden>
</div>
<div class="form-group" id="templateSelectorGroup">
<label class="form-label">2. Analysis Template</label>
<div id="templateSelector" class="template-cards">
<div class="template-card selected" data-template="" onclick="selectTemplate(this, '')">
<div class="template-card-title">No Template</div>
<div class="template-card-desc">Free Analysis</div>
</div>
<!-- Dynamic template cards loaded via JS -->
</div>
</div>
2026-01-31 20:27:17 +08:00
<div class="form-group">
<label class="form-label">3. Requirement</label>
2026-01-31 20:27:17 +08:00
<textarea id="requirementInput" class="form-textarea"
placeholder="Describe what you want to analyze..."></textarea>
</div>
<button id="startBtn" class="btn btn-primary" style="margin-top: 1rem; width: 100%;">
<i class="fa-solid fa-play"></i> Start Analysis
</button>
2026-01-09 16:52:45 +08:00
</div>
2026-01-31 20:27:17 +08:00
<!-- Output Panel -->
<div class="panel" style="overflow:hidden; display:flex; flex-direction:column;">
<div class="panel-title" style="margin-bottom:0.5rem;">
<span>Output</span>
<div class="tabs">
<div class="tab active" onclick="switchTab('execution')">执行过程</div>
<div class="tab" onclick="switchTab('datafiles')">数据文件</div>
2026-01-31 20:27:17 +08:00
<div class="tab" onclick="switchTab('report')">Report</div>
</div>
<button id="downloadScriptBtn" class="btn btn-sm btn-secondary hidden"
onclick="downloadScript()" style="margin-left:auto;">
<i class="fa-solid fa-code"></i> Script
</button>
</div>
<!-- Progress Bar -->
<div id="progressBarContainer" class="progress-bar-container hidden">
<div class="progress-bar-info">
<span id="progressLabel" class="progress-label">Round 0/0</span>
<span id="progressPercent" class="progress-percent">0%</span>
</div>
<div class="progress-bar-track">
<div id="progressBarFill" class="progress-bar-fill" style="width: 0%"></div>
</div>
<div id="progressMessage" class="progress-message"></div>
</div>
2026-01-31 20:27:17 +08:00
<div class="output-container" id="outputContainer">
<!-- Execution Process Tab -->
<div id="executionTab" class="tab-content active" style="height:100%; overflow-y:auto;">
<div id="roundCardsWrapper" class="round-cards-wrapper">
<div class="empty-state" id="executionEmptyState">
<p>Waiting to start...</p>
</div>
</div>
</div>
<!-- Data Files Tab -->
<div id="datafilesTab" class="tab-content hidden" style="height:100%; overflow-y:auto;">
<div id="fileCardsGrid" class="file-cards-grid"></div>
<div id="dataPreviewPanel" class="data-preview-panel hidden">
<div class="data-preview-header">
<span id="previewFileName"></span>
<button class="btn btn-sm btn-secondary" onclick="closePreview()"><i class="fa-solid fa-xmark"></i></button>
</div>
<div id="previewTableContainer"></div>
</div>
<div class="empty-state" id="datafilesEmptyState">
<p>No data files yet.</p>
</div>
2026-01-31 20:27:17 +08:00
</div>
<!-- Report Tab -->
<div id="reportTab" class="tab-content hidden" style="height:100%; overflow-y:auto;">
<div id="reportContainer" class="report-content markdown-body">
<div class="empty-state">
<p>Report will appear here after analysis.</p>
</div>
</div>
<div id="followUpSection" class="hidden"
style="margin-top:2rem; border-top:1px solid var(--border-color); padding-top:1rem;">
<div class="form-group">
<label class="form-label">Follow-up Analysis</label>
<div style="display:flex; gap:0.5rem;">
<input type="text" id="followUpInput" class="form-input"
placeholder="Ask a follow-up question...">
<button class="btn btn-primary btn-sm"
onclick="sendFollowUp()">Send</button>
</div>
</div>
</div>
<div style="margin-top:1rem; text-align:right">
<button id="exportBtn" class="btn btn-secondary btn-sm"
onclick="triggerExport()">
<i class="fa-solid fa-download"></i> Export ZIP
</button>
</div>
</div>
<!-- Supporting Data Modal -->
<div class="supporting-data-modal hidden" id="supportingDataModal">
<div class="supporting-data-content">
<div class="supporting-data-header">
<span>支撑数据</span>
<button onclick="closeSupportingData()">×</button>
</div>
<div class="supporting-data-body" id="supportingDataBody">
2026-01-31 20:27:17 +08:00
</div>
</div>
</div>
</div>
</div>
2026-01-09 16:52:45 +08:00
2026-01-31 20:27:17 +08:00
</div>
2026-01-09 16:52:45 +08:00
</div>
2026-01-22 22:26:04 +08:00
2026-01-09 16:52:45 +08:00
</div>
2026-01-31 20:27:17 +08:00
</main>
2026-01-09 16:52:45 +08:00
</div>
<script src="/static/script.js"></script>
</body>
</html>