feat(web): unify web entry, preset config, SSE streaming and dual-pane live logs

This commit is contained in:
liumangmang
2026-04-03 15:40:31 +08:00
parent 2d6c64ecff
commit 2150dfe24e
42 changed files with 1917 additions and 1533 deletions
+75 -30
View File
@@ -11,9 +11,8 @@
<aside class="sidebar" aria-label="主导航">
<h1>SVN 工作台</h1>
<nav>
<button class="nav-item active" data-view="dashboard">工作台</button>
<button class="nav-item" data-view="svn">SVN 日志抓取</button>
<button class="nav-item" data-view="ai">AI 工作量分析</button>
<button class="nav-item" data-view="dashboard">工作台</button>
<button class="nav-item active" data-view="svn">SVN 日志抓取</button>
<button class="nav-item" data-view="history">任务历史</button>
<button class="nav-item" data-view="settings">系统设置</button>
</nav>
@@ -64,41 +63,87 @@
<section class="view" id="view-svn">
<article class="card form-card">
<h3>SVN 抓取参数</h3>
<h3>SVN 批量抓取参数</h3>
<div class="alert info span-2" style="margin-bottom:16px;padding:12px;border-radius:10px;background:#d1f0eb;color:#0f766e">
默认已填充3个常用项目路径,可选择月份自动填充版本号,或手动填写
</div>
<div class="span-2" style="margin-bottom:16px;padding:12px;border:1px solid var(--border);border-radius:10px;">
<div class="grid cols-3" style="gap:10px;align-items:end;">
<label>统计月份
<input type="month" id="version-month">
</label>
<div style="grid-column: span 2;">
<button type="button" id="btn-auto-fill" class="primary" style="width:100%">一键填充所有项目版本号</button>
</div>
</div>
</div>
<form id="svn-form" class="form-grid">
<label>预置项目
<select name="presetId" id="svn-preset-select" aria-label="预置 SVN 项目"></select>
</label>
<label>项目名<input name="projectName" placeholder="如:PRS-7050"></label>
<label>SVN 地址<input required name="url" placeholder="https://..." aria-label="SVN 地址"></label>
<label><input required name="username" placeholder="请输入账号"></label>
<label>密码<input required type="password" name="password" placeholder="请输入密码"></label>
<label>开始版本号<input name="startRevision" inputmode="numeric" placeholder="默认最新"></label>
<label>结束版本号<input name="endRevision" inputmode="numeric" placeholder="默认最新"></label>
<label class="span-2">过滤用户名<input name="filterUser" placeholder="包含匹配,留空不过滤"></label>
<!-- 项目1 -->
<div class="span-2 project-item" style="border:1px solid var(--border);border-radius:10px;padding:12px;margin-bottom:8px">
<h4 style="margin:0 0 10px 0">项目 1:PRS-7050 场站智慧管控</h4>
<div class="grid cols-2" style="gap:10px">
<label>开始版本号<input name="startRevision_1" inputmode="numeric" placeholder="请输入开始版本"></label>
<label>结束版本<input name="endRevision_1" inputmode="numeric" placeholder="请输入结束版本"></label>
</div>
</div>
<!-- 项目2 -->
<div class="span-2 project-item" style="border:1px solid var(--border);border-radius:10px;padding:12px;margin-bottom:8px">
<h4 style="margin:0 0 10px 0">项目 2PRS-7950 在线巡视</h4>
<div class="grid cols-2" style="gap:10px">
<label>开始版本号<input name="startRevision_2" inputmode="numeric" placeholder="请输入开始版本"></label>
<label>结束版本号<input name="endRevision_2" inputmode="numeric" placeholder="请输入结束版本"></label>
</div>
</div>
<!-- 项目3 -->
<div class="span-2 project-item" style="border:1px solid var(--border);border-radius:10px;padding:12px;margin-bottom:12px">
<h4 style="margin:0 0 10px 0">项目 3:PRS-7950 在线巡视电科院测试版</h4>
<div class="grid cols-2" style="gap:10px">
<label>开始版本号<input name="startRevision_3" inputmode="numeric" placeholder="请输入开始版本"></label>
<label>结束版本号<input name="endRevision_3" inputmode="numeric" placeholder="请输入结束版本"></label>
</div>
</div>
<!-- 通用配置 -->
<label class="span-2">过滤用户名<input name="filterUser" placeholder="包含匹配,留空不过滤" value="liujing"></label>
<label>工作周期<input name="period" placeholder="例如 2026年03月"></label>
<label>输出文件名<input name="outputFileName" placeholder="例如 202603工作量统计.xlsx"></label>
<div class="actions span-2">
<button type="button" id="btn-test-connection">测试连接</button>
<button type="submit" id="btn-svn-run" class="primary">开始抓取并导出</button>
<button type="submit" id="btn-svn-run" class="primary">一键抓取并导出 Excel</button>
</div>
</form>
</article>
<!-- 执行日志面板 -->
<article class="card" id="log-panel" style="display:none;margin-top:16px;">
<h3>执行进度</h3>
<div class="live-grid">
<section class="live-column reasoning">
<header>思考过程</header>
<div id="reasoning-output" class="live-output">
<p class="muted">等待思考输出...</p>
</div>
</section>
<section class="live-column answer">
<header>最终输出</header>
<div id="answer-output" class="live-output">
<p class="muted">等待答案输出...</p>
</div>
</section>
</div>
<div class="system-log-wrap">
<header>系统日志</header>
<div id="system-log-output" class="system-output">
<p class="muted">等待任务开始...</p>
</div>
</div>
</article>
</section>
<section class="view" id="view-ai">
<article class="card form-card">
<h3>AI 分析参数</h3>
<form id="ai-form" class="form-grid">
<label class="span-2">选择 Markdown 输入文件</label>
<div class="span-2 file-picker" id="md-file-picker" role="group" aria-label="Markdown 文件选择"></div>
<label>工作周期<input name="period" placeholder="例如 2026年03月"></label>
<label>输出文件名<input name="outputFileName" placeholder="例如 202603工作量统计.xlsx"></label>
<label class="span-2">临时 API Key(可选)<input type="password" name="apiKey" placeholder="优先使用设置页或环境变量"></label>
<div class="actions span-2">
<button type="submit" id="btn-ai-run" class="primary">开始 AI 分析并导出 Excel</button>
</div>
</form>
</article>
</section>
<section class="view" id="view-history">
<article class="card">