auto-sync: 2026-05-17 23:56:36
This commit is contained in:
@@ -0,0 +1,494 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh-CN">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>moziplus v2.7 - Dashboard</title>
|
||||||
|
<script src="https://cdn.tailwindcss.com"></script>
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
||||||
|
<script>
|
||||||
|
tailwind.config = {
|
||||||
|
theme: {
|
||||||
|
extend: {
|
||||||
|
colors: {
|
||||||
|
'court-gold': '#c9a227',
|
||||||
|
'court-red': '#8b0000',
|
||||||
|
'court-purple': '#4a1a6b',
|
||||||
|
'court-blue': '#1a365d',
|
||||||
|
'court-dark': '#0f0a05',
|
||||||
|
'court-card': '#1c1510',
|
||||||
|
'court-border': '#3d2914',
|
||||||
|
'court-panel': '#15100a',
|
||||||
|
'court-hover': '#2a1f14',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
* { box-sizing: border-box; }
|
||||||
|
body { font-family: -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif; }
|
||||||
|
.stage-dot { width: 12px; height: 12px; border-radius: 50%; }
|
||||||
|
.stage-line { height: 3px; flex: 1; min-width: 20px; }
|
||||||
|
.card-item { transition: all 0.2s ease; }
|
||||||
|
.card-item:hover { transform: translateY(-2px); box-shadow: 0 4px 16px rgba(201,162,39,0.15); }
|
||||||
|
.tab-active { border-bottom: 3px solid #c9a227; color: #c9a227; }
|
||||||
|
.tab-inactive { border-bottom: 3px solid transparent; color: #a89070; }
|
||||||
|
.tab-inactive:hover { color: #c9a227; }
|
||||||
|
.sidebar-item { transition: background 0.15s; }
|
||||||
|
.sidebar-item:hover { background: #2a1f14; }
|
||||||
|
.sidebar-item.active { background: #2a1f14; border-left: 3px solid #c9a227; }
|
||||||
|
.progress-bar { height: 6px; border-radius: 3px; background: #2a1f14; overflow: hidden; }
|
||||||
|
.progress-fill { height: 100%; border-radius: 3px; transition: width 0.5s ease; }
|
||||||
|
.mail-row { transition: background 0.15s; }
|
||||||
|
.mail-row:hover { background: #2a1f14; }
|
||||||
|
.mail-row.unread { border-left: 3px solid #c9a227; }
|
||||||
|
.badge { font-size: 11px; padding: 1px 6px; border-radius: 10px; }
|
||||||
|
.task-row { border-left: 3px solid transparent; transition: all 0.15s; }
|
||||||
|
.task-row:hover { background: #2a1f14; border-left-color: #c9a227; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body class="bg-court-dark text-amber-100 min-h-screen">
|
||||||
|
|
||||||
|
<!-- 顶部导航 -->
|
||||||
|
<header class="bg-gradient-to-r from-court-red via-purple-900 to-court-red border-b-2 border-court-gold">
|
||||||
|
<div class="flex items-center justify-between px-6 py-3">
|
||||||
|
<div class="flex items-center gap-3">
|
||||||
|
<span class="text-2xl">🏛️</span>
|
||||||
|
<h1 class="text-xl font-bold text-amber-300">moziplus v2.7</h1>
|
||||||
|
<span class="text-amber-600 text-sm ml-2">三级层次结构</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center gap-6">
|
||||||
|
<nav class="flex gap-6">
|
||||||
|
<button onclick="showTab('dashboard')" id="tab-dashboard" class="tab-active pb-1 text-sm font-medium cursor-pointer">
|
||||||
|
<i class="fa fa-th-large mr-1"></i> Dashboard
|
||||||
|
</button>
|
||||||
|
<button onclick="showTab('mail')" id="tab-mail" class="tab-inactive pb-1 text-sm font-medium cursor-pointer relative">
|
||||||
|
<i class="fa fa-envelope mr-1"></i> Mail
|
||||||
|
<span class="absolute -top-1 -right-3 bg-court-red text-white badge">3</span>
|
||||||
|
</button>
|
||||||
|
<button onclick="showTab('settings')" id="tab-settings" class="tab-inactive pb-1 text-sm font-medium cursor-pointer">
|
||||||
|
<i class="fa fa-cog mr-1"></i> 设置
|
||||||
|
</button>
|
||||||
|
</nav>
|
||||||
|
<div class="text-amber-400 text-sm">
|
||||||
|
👑 主公御览
|
||||||
|
<span class="ml-2 bg-green-800 text-green-200 badge">系统正常</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<!-- ==================== Dashboard Tab ==================== -->
|
||||||
|
<div id="page-dashboard" class="flex" style="height: calc(100vh - 56px);">
|
||||||
|
|
||||||
|
<!-- 左侧:Project 导航 -->
|
||||||
|
<aside class="w-56 bg-court-panel border-r border-court-border flex flex-col">
|
||||||
|
<div class="p-3 border-b border-court-border">
|
||||||
|
<div class="relative">
|
||||||
|
<input type="text" placeholder="搜索项目..."
|
||||||
|
class="w-full bg-court-card border border-court-border rounded px-3 py-1.5 text-sm text-amber-100 placeholder-amber-800 focus:outline-none focus:border-court-gold">
|
||||||
|
<i class="fa fa-search absolute right-3 top-2 text-amber-700 text-sm"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex-1 overflow-y-auto p-2">
|
||||||
|
<!-- General -->
|
||||||
|
<div class="sidebar-item active rounded px-3 py-2 mb-1 cursor-pointer" onclick="selectProject('general')">
|
||||||
|
<div class="flex items-center justify-between">
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<span class="text-amber-400">📋</span>
|
||||||
|
<span class="text-sm font-medium">General</span>
|
||||||
|
</div>
|
||||||
|
<span class="badge bg-amber-900 text-amber-400">2</span>
|
||||||
|
</div>
|
||||||
|
<div class="text-xs text-amber-700 mt-1">一般性任务</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- sanguo_quant_live -->
|
||||||
|
<div class="sidebar-item rounded px-3 py-2 mb-1 cursor-pointer" onclick="selectProject('quant')">
|
||||||
|
<div class="flex items-center justify-between">
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<span class="text-amber-400">📊</span>
|
||||||
|
<span class="text-sm font-medium">sanguo_quant_live</span>
|
||||||
|
</div>
|
||||||
|
<span class="badge bg-amber-900 text-amber-400">3</span>
|
||||||
|
</div>
|
||||||
|
<div class="text-xs text-amber-700 mt-1">量化实战项目</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- sanguo_vnpy -->
|
||||||
|
<div class="sidebar-item rounded px-3 py-2 mb-1 cursor-pointer" onclick="selectProject('vnpy')">
|
||||||
|
<div class="flex items-center justify-between">
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<span class="text-amber-400">🔧</span>
|
||||||
|
<span class="text-sm font-medium">sanguo_vnpy</span>
|
||||||
|
</div>
|
||||||
|
<span class="badge bg-amber-900 text-amber-400">1</span>
|
||||||
|
</div>
|
||||||
|
<div class="text-xs text-amber-700 mt-1">vnpy框架平台</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- sanguo_moziplus_v2 -->
|
||||||
|
<div class="sidebar-item rounded px-3 py-2 mb-1 cursor-pointer" onclick="selectProject('moziplus')">
|
||||||
|
<div class="flex items-center justify-between">
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<span class="text-amber-400">⚙️</span>
|
||||||
|
<span class="text-sm font-medium">sanguo_moziplus_v2</span>
|
||||||
|
</div>
|
||||||
|
<span class="badge bg-amber-900 text-amber-400">2</span>
|
||||||
|
</div>
|
||||||
|
<div class="text-xs text-amber-700 mt-1">AI Native DevOps 平台</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="border-t border-court-border my-2 mx-2"></div>
|
||||||
|
|
||||||
|
<!-- 自动发现的项目 -->
|
||||||
|
<div class="px-3 py-1 text-xs text-amber-800 font-medium uppercase tracking-wider">
|
||||||
|
自动发现
|
||||||
|
</div>
|
||||||
|
<div class="sidebar-item rounded px-3 py-2 mb-1 cursor-pointer opacity-60">
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<span class="text-amber-600">📁</span>
|
||||||
|
<span class="text-sm">sanguo_mail</span>
|
||||||
|
</div>
|
||||||
|
<div class="text-xs text-amber-800 mt-1">邮件系统(未激活)</div>
|
||||||
|
</div>
|
||||||
|
<div class="sidebar-item rounded px-3 py-2 mb-1 cursor-pointer opacity-60">
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<span class="text-amber-600">📁</span>
|
||||||
|
<span class="text-sm">sanguo_mozi</span>
|
||||||
|
</div>
|
||||||
|
<div class="text-xs text-amber-800 mt-1">编排引擎 v1(未激活)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 归档区 -->
|
||||||
|
<div class="border-t border-court-border p-3">
|
||||||
|
<div class="sidebar-item rounded px-3 py-2 cursor-pointer text-amber-700 hover:text-amber-500">
|
||||||
|
<i class="fa fa-archive mr-2"></i>
|
||||||
|
<span class="text-sm">已归档 (4)</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<!-- 右侧:主内容区 -->
|
||||||
|
<main class="flex-1 overflow-y-auto">
|
||||||
|
|
||||||
|
<!-- Project 头部 -->
|
||||||
|
<div class="border-b border-court-border p-4">
|
||||||
|
<div class="flex items-center justify-between">
|
||||||
|
<div>
|
||||||
|
<h2 class="text-lg font-bold text-amber-300">📊 sanguo_quant_live</h2>
|
||||||
|
<p class="text-sm text-amber-600 mt-0.5">量化实战项目 · 3 个 Card · 12 个 Task</p>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center gap-3">
|
||||||
|
<button class="bg-court-card border border-court-border text-amber-400 px-3 py-1.5 rounded text-sm hover:border-court-gold">
|
||||||
|
<i class="fa fa-filter mr-1"></i> 筛选
|
||||||
|
</button>
|
||||||
|
<button class="bg-court-gold text-court-dark px-4 py-1.5 rounded text-sm font-medium hover:bg-amber-400">
|
||||||
|
<i class="fa fa-plus mr-1"></i> 新建 Card
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Card 看板 -->
|
||||||
|
<div class="p-4">
|
||||||
|
|
||||||
|
<!-- Card 1: 动量策略v1 -->
|
||||||
|
<div class="card-item bg-court-card border border-court-border rounded-lg p-4 mb-4">
|
||||||
|
<div class="flex items-start justify-between mb-3">
|
||||||
|
<div class="flex items-center gap-3">
|
||||||
|
<h3 class="font-bold text-amber-200">🎯 动量策略v1</h3>
|
||||||
|
<span class="badge bg-blue-900 text-blue-300">strategy</span>
|
||||||
|
<span class="badge bg-green-900 text-green-300">working</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center gap-2 text-sm">
|
||||||
|
<button class="text-amber-600 hover:text-amber-400"><i class="fa fa-ellipsis-h"></i></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Stage 进度条 -->
|
||||||
|
<div class="bg-court-panel rounded-lg p-3 mb-3">
|
||||||
|
<div class="flex items-center mb-2">
|
||||||
|
<span class="text-xs text-amber-500 mr-2">阶段进度</span>
|
||||||
|
<span class="text-xs text-amber-300 font-medium">3/5 stages</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center gap-1">
|
||||||
|
<!-- Stage: 因子研究 ✅ -->
|
||||||
|
<div class="flex flex-col items-center" style="min-width: 80px;">
|
||||||
|
<div class="flex items-center w-full">
|
||||||
|
<div class="stage-dot bg-green-500"></div>
|
||||||
|
<div class="stage-line bg-green-500"></div>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-green-400 mt-1">因子研究</span>
|
||||||
|
<span class="text-xs text-green-600">2/2 ✅</span>
|
||||||
|
</div>
|
||||||
|
<!-- Stage: 策略编码 ✅ -->
|
||||||
|
<div class="flex flex-col items-center" style="min-width: 80px;">
|
||||||
|
<div class="flex items-center w-full">
|
||||||
|
<div class="stage-line bg-green-500"></div>
|
||||||
|
<div class="stage-dot bg-green-500"></div>
|
||||||
|
<div class="stage-line bg-green-500"></div>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-green-400 mt-1">策略编码</span>
|
||||||
|
<span class="text-xs text-green-600">3/3 ✅</span>
|
||||||
|
</div>
|
||||||
|
<!-- Stage: 历史回测 🔄 -->
|
||||||
|
<div class="flex flex-col items-center" style="min-width: 80px;">
|
||||||
|
<div class="flex items-center w-full">
|
||||||
|
<div class="stage-line bg-amber-400"></div>
|
||||||
|
<div class="stage-dot bg-amber-400 animate-pulse"></div>
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-300 mt-1 font-medium">历史回测</span>
|
||||||
|
<span class="text-xs text-amber-500">1/2 进行中</span>
|
||||||
|
</div>
|
||||||
|
<!-- Stage: 参数优化 ⬜ -->
|
||||||
|
<div class="flex flex-col items-center" style="min-width: 80px;">
|
||||||
|
<div class="flex items-center w-full">
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
<div class="stage-dot bg-court-border"></div>
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-700 mt-1">参数优化</span>
|
||||||
|
<span class="text-xs text-amber-800">0/0</span>
|
||||||
|
</div>
|
||||||
|
<!-- Stage: 模拟盘 ⬜ -->
|
||||||
|
<div class="flex flex-col items-center" style="min-width: 80px;">
|
||||||
|
<div class="flex items-center w-full">
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
<div class="stage-dot bg-court-border"></div>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-700 mt-1">模拟盘</span>
|
||||||
|
<span class="text-xs text-amber-800">0/0</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Task 列表(按 Stage 分组) -->
|
||||||
|
<div class="space-y-1">
|
||||||
|
<div class="text-xs text-amber-600 font-medium mb-1 px-2">
|
||||||
|
<i class="fa fa-circle text-green-500 mr-1" style="font-size:6px"></i> 因子研究 (2/2)
|
||||||
|
</div>
|
||||||
|
<div class="task-row flex items-center justify-between px-3 py-1.5 rounded text-sm opacity-60">
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<span class="text-green-500">✓</span>
|
||||||
|
<span>因子筛选分析</span>
|
||||||
|
<span class="badge bg-court-panel text-amber-600">zhaoyun</span>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-700">done · 2h</span>
|
||||||
|
</div>
|
||||||
|
<div class="task-row flex items-center justify-between px-3 py-1.5 rounded text-sm opacity-60">
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<span class="text-green-500">✓</span>
|
||||||
|
<span>IC/IR 计算</span>
|
||||||
|
<span class="badge bg-court-panel text-amber-600">zhaoyun</span>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-700">done · 1h</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="text-xs text-amber-600 font-medium mb-1 mt-2 px-2">
|
||||||
|
<i class="fa fa-circle text-amber-400 mr-1" style="font-size:6px"></i> 历史回测 (1/2)
|
||||||
|
</div>
|
||||||
|
<div class="task-row flex items-center justify-between px-3 py-1.5 rounded text-sm bg-court-panel border-l-amber-400">
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<span class="text-amber-400 animate-pulse">●</span>
|
||||||
|
<span>编写回测脚本</span>
|
||||||
|
<span class="badge bg-court-panel text-amber-600">zhangfei</span>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-500">working · 30min</span>
|
||||||
|
</div>
|
||||||
|
<div class="task-row flex items-center justify-between px-3 py-1.5 rounded text-sm">
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<span class="text-amber-800">○</span>
|
||||||
|
<span>参数敏感性分析</span>
|
||||||
|
<span class="badge bg-court-panel text-amber-600">zhangfei</span>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-700">pending</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Card 底部 -->
|
||||||
|
<div class="flex items-center justify-between mt-3 pt-3 border-t border-court-border">
|
||||||
|
<div class="flex items-center gap-3 text-xs text-amber-600">
|
||||||
|
<span><i class="fa fa-tasks mr-1"></i> 7 tasks</span>
|
||||||
|
<span><i class="fa fa-user mr-1"></i> zhangfei · zhaoyun</span>
|
||||||
|
<span><i class="fa fa-clock-o mr-1"></i> 创建于 5/15</span>
|
||||||
|
</div>
|
||||||
|
<div class="progress-bar" style="width: 120px;">
|
||||||
|
<div class="progress-fill bg-green-500" style="width: 57%"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Card 2: 均值回归策略 -->
|
||||||
|
<div class="card-item bg-court-card border border-court-border rounded-lg p-4 mb-4">
|
||||||
|
<div class="flex items-start justify-between mb-3">
|
||||||
|
<div class="flex items-center gap-3">
|
||||||
|
<h3 class="font-bold text-amber-200">📈 均值回归策略</h3>
|
||||||
|
<span class="badge bg-blue-900 text-blue-300">strategy</span>
|
||||||
|
<span class="badge bg-amber-900 text-amber-300">pending</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="bg-court-panel rounded-lg p-3 mb-3">
|
||||||
|
<div class="flex items-center mb-2">
|
||||||
|
<span class="text-xs text-amber-500 mr-2">阶段进度</span>
|
||||||
|
<span class="text-xs text-amber-300 font-medium">0/4 stages</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center gap-1">
|
||||||
|
<div class="flex flex-col items-center" style="min-width: 80px;">
|
||||||
|
<div class="flex items-center w-full">
|
||||||
|
<div class="stage-dot bg-court-border"></div>
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-700 mt-1">因子研究</span>
|
||||||
|
<span class="text-xs text-amber-800">0/0</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col items-center" style="min-width: 80px;">
|
||||||
|
<div class="flex items-center w-full">
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
<div class="stage-dot bg-court-border"></div>
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-700 mt-1">策略编码</span>
|
||||||
|
<span class="text-xs text-amber-800">0/0</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col items-center" style="min-width: 80px;">
|
||||||
|
<div class="flex items-center w-full">
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
<div class="stage-dot bg-court-border"></div>
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-700 mt-1">历史回测</span>
|
||||||
|
<span class="text-xs text-amber-800">0/0</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col items-center" style="min-width: 80px;">
|
||||||
|
<div class="flex items-center w-full">
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
<div class="stage-dot bg-court-border"></div>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-700 mt-1">模拟盘</span>
|
||||||
|
<span class="text-xs text-amber-800">0/0</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="text-sm text-amber-700 italic">暂无 Task,AI 规划中...</div>
|
||||||
|
<div class="flex items-center justify-between mt-3 pt-3 border-t border-court-border">
|
||||||
|
<div class="flex items-center gap-3 text-xs text-amber-600">
|
||||||
|
<span><i class="fa fa-tasks mr-1"></i> 0 tasks</span>
|
||||||
|
<span><i class="fa fa-clock-o mr-1"></i> 创建于 5/17</span>
|
||||||
|
</div>
|
||||||
|
<div class="progress-bar" style="width: 120px;">
|
||||||
|
<div class="progress-fill bg-court-border" style="width: 0%"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Card 3: 日线数据管道 -->
|
||||||
|
<div class="card-item bg-court-card border border-court-border rounded-lg p-4 mb-4">
|
||||||
|
<div class="flex items-start justify-between mb-3">
|
||||||
|
<div class="flex items-center gap-3">
|
||||||
|
<h3 class="font-bold text-amber-200">🔄 日线数据管道</h3>
|
||||||
|
<span class="badge bg-purple-900 text-purple-300">data_pipeline</span>
|
||||||
|
<span class="badge bg-green-900 text-green-300">working</span>
|
||||||
|
<span class="badge bg-amber-900 text-amber-400">常驻</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="bg-court-panel rounded-lg p-3 mb-3">
|
||||||
|
<div class="flex items-center mb-2">
|
||||||
|
<span class="text-xs text-amber-500 mr-2">阶段进度</span>
|
||||||
|
<span class="text-xs text-amber-300 font-medium">2/4 stages</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center gap-1">
|
||||||
|
<div class="flex flex-col items-center" style="min-width: 80px;">
|
||||||
|
<div class="flex items-center w-full">
|
||||||
|
<div class="stage-dot bg-green-500"></div>
|
||||||
|
<div class="stage-line bg-green-500"></div>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-green-400 mt-1">采集</span>
|
||||||
|
<span class="text-xs text-green-600">1/1 ✅</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col items-center" style="min-width: 80px;">
|
||||||
|
<div class="flex items-center w-full">
|
||||||
|
<div class="stage-line bg-amber-400"></div>
|
||||||
|
<div class="stage-dot bg-amber-400 animate-pulse"></div>
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-300 mt-1">清洗</span>
|
||||||
|
<span class="text-xs text-amber-500">0/1 进行中</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col items-center" style="min-width: 80px;">
|
||||||
|
<div class="flex items-center w-full">
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
<div class="stage-dot bg-court-border"></div>
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-700 mt-1">验证</span>
|
||||||
|
<span class="text-xs text-amber-800">0/0</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex flex-col items-center" style="min-width: 80px;">
|
||||||
|
<div class="flex items-center w-full">
|
||||||
|
<div class="stage-line bg-court-border"></div>
|
||||||
|
<div class="stage-dot bg-court-border"></div>
|
||||||
|
</div>
|
||||||
|
<span class="text-xs text-amber-700 mt-1">入库</span>
|
||||||
|
<span class="text-xs text-amber-800">0/0</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center justify-between mt-3 pt-3 border-t border-court-border">
|
||||||
|
<div class="flex items-center gap-3 text-xs text-amber-600">
|
||||||
|
<span><i class="fa fa-tasks mr-1"></i> 2 tasks</span>
|
||||||
|
<span><i class="fa fa-user mr-1"></i> zhaoyun</span>
|
||||||
|
<span><i class="fa fa-clock-o mr-1"></i> 常驻 Card</span>
|
||||||
|
</div>
|
||||||
|
<div class="progress-bar" style="width: 120px;">
|
||||||
|
<div class="progress-fill bg-green-500" style="width: 50%"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- ==================== Mail Tab ==================== -->
|
||||||
|
<div id="page-mail" class="hidden" style="height: calc(100vh - 56px);">
|
||||||
|
<div class="flex h-full">
|
||||||
|
<!-- Mail 列表 -->
|
||||||
|
<div class="w-2/3 border-r border-court-border flex flex-col">
|
||||||
|
<div class="border-b border-court-border p-4">
|
||||||
|
<div class="flex items-center justify-between">
|
||||||
|
<h2 class="text-lg font-bold text-amber-300">
|
||||||
|
<i class="fa fa-envelope mr-2"></i>Sanguo Mail
|
||||||
|
</h2>
|
||||||
|
<div class="flex items-center gap-3">
|
||||||
|
<select class="bg-court-card border border-court-border text-amber-400 rounded px-2 py-1 text-sm">
|
||||||
|
<option>全部</option>
|
||||||
|
<option>未读</option>
|
||||||
|
<option>已读</option>
|
||||||
|
<option>已执行</option>
|
||||||
|
</select>
|
||||||
|
<button class="bg-court-card border border-court-border text-amber-400 px-3 py-1 rounded text-sm hover:border-court-gold">
|
||||||
|
<i class="fa fa-refresh mr-1"></i> 刷新
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex-1 overflow-y-auto">
|
||||||
|
<!-- Mail 1: 未读 -->
|
||||||
|
<div class="mail-row unread flex items-center px-4 py-3 border-b border-court-border cursor-pointer" onclick="selectMail(1)">
|
||||||
|
<div class="flex-1">
|
||||||
|
<div class="flex items-center gap-3 mb-1">
|
||||||
|
<span class="text-sm font-medium text-amber-200">Mail #301</span>
|
||||||
|
<span class="badge bg-court-gold text-court-dark">未读</span>
|
||||||
|
<span class="text-xs text-amber-600">23:40</span>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center gap-2 text-sm">
|
||||||
|
<span class="text-amber-400">从</span>
|
||||||
|
<span class="badge bg-red-900 text-red-300">main</span>
|
||||||
|
<span class="text-amber-600">→</span>
|
||||||
|
<span class="badge bg-purple-900 text-purple-300">pangtong
|
||||||
Reference in New Issue
Block a user