- 处理流程抓取失败时记录到失败URL库 - /search页面新增产品处理会话展示区 - 同时显示后台抓取任务和产品处理会话 - 自动刷新同时更新三种数据:任务、会话、失败URL
195 lines
8.5 KiB
HTML
195 lines
8.5 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>互联网搜索 - 参数数据自动化管理系统</title>
|
|
<link rel="stylesheet" href="/static/css/style.css">
|
|
<link rel="stylesheet" href="/static/css/search.css">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/remixicon@3.5.0/fonts/remixicon.css">
|
|
</head>
|
|
<body>
|
|
<div class="search-container">
|
|
<!-- 头部 -->
|
|
<header class="search-header">
|
|
<div class="header-left">
|
|
<a href="/" class="back-link">
|
|
<i class="ri-arrow-left-line"></i> 返回主页
|
|
</a>
|
|
<h1><i class="ri-search-line"></i> 互联网搜索</h1>
|
|
</div>
|
|
<div class="header-right">
|
|
<div class="status-badge">
|
|
<span id="search-status" class="status-dot"></span>
|
|
<span id="status-text">就绪</span>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- 搜索区域 -->
|
|
<div class="search-box">
|
|
<div class="search-input-group">
|
|
<select id="search-engine" class="engine-select" title="选择搜索引擎">
|
|
<option value="bing_cn" selected>Bing 中国</option>
|
|
<option value="bing_global">Bing 国际</option>
|
|
<option value="google">Google</option>
|
|
<option value="baidu">百度</option>
|
|
</select>
|
|
<input type="text" id="search-keyword" placeholder="输入关键词搜索..." class="search-input-large">
|
|
<input type="number" id="search-count" value="10" min="1" max="20" class="count-input" title="结果数量">
|
|
<button onclick="doSearch()" class="btn btn-primary btn-large" id="search-btn">
|
|
<i class="ri-search-line"></i> 搜索
|
|
</button>
|
|
</div>
|
|
<div class="search-options">
|
|
<label class="checkbox-label">
|
|
<input type="checkbox" id="use-cache" checked>
|
|
<span>使用缓存结果(7天有效)</span>
|
|
</label>
|
|
<label class="checkbox-label">
|
|
<input type="checkbox" id="auto-fetch" checked>
|
|
<span>搜索后自动抓取内容</span>
|
|
</label>
|
|
<label class="checkbox-label">
|
|
<input type="checkbox" id="auto-save" checked>
|
|
<span>抓取后自动保存到内容库</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 搜索状态 -->
|
|
<div id="search-progress" class="search-progress" style="display: none;">
|
|
<div class="progress-bar">
|
|
<div class="progress-fill" id="progress-fill"></div>
|
|
</div>
|
|
<div class="progress-info">
|
|
<span class="progress-text" id="progress-text">正在搜索...</span>
|
|
<button onclick="stopAutoProcess()" class="btn btn-danger btn-sm" id="stop-btn" style="display: none;">
|
|
<i class="ri-stop-line"></i> 停止
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 搜索结果 -->
|
|
<div class="results-section">
|
|
<div class="results-header">
|
|
<h2><i class="ri-list-check"></i> 搜索结果</h2>
|
|
<div class="results-actions">
|
|
<span id="results-count" class="results-count">0 条结果</span>
|
|
<button onclick="saveAllResults()" class="btn btn-success" id="save-all-btn" disabled>
|
|
<i class="ri-save-line"></i> 一键保存全部
|
|
</button>
|
|
<button onclick="clearResults()" class="btn btn-secondary" id="clear-btn">
|
|
<i class="ri-delete-bin-line"></i> 清空
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="results-body">
|
|
<div id="search-results" class="search-results">
|
|
<div class="empty-text">输入关键词开始搜索</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 后台任务区域 -->
|
|
<div class="panel background-tasks-section">
|
|
<div class="panel-header">
|
|
<h2><i class="ri-cpu-line"></i> 后台抓取任务</h2>
|
|
<div class="panel-actions">
|
|
<button onclick="loadBackgroundTasks()" class="btn btn-secondary btn-sm">
|
|
<i class="ri-refresh-line"></i> 刷新
|
|
</button>
|
|
<button onclick="clearCompletedTasks()" class="btn btn-warning btn-sm">
|
|
<i class="ri-delete-bin-line"></i> 清理已完成
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="panel-body">
|
|
<div id="background-tasks-list" class="background-tasks-list">
|
|
<div class="empty-text">暂无后台任务</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 产品处理会话区域 -->
|
|
<div class="panel process-sessions-section">
|
|
<div class="panel-header">
|
|
<h2><i class="ri-play-circle-line"></i> 产品处理会话</h2>
|
|
<div class="panel-actions">
|
|
<a href="/process" class="btn btn-primary btn-sm">
|
|
<i class="ri-external-link-line"></i> 监控页面
|
|
</a>
|
|
<button onclick="loadProcessSessions()" class="btn btn-secondary btn-sm">
|
|
<i class="ri-refresh-line"></i> 刷新
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="panel-body">
|
|
<div id="process-sessions-list" class="background-tasks-list">
|
|
<div class="empty-text">暂无处理会话</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 失败URL区域 -->
|
|
<div class="panel failed-urls-section">
|
|
<div class="panel-header">
|
|
<h2><i class="ri-error-warning-line"></i> 抓取失败的网址</h2>
|
|
<div class="panel-actions">
|
|
<span id="failed-count" class="failed-count">0 条</span>
|
|
<button onclick="loadFailedUrls()" class="btn btn-secondary btn-sm">
|
|
<i class="ri-refresh-line"></i> 刷新
|
|
</button>
|
|
<button onclick="retryAllFailed()" class="btn btn-warning btn-sm">
|
|
<i class="ri-restart-line"></i> 全部重试
|
|
</button>
|
|
<button onclick="clearFailedUrls()" class="btn btn-danger btn-sm">
|
|
<i class="ri-delete-bin-line"></i> 清空
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="panel-body">
|
|
<div id="failed-urls-list" class="failed-urls-list">
|
|
<div class="empty-text">暂无失败记录</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 保存进度 -->
|
|
<div id="save-progress" class="save-progress" style="display: none;">
|
|
<div class="progress-info">
|
|
<i class="ri-loader-4-line"></i>
|
|
<span id="save-progress-text">正在保存...</span>
|
|
</div>
|
|
<div class="progress-bar">
|
|
<div class="progress-fill" id="save-fill"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 结果详情模态框 -->
|
|
<div id="result-detail-modal" class="modal">
|
|
<div class="modal-content large">
|
|
<div class="modal-header">
|
|
<h3><i class="ri-file-text-line"></i> 内容详情</h3>
|
|
<button onclick="closeModal('result-detail-modal')" class="close-btn">
|
|
<i class="ri-close-line"></i>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body" id="result-detail-body">
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button onclick="closeModal('result-detail-modal')" class="btn btn-secondary">关闭</button>
|
|
<button onclick="saveCurrentResult()" class="btn btn-success">
|
|
<i class="ri-save-line"></i> 保存到内容库
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 提示消息 -->
|
|
<div id="toast" class="toast"></div>
|
|
|
|
<script src="/static/js/search.js"></script>
|
|
</body>
|
|
</html> |