362 lines
16 KiB
HTML
362 lines
16 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="https://cdn.jsdelivr.net/npm/remixicon@3.5.0/fonts/remixicon.css">
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<!-- 头部 -->
|
|
<header class="header">
|
|
<h1><i class="ri-robot-line"></i> 参数数据自动化管理系统</h1>
|
|
<div class="header-actions">
|
|
<button onclick="refreshData()" class="btn btn-secondary">
|
|
<i class="ri-refresh-line"></i> 刷新数据
|
|
</button>
|
|
<div class="status-badge">
|
|
<span id="system-status" class="status-dot"></span>
|
|
<span id="status-text">系统正常</span>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- 统计卡片 -->
|
|
<div class="stats-grid">
|
|
<div class="stat-card">
|
|
<div class="stat-icon"><i class="ri-file-list-3-line"></i></div>
|
|
<div class="stat-content">
|
|
<div class="stat-label">内容库文章</div>
|
|
<div class="stat-value" id="articles-count">0</div>
|
|
</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-icon"><i class="ri-time-line"></i></div>
|
|
<div class="stat-content">
|
|
<div class="stat-label">待处理产品</div>
|
|
<div class="stat-value" id="pending-count">0</div>
|
|
</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-icon processing"><i class="ri-loader-4-line"></i></div>
|
|
<div class="stat-content">
|
|
<div class="stat-label">处理中</div>
|
|
<div class="stat-value" id="processing-count">0</div>
|
|
</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-icon success"><i class="ri-check-line"></i></div>
|
|
<div class="stat-content">
|
|
<div class="stat-label">最近成功</div>
|
|
<div class="stat-value" id="success-count">0</div>
|
|
</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-icon error"><i class="ri-close-circle-line"></i></div>
|
|
<div class="stat-content">
|
|
<div class="stat-label">最近失败</div>
|
|
<div class="stat-value" id="failed-count">0</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 主内容区域 -->
|
|
<div class="main-content">
|
|
<!-- 左侧:待处理产品 -->
|
|
<div class="panel">
|
|
<div class="panel-header">
|
|
<h2><i class="ri-list-check-2"></i> 待处理产品列表</h2>
|
|
<div class="panel-actions">
|
|
<button onclick="showAddProductModal()" class="btn btn-primary">
|
|
<i class="ri-add-line"></i> 添加产品
|
|
</button>
|
|
<button onclick="processBatch()" class="btn btn-success">
|
|
<i class="ri-play-line"></i> 批量处理
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="panel-body">
|
|
<table class="data-table">
|
|
<thead>
|
|
<tr>
|
|
<th>产品名称</th>
|
|
<th>分类</th>
|
|
<th>子分类</th>
|
|
<th>优先级</th>
|
|
<th>来源</th>
|
|
<th>添加时间</th>
|
|
<th>操作</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="pending-table">
|
|
<tr><td colspan="7" class="empty-text">暂无待处理产品</td></tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 右侧:内容库和搜索入口 -->
|
|
<div class="panel">
|
|
<div class="panel-header">
|
|
<h2><i class="ri-folder-line"></i> 内容库</h2>
|
|
<a href="/library" class="btn btn-primary btn-sm">
|
|
<i class="ri-external-link-line"></i> 进入
|
|
</a>
|
|
</div>
|
|
<div class="panel-body">
|
|
<div class="quick-stats">
|
|
<div class="quick-stat-item">
|
|
<span class="quick-stat-value" id="quick-articles-count">-</span>
|
|
<span class="quick-stat-label">篇文章</span>
|
|
</div>
|
|
<div class="quick-stat-item">
|
|
<span class="quick-stat-value" id="quick-categories-count">-</span>
|
|
<span class="quick-stat-label">个分类</span>
|
|
</div>
|
|
<div class="quick-stat-item">
|
|
<span class="quick-stat-value" id="quick-today-count">-</span>
|
|
<span class="quick-stat-label">今日新增</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel">
|
|
<div class="panel-header">
|
|
<h2><i class="ri-search-line"></i> 互联网搜索</h2>
|
|
<a href="/search" class="btn btn-primary btn-sm">
|
|
<i class="ri-external-link-line"></i> 进入
|
|
</a>
|
|
</div>
|
|
<div class="panel-body">
|
|
<div class="quick-stats">
|
|
<div class="quick-stat-item">
|
|
<span class="quick-stat-value" id="quick-failed-count">-</span>
|
|
<span class="quick-stat-label">抓取失败</span>
|
|
</div>
|
|
<div class="quick-stat-item">
|
|
<span class="quick-stat-label">支持引擎</span>
|
|
<span class="quick-stat-value">Bing/百度/Google</span>
|
|
</div>
|
|
</div>
|
|
<div class="search-quick-info">
|
|
<small>支持一键保存所有结果到内容库</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 处理历史 -->
|
|
<div class="panel full-width">
|
|
<div class="panel-header">
|
|
<h2><i class="ri-history-line"></i> 处理历史</h2>
|
|
<button onclick="loadHistory()" class="btn btn-secondary btn-sm">
|
|
<i class="ri-refresh-line"></i>
|
|
</button>
|
|
</div>
|
|
<div class="panel-body">
|
|
<table class="data-table">
|
|
<thead>
|
|
<tr>
|
|
<th>产品名称</th>
|
|
<th>分类</th>
|
|
<th>子分类</th>
|
|
<th>状态</th>
|
|
<th>审核ID</th>
|
|
<th>提交时间</th>
|
|
<th>详情</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="history-table">
|
|
<tr><td colspan="7" class="empty-text">暂无处理历史</td></tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 系统配置 -->
|
|
<div class="panel full-width">
|
|
<div class="panel-header">
|
|
<h2><i class="ri-settings-3-line"></i> 系统配置</h2>
|
|
<button onclick="saveConfig()" class="btn btn-primary btn-sm">
|
|
<i class="ri-save-line"></i> 保存配置
|
|
</button>
|
|
</div>
|
|
<div class="panel-body">
|
|
<div class="config-form">
|
|
<div class="config-item">
|
|
<label>自动处理</label>
|
|
<select id="auto-process-enabled">
|
|
<option value="true">启用</option>
|
|
<option value="false">禁用</option>
|
|
</select>
|
|
</div>
|
|
<div class="config-item">
|
|
<label>处理间隔(秒)</label>
|
|
<input type="number" id="process-interval" value="300" min="60" max="3600">
|
|
</div>
|
|
<div class="config-item">
|
|
<label>批量处理数量</label>
|
|
<input type="number" id="batch-size" value="5" min="1" max="20">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 添加产品模态框 -->
|
|
<div id="add-product-modal" class="modal">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h3><i class="ri-add-circle-line"></i> 添加待处理产品</h3>
|
|
<button onclick="closeModal('add-product-modal')" class="close-btn">
|
|
<i class="ri-close-line"></i>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<form id="add-product-form">
|
|
<div class="form-group">
|
|
<label>产品名称 *</label>
|
|
<input type="text" id="product-name" required placeholder="例如:GPT-4o">
|
|
</div>
|
|
<div class="form-group">
|
|
<label>分类</label>
|
|
<input type="text" id="product-category" placeholder="例如:AI模型">
|
|
</div>
|
|
<div class="form-group">
|
|
<label>子分类</label>
|
|
<input type="text" id="product-subcategory" placeholder="例如:model">
|
|
</div>
|
|
<div class="form-group">
|
|
<label>优先级</label>
|
|
<input type="number" id="product-priority" value="5" min="0" max="100">
|
|
</div>
|
|
<div class="form-group">
|
|
<label>批量添加(JSON格式)</label>
|
|
<textarea id="batch-products" rows="5" placeholder='[{"product_name":"产品1"},{"product_name":"产品2"}]'></textarea>
|
|
<small class="hint">批量添加时,单产品字段将被忽略</small>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button onclick="closeModal('add-product-modal')" class="btn btn-secondary">取消</button>
|
|
<button onclick="addProduct()" class="btn btn-primary">添加</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 添加文章模态框 -->
|
|
<div id="add-article-modal" class="modal">
|
|
<div class="modal-content large">
|
|
<div class="modal-header">
|
|
<h3><i class="ri-file-add-line"></i> 添加文章到内容库</h3>
|
|
<button onclick="closeModal('add-article-modal')" class="close-btn">
|
|
<i class="ri-close-line"></i>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<form id="add-article-form">
|
|
<div class="form-row">
|
|
<div class="form-group">
|
|
<label>产品名称 *(多个用逗号分隔)</label>
|
|
<input type="text" id="article-products" required placeholder="GPT-4o, Claude 3">
|
|
</div>
|
|
<div class="form-group">
|
|
<label>分类</label>
|
|
<input type="text" id="article-category" placeholder="AI模型">
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>关键词(多个用逗号分隔)</label>
|
|
<input type="text" id="article-keywords" placeholder="大模型, 多模态, 推理">
|
|
</div>
|
|
<div class="form-group">
|
|
<label>摘要总结 *</label>
|
|
<textarea id="article-summary" rows="3" required placeholder="文章简要总结..."></textarea>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>具体内容 *</label>
|
|
<textarea id="article-content" rows="10" required placeholder="文章详细内容..."></textarea>
|
|
</div>
|
|
<div class="form-row">
|
|
<div class="form-group">
|
|
<label>来源 *</label>
|
|
<input type="text" id="article-source" required placeholder="官方网站/新闻">
|
|
</div>
|
|
<div class="form-group">
|
|
<label>URL</label>
|
|
<input type="url" id="article-url" placeholder="https://...">
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button onclick="closeModal('add-article-modal')" class="btn btn-secondary">取消</button>
|
|
<button onclick="addArticle()" class="btn btn-primary">添加</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 搜索结果详情模态框 -->
|
|
<div id="search-result-modal" class="modal">
|
|
<div class="modal-content large">
|
|
<div class="modal-header">
|
|
<h3><i class="ri-external-link-line"></i> 搜索结果详情</h3>
|
|
<button onclick="closeModal('search-result-modal')" class="close-btn">
|
|
<i class="ri-close-line"></i>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body" id="search-result-body">
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button onclick="closeModal('search-result-modal')" class="btn btn-secondary">关闭</button>
|
|
<button onclick="saveSearchResultToLibrary()" class="btn btn-success">
|
|
<i class="ri-save-line"></i> 保存到内容库
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 文章详情模态框 -->
|
|
<div id="article-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('article-detail-modal')" class="close-btn">
|
|
<i class="ri-close-line"></i>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body" id="article-detail-body">
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button onclick="closeModal('article-detail-modal')" class="btn btn-secondary">关闭</button>
|
|
<button onclick="deleteArticle()" class="btn btn-danger">删除</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 处理详情模态框 -->
|
|
<div id="process-detail-modal" class="modal">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h3><i class="ri-information-line"></i> 处理详情</h3>
|
|
<button onclick="closeModal('process-detail-modal')" class="close-btn">
|
|
<i class="ri-close-line"></i>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body" id="process-detail-body">
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button onclick="closeModal('process-detail-modal')" class="btn btn-secondary">关闭</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 提示消息 -->
|
|
<div id="toast" class="toast"></div>
|
|
|
|
<script src="/static/js/app.js"></script>
|
|
</body>
|
|
</html> |