feat: 投资资讯日报查询页 + 文档更新 + 拉取服务器最新内容
- 新增 charts/news_reports.php 报告查询导航页(列表+详情一体,fetch API 渲染) - 新增 js/newsReports.js:AI 摘要/新闻联播/财经新闻/公告调研/数据总览固定模块,stats 归一化兼容多种格式 - index-2.php 研究报告卡片改为导航链接,移除 PHP 目录下拉框 - 更新 AGENTS.md/CLAUDE.md(路径、页面清单、数据模式等核实修正) - 同步服务器拉取的文档:quant 使用手册、podcast-docs - 生成 continuation.md 会话检查点
This commit is contained in:
@@ -0,0 +1,198 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>投资资讯日报</title>
|
||||
<script src="/lib/js/tailwindcss-3.4.17.js"></script>
|
||||
<script type="text/javascript" src="/lib/js/jquery-3.6.0.min.js"></script>
|
||||
<link href="/lib/css/fontawesome-6.4.all.min.css" rel="stylesheet">
|
||||
<script>
|
||||
tailwind.config = {
|
||||
theme: {
|
||||
extend: {
|
||||
colors: {
|
||||
primary: '#165DFF',
|
||||
secondary: '#36D399',
|
||||
neutral: '#F8FAFC',
|
||||
dark: '#1E293B'
|
||||
},
|
||||
fontFamily: {
|
||||
inter: ['Inter', 'system-ui', 'sans-serif'],
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style type="text/tailwindcss">
|
||||
@layer components {
|
||||
.badge {
|
||||
@apply inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-semibold whitespace-nowrap;
|
||||
}
|
||||
.badge-finance { @apply bg-blue-100 text-blue-700; }
|
||||
.badge-intl { @apply bg-violet-100 text-violet-700; }
|
||||
.badge-pos { @apply bg-emerald-100 text-emerald-700; }
|
||||
.badge-neg { @apply bg-red-100 text-red-700; }
|
||||
.badge-neu { @apply bg-gray-200 text-gray-600; }
|
||||
|
||||
.type-tab {
|
||||
@apply px-4 py-2 rounded-lg text-sm font-medium text-gray-500 hover:text-primary hover:bg-primary/5 transition-colors cursor-pointer;
|
||||
}
|
||||
.tab-active { @apply bg-primary text-white hover:text-white hover:bg-primary shadow-sm; }
|
||||
|
||||
.btn-view {
|
||||
@apply inline-flex items-center px-3 py-1.5 rounded-lg text-xs font-semibold text-primary bg-primary/10 hover:bg-primary hover:text-white transition-colors whitespace-nowrap;
|
||||
}
|
||||
|
||||
.report-card {
|
||||
@apply bg-white rounded-xl shadow-sm border border-gray-100 p-5 hover:shadow-md hover:border-primary/30 transition-all cursor-pointer;
|
||||
}
|
||||
.stat-bit {
|
||||
@apply inline-flex items-center gap-1 px-2 py-1 rounded-md bg-gray-50 border border-gray-100 text-xs text-gray-500;
|
||||
}
|
||||
|
||||
.module-card {
|
||||
@apply bg-white rounded-xl shadow-sm border border-gray-100 p-5 md:p-6 mb-6;
|
||||
}
|
||||
.module-title {
|
||||
@apply flex items-center gap-2 text-xl font-bold text-dark mb-4;
|
||||
}
|
||||
.module-sub { @apply ml-2 text-sm font-normal text-gray-400; }
|
||||
|
||||
.ai-summary-list {
|
||||
@apply space-y-2.5 text-base leading-relaxed text-gray-700;
|
||||
}
|
||||
.ai-summary-list li {
|
||||
@apply pl-4 relative;
|
||||
}
|
||||
.ai-summary-list li::before {
|
||||
content: "▍";
|
||||
@apply absolute left-0 text-primary;
|
||||
}
|
||||
|
||||
.event-row { @apply flex gap-3 py-3.5 px-2 hover:bg-gray-50 transition-colors rounded-lg; }
|
||||
.event-left { @apply flex flex-col items-center gap-1 pt-0.5 shrink-0 w-9; }
|
||||
.event-rank { @apply text-sm text-gray-400 font-mono; }
|
||||
.event-body { @apply flex-1 min-w-0; }
|
||||
.event-title-line { @apply flex items-start gap-2.5; }
|
||||
.imp-badge { @apply shrink-0 mt-0.5 inline-flex items-center justify-center w-7 h-7 rounded-md text-sm font-bold bg-gray-100 text-gray-500; }
|
||||
.imp-5 { @apply bg-red-100 text-red-700; }
|
||||
.imp-4 { @apply bg-orange-100 text-orange-600; }
|
||||
.event-title { @apply text-base font-medium text-gray-800 leading-snug; }
|
||||
.event-link { @apply text-gray-800 hover:text-primary transition-colors; }
|
||||
.event-summary { @apply mt-1.5 text-sm text-gray-500 leading-relaxed line-clamp-3; }
|
||||
.event-meta { @apply mt-2.5 flex flex-wrap gap-x-4 gap-y-1 text-sm text-gray-400; }
|
||||
.meta-item { @apply inline-flex items-center; }
|
||||
|
||||
.stats-grid { @apply grid grid-cols-3 md:grid-cols-6 gap-3 mb-4; }
|
||||
.stat-card {
|
||||
@apply bg-gray-50 border border-gray-100 rounded-xl p-3 text-center;
|
||||
}
|
||||
.stat-num { @apply text-2xl font-bold text-dark; }
|
||||
.stat-label { @apply mt-1.5 text-sm text-gray-500; }
|
||||
.stats-sub { @apply grid grid-cols-2 md:grid-cols-5 gap-3 mb-3; }
|
||||
.stats-sub-title { @apply text-base font-semibold text-gray-600 mt-2 mb-2; }
|
||||
|
||||
.kv-table-wrap { @apply mb-4; }
|
||||
.kv-title { @apply text-base font-semibold text-gray-600 mb-1.5; }
|
||||
.kv-table { @apply w-full text-base border-collapse; }
|
||||
.kv-table th { @apply text-left text-sm font-semibold text-gray-500 bg-gray-50 px-3 py-2 border border-gray-100; }
|
||||
.kv-table td { @apply px-3 py-2 border border-gray-100 text-gray-700; }
|
||||
|
||||
.sentiment-wrap { @apply mb-4; }
|
||||
.sentiment-bar { @apply flex h-4 rounded-full overflow-hidden mb-2; }
|
||||
.s-pos { @apply bg-emerald-500; }
|
||||
.s-neg { @apply bg-red-500; }
|
||||
.s-neu { @apply bg-gray-400; }
|
||||
.sentiment-legend { @apply flex flex-wrap gap-4 text-xs text-gray-500; }
|
||||
.s-dot { @apply inline-block w-2.5 h-2.5 rounded-full mr-1; }
|
||||
.s-dot.s-pos { @apply bg-emerald-500; }
|
||||
.s-dot.s-neg { @apply bg-red-500; }
|
||||
.s-dot.s-neu { @apply bg-gray-400; }
|
||||
|
||||
.source-grid { @apply grid grid-cols-3 md:grid-cols-6 gap-3; }
|
||||
.source-item { @apply bg-gray-50 border border-gray-100 rounded-lg p-2.5 text-center; }
|
||||
.s-count { @apply text-xl font-bold text-dark; }
|
||||
.s-name { @apply mt-1 text-sm text-gray-500 truncate; }
|
||||
|
||||
.empty-box {
|
||||
@apply bg-white rounded-xl shadow-sm border border-gray-100 py-16 text-center text-gray-400;
|
||||
}
|
||||
.empty-box i { @apply text-4xl mb-3 block; }
|
||||
.empty-box p { @apply text-sm; }
|
||||
|
||||
.filter-input {
|
||||
@apply px-3 py-2 border border-gray-300 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-primary/50;
|
||||
}
|
||||
.btn-primary {
|
||||
@apply inline-flex items-center px-4 py-2 bg-primary text-white rounded-lg hover:bg-blue-600 transition-colors text-sm font-medium;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-gray-50 font-inter text-dark min-h-screen">
|
||||
<header class="bg-white shadow-sm sticky top-0 z-50">
|
||||
<div class="container mx-auto px-4 py-4 flex justify-between items-center">
|
||||
<div class="flex items-center space-x-2">
|
||||
<i class="fa-solid fa-newspaper text-primary text-2xl"></i>
|
||||
<h1 class="text-xl font-bold">投资资讯日报</h1>
|
||||
<span class="text-xs text-gray-400 hidden md:inline ml-1">国内 / 国际 · AI 深度研究日报</span>
|
||||
</div>
|
||||
<a href="/index-2.php" class="inline-flex items-center text-sm text-gray-500 hover:text-primary transition-colors">
|
||||
<i class="fa-solid fa-house mr-1"></i>返回门户
|
||||
</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="container mx-auto px-4 py-6 max-w-5xl">
|
||||
<!-- 筛选栏 -->
|
||||
<div class="bg-white rounded-xl shadow-sm border border-gray-100 p-4 mb-6">
|
||||
<div class="flex flex-wrap items-center gap-3">
|
||||
<div class="flex bg-gray-100 rounded-lg p-1">
|
||||
<span class="type-tab tab-active" data-type="">全部</span>
|
||||
<span class="type-tab" data-type="finance">国内</span>
|
||||
<span class="type-tab" data-type="intl">国际</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-2 ml-auto flex-wrap">
|
||||
<label class="text-sm text-gray-500">开始</label>
|
||||
<input type="date" id="startDate" class="filter-input">
|
||||
<label class="text-sm text-gray-500">结束</label>
|
||||
<input type="date" id="endDate" class="filter-input">
|
||||
<button id="btnQuery" class="btn-primary"><i class="fa-solid fa-magnifying-glass mr-1"></i>查询</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-3 text-sm text-gray-400" id="rangeInfo"></div>
|
||||
</div>
|
||||
|
||||
<!-- 列表视图 -->
|
||||
<div id="listView">
|
||||
<div id="reportList" class="space-y-4"></div>
|
||||
</div>
|
||||
|
||||
<!-- 详情视图 -->
|
||||
<div id="detailView" class="hidden">
|
||||
<div class="flex items-center justify-between mb-4 flex-wrap gap-2">
|
||||
<button id="btnBack" class="inline-flex items-center text-sm text-gray-500 hover:text-primary transition-colors">
|
||||
<i class="fa-solid fa-arrow-left mr-1"></i>返回列表
|
||||
</button>
|
||||
<div id="detailHeader" class="flex items-center gap-3 flex-wrap"></div>
|
||||
</div>
|
||||
<div id="detailContent"></div>
|
||||
</div>
|
||||
|
||||
<!-- 加载遮罩 -->
|
||||
<div id="loadingOverlay" class="hidden fixed inset-0 bg-white/70 backdrop-blur-sm z-40 flex items-center justify-center">
|
||||
<div class="text-center">
|
||||
<div class="inline-block w-10 h-10 border-4 border-primary border-t-transparent rounded-full animate-spin"></div>
|
||||
<p class="mt-3 text-sm text-gray-500" id="loadingMsg">加载中...</p>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="text-center text-gray-400 text-sm py-6">
|
||||
数据来源: api.doorcome.cn 日报接口 · 仅供个人研究参考
|
||||
</footer>
|
||||
|
||||
<script src="/js/newsReports.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user