PyBot/web/templates/index.html
2026-05-03 19:02:51 +08:00

345 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>资讯推送Web端</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
<!-- 引入 Layui 的 CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/layui-src/dist/css/layui.css">
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
margin: 0;
padding: 20px;
background-color: #f8f9fa;
line-height: 1.6;
}
.layui-container {
max-width: 1200px;
margin: 0 auto;
background: white;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
padding: 20px;
}
h1 {
color: #333;
font-size: 1.8em;
text-align: center;
margin-bottom: 20px;
border-bottom: 2px solid #009688;
padding-bottom: 10px;
}
#markdown-content {
white-space: pre-wrap;
font-size: 1em;
padding: 15px;
background-color: #fafafa;
border-radius: 4px;
min-height: 400px;
}
/* 按钮容器样式优化 */
#button-container {
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 10px;
margin: 15px 0;
}
#button-container .layui-btn {
margin: 5px;
transition: all 0.3s ease;
min-width: 120px;
}
/* 不同类型的按钮使用不同颜色 */
#sec-news-btn { background-color: #FF5722; }
#tech-passage-btn { background-color: #2196F3; }
#baidu-news-btn { background-color: #2F4F4F; }
#github-news-btn { background-color: #333; }
#wx-news-btn { background-color: #07C160; }
/* 按钮悬停效果 */
#button-container .layui-btn:hover {
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0,0,0,0.2);
}
/* 折叠面板样式优化 */
.layui-colla-item {
margin-bottom: 15px;
border-radius: 4px;
overflow: hidden;
}
.layui-colla-title {
background-color: #f2f2f2;
font-weight: 600;
}
/* 提示文字样式 */
.info-text {
text-align: center;
color: #666;
font-size: 0.9em;
margin: 10px 0 20px;
padding: 10px;
background-color: #f0f8ff;
border-radius: 4px;
}
/* 返回顶部按钮样式 - 已优化 */
#back-to-top {
display: none; /* 初始隐藏,滚动后显示 */
position: fixed;
bottom: 20px;
right: 20px;
z-index: 1000;
font-size: 14px;
border: none;
outline: none;
background-color: #009688; /* 使用layui主题色 */
color: white;
cursor: pointer;
padding: 12px 15px;
border-radius: 50%;
box-shadow: 0 2px 10px rgba(0,0,0,0.3);
transition: background-color 0.3s;
}
#back-to-top:hover {
background-color: #007a6e;
transform: scale(1.1); /* 悬停放大效果 */
}
#markdown-content a {
color: #009688;
text-decoration: none;
}
#markdown-content a:hover {
text-decoration: underline;
}
/* 错误消息样式 */
.error-message {
text-align: center;
padding: 40px;
color: #ff6b6b;
font-size: 1.1em;
}
/* 加载动画样式 */
.loading {
text-align: center;
padding: 50px;
}
/* 移动端样式调整 */
@media only screen and (max-width: 600px) {
body {
margin: 5px;
padding: 10px;
}
.layui-container {
padding: 15px;
}
h1 {
font-size: 1.5em;
}
#markdown-content {
font-size: 0.9em;
padding: 10px;
}
#back-to-top {
font-size: 14px;
padding: 10px;
bottom: 15px;
right: 15px;
}
/* 按钮样式调整 */
#button-container {
flex-direction: column; /* 换行显示按钮 */
align-items: center; /* 按钮居中对齐 */
}
#button-container .layui-btn {
margin: 8px 0; /* 增加按钮间距 */
width: 95%; /* 调整按钮宽度 */
max-width: 300px; /* 设置最大宽度 */
}
}
/* 平滑滚动 */
html {
scroll-behavior: smooth;
}
</style>
</head>
<body>
<div class="layui-container">
<h1 class="layui-title" id="page-title">📰 资讯推送中心</h1>
<!-- 信息提示 -->
<div class="info-text">
<strong>💡 提示:</strong>为保证网页运作性能默认仅读取前20条记录
</div>
<!-- 折叠面板 -->
<div class="layui-collapse" lay-accordion>
<div class="layui-colla-item">
<h2 class="layui-colla-title">📋 选择资讯类型</h2>
<div class="layui-colla-content layui-show">
<div id="button-container">
<button id="sec-news-btn" class="layui-btn layui-btn-sm">🔒 安全新闻</button>
<button id="tech-passage-btn" class="layui-btn layui-btn-sm">💻 技术文章</button>
<button id="baidu-news-btn" class="layui-btn layui-btn-sm">📊 百度新闻</button>
<button id="github-news-btn" class="layui-btn layui-btn-sm">🐙 GitHub动态</button>
<button id="wx-news-btn" class="layui-btn layui-btn-sm">💬 微信文章</button>
</div>
</div>
</div>
</div>
<div id="markdown-content" class="layui-card-body"></div>
</div>
<!-- 返回顶部按钮 -->
<button id="back-to-top" title="返回顶部">
<i class="layui-icon layui-icon-top"></i>
</button>
<!-- 引入 Layui 的 JS -->
<script src="https://cdn.jsdelivr.net/npm/layui-src/dist/layui.js"></script>
<script>
// 优化后的JavaScript代码
layui.use(['layer', 'element'], function(){
var layer = layui.layer;
var element = layui.element;
var buttonMap = {
'sec-news-btn': '/get-sec-news',
'tech-passage-btn': '/get-tech-passage',
'baidu-news-btn': '/get-baidu-news',
'github-news-btn': '/get-github-news',
'wx-news-btn': '/get-wx-news'
};
var titleMap = {
'/get-sec-news': '🔒 安全新闻',
'/get-tech-passage': '💻 技术文章',
'/get-baidu-news': '📊 百度新闻',
'/get-github-news': '🐙 GitHub动态',
'/get-wx-news': '💬 微信文章'
};
function updateTitle(url) {
document.getElementById('page-title').innerText = titleMap[url] || '📰 资讯推送中心';
}
function fetchContent(url, buttonId) {
// 更新所有按钮状态
Object.keys(buttonMap).forEach(key => {
const btn = document.getElementById(key);
btn.disabled = (key === buttonId);
btn.style.opacity = (key === buttonId) ? '0.7' : '1';
});
updateTitle(url);
// 显示加载动画
document.getElementById('markdown-content').innerHTML =
'<div class="loading"><i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i> 加载中...</div>';
fetch(url)
.then(response => response.json())
.then(data => {
if (data.content) {
const htmlContent = marked.parse(data.content);
document.getElementById('markdown-content').innerHTML = htmlContent;
addTargetBlankToLinks();
} else {
document.getElementById('markdown-content').innerHTML = '<div class="error-message"><p>❌ 加载历史推送文件时出错!(推送历史记录为空)</p></div>';
}
})
.catch(error => {
console.error('获取源文件失败:', error);
document.getElementById('markdown-content').innerHTML = '<div class="error-message"><p>❌ 无法加载历史推送文件!</p></div>';
layer.msg('加载资源失败', {icon: 2});
});
}
// 为按钮添加点击事件
Object.keys(buttonMap).forEach(key => {
document.getElementById(key).addEventListener('click', function() {
fetchContent(buttonMap[key], key);
// 移动设备上自动收起面板
if (isMobileDevice()) {
$('.layui-colla-content').removeClass('layui-show');
}
});
});
// 页面加载时默认获取安全新闻
var initialButtonId = 'sec-news-btn';
fetchContent(buttonMap[initialButtonId], initialButtonId);
});
// 优化的滚动检测函数
function scrollFunction() {
const scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
const backToTopBtn = document.getElementById("back-to-top");
if (scrollTop > 300) {
backToTopBtn.style.display = "block";
} else {
backToTopBtn.style.display = "none";
}
}
// 显示或隐藏返回顶部按钮
window.onscroll = function() {
scrollFunction();
};
// 返回顶部按钮点击事件 - 已优化
document.getElementById("back-to-top").addEventListener("click", function() {
// 使用更平滑的滚动方式
window.scrollTo({
top: 0,
behavior: 'smooth'
});
});
// 检测是否为移动设备
function isMobileDevice() {
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
}
function addTargetBlankToLinks() {
var links = document.querySelectorAll('#markdown-content a');
links.forEach(function(link) {
link.setAttribute('target', '_blank');
});
}
// 在页面加载完成后调用该函数
window.onload = function() {
addTargetBlankToLinks();
};
</script>
</body>
</html>