dashboard.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. <!-- 仪表板模板 -->
  2. <div class="dashboard fade-in">
  3. <div class="dashboard-header">
  4. <h1>研创·智核仪表板</h1>
  5. <p>欢迎使用智能科研助手平台</p>
  6. </div>
  7. <!-- 统计卡片 -->
  8. <div class="stats-section">
  9. <h2>数据概览</h2>
  10. <div id="stats-container" class="stats-grid">
  11. <!-- 统计数据将通过JavaScript动态加载 -->
  12. </div>
  13. </div>
  14. <!-- 快速操作 -->
  15. <div class="quick-actions">
  16. <h2>快速操作</h2>
  17. <div class="action-grid">
  18. <div class="action-card" data-action="show-modal" data-target="literature-search-modal">
  19. <div class="action-icon">🔍</div>
  20. <h3>文献搜索</h3>
  21. <p>智能搜索相关文献</p>
  22. </div>
  23. <div class="action-card" data-action="show-modal" data-target="paper-analysis-modal">
  24. <div class="action-icon">📊</div>
  25. <h3>论文分析</h3>
  26. <p>深度分析论文内容</p>
  27. </div>
  28. <div class="action-card" data-action="show-modal" data-target="academic-writing-modal">
  29. <div class="action-icon">✍️</div>
  30. <h3>学术写作</h3>
  31. <p>辅助生成学术文档</p>
  32. </div>
  33. <div class="action-card" data-action="navigate" data-target="/papers/new">
  34. <div class="action-icon">📄</div>
  35. <h3>添加论文</h3>
  36. <p>手动添加论文信息</p>
  37. </div>
  38. </div>
  39. </div>
  40. <!-- 最近任务 -->
  41. <div class="recent-tasks">
  42. <h2>最近任务</h2>
  43. <div id="recent-tasks-container">
  44. <!-- 最近任务将通过JavaScript动态加载 -->
  45. </div>
  46. <div class="view-all">
  47. <a href="/tasks" class="btn btn-outline">查看所有任务</a>
  48. </div>
  49. </div>
  50. <!-- 系统状态 -->
  51. <div class="system-status">
  52. <h2>系统状态</h2>
  53. <div class="status-grid">
  54. <div class="status-item">
  55. <div class="status-indicator status-online"></div>
  56. <span>API服务</span>
  57. <span class="status-text">在线</span>
  58. </div>
  59. <div class="status-item">
  60. <div class="status-indicator status-online"></div>
  61. <span>向量数据库</span>
  62. <span class="status-text">正常</span>
  63. </div>
  64. <div class="status-item">
  65. <div class="status-indicator status-online"></div>
  66. <span>智能体服务</span>
  67. <span class="status-text">运行中</span>
  68. </div>
  69. <div class="status-item">
  70. <div class="status-indicator status-warning"></div>
  71. <span>存储空间</span>
  72. <span class="status-text">75%</span>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. <!-- 文献搜索模态框 -->
  78. <div id="literature-search-modal" class="modal">
  79. <div class="modal-content">
  80. <div class="modal-header">
  81. <h3 class="modal-title">智能文献搜索</h3>
  82. <button class="modal-close" data-action="close-modal">&times;</button>
  83. </div>
  84. <div class="modal-body">
  85. <form class="ajax-form" data-endpoint="/tasks" data-method="POST" data-redirect="/tasks/{id}">
  86. <div class="form-group">
  87. <label class="form-label">搜索关键词</label>
  88. <input type="text" name="query" class="form-control" placeholder="输入搜索关键词..." required>
  89. </div>
  90. <div class="form-group">
  91. <label class="form-label">最大论文数量</label>
  92. <select name="max_papers" class="form-select">
  93. <option value="10">10篇</option>
  94. <option value="20" selected>20篇</option>
  95. <option value="50">50篇</option>
  96. <option value="100">100篇</option>
  97. </select>
  98. </div>
  99. <div class="form-group">
  100. <label class="form-label">发表年份范围</label>
  101. <div class="year-range">
  102. <input type="number" name="year_start" class="form-control" placeholder="起始年份" min="1900" max="2024">
  103. <span>至</span>
  104. <input type="number" name="year_end" class="form-control" placeholder="结束年份" min="1900" max="2024">
  105. </div>
  106. </div>
  107. <div class="form-group">
  108. <label class="form-label">期刊/会议</label>
  109. <input type="text" name="venues" class="form-control" placeholder="输入期刊或会议名称,多个用逗号分隔">
  110. </div>
  111. <input type="hidden" name="title" value="文献搜索任务">
  112. <input type="hidden" name="task_type" value="literature_search">
  113. <input type="hidden" name="priority" value="medium">
  114. </form>
  115. </div>
  116. <div class="modal-footer">
  117. <button type="button" class="btn btn-outline" data-action="close-modal">取消</button>
  118. <button type="submit" form="ajax-form" class="btn btn-primary">开始搜索</button>
  119. </div>
  120. </div>
  121. </div>
  122. <!-- 论文分析模态框 -->
  123. <div id="paper-analysis-modal" class="modal">
  124. <div class="modal-content">
  125. <div class="modal-header">
  126. <h3 class="modal-title">论文分析</h3>
  127. <button class="modal-close" data-action="close-modal">&times;</button>
  128. </div>
  129. <div class="modal-body">
  130. <form class="ajax-form" data-endpoint="/tasks" data-method="POST" data-redirect="/tasks/{id}">
  131. <div class="form-group">
  132. <label class="form-label">选择论文</label>
  133. <div class="paper-selector">
  134. <!-- 论文选择器将通过JavaScript动态加载 -->
  135. </div>
  136. </div>
  137. <div class="form-group">
  138. <label class="form-label">分析类型</label>
  139. <select name="analysis_type" class="form-select" required>
  140. <option value="">请选择分析类型</option>
  141. <option value="comprehensive">综合分析</option>
  142. <option value="methodology">方法论分析</option>
  143. <option value="findings">研究发现分析</option>
  144. <option value="gap">研究缺口分析</option>
  145. <option value="trend">趋势分析</option>
  146. </select>
  147. </div>
  148. <div class="form-group">
  149. <label class="form-label">重点关注领域</label>
  150. <input type="text" name="focus_areas" class="form-control" placeholder="输入重点关注领域,多个用逗号分隔">
  151. </div>
  152. <input type="hidden" name="title" value="论文分析任务">
  153. <input type="hidden" name="task_type" value="analysis">
  154. <input type="hidden" name="priority" value="medium">
  155. </form>
  156. </div>
  157. <div class="modal-footer">
  158. <button type="button" class="btn btn-outline" data-action="close-modal">取消</button>
  159. <button type="submit" form="ajax-form" class="btn btn-primary">开始分析</button>
  160. </div>
  161. </div>
  162. </div>
  163. <!-- 学术写作模态框 -->
  164. <div id="academic-writing-modal" class="modal">
  165. <div class="modal-content modal-large">
  166. <div class="modal-header">
  167. <h3 class="modal-title">学术写作助手</h3>
  168. <button class="modal-close" data-action="close-modal">&times;</button>
  169. </div>
  170. <div class="modal-body">
  171. <form class="ajax-form" data-endpoint="/tasks" data-method="POST" data-redirect="/tasks/{id}">
  172. <div class="form-group">
  173. <label class="form-label">写作类型</label>
  174. <select name="writing_type" class="form-select" required>
  175. <option value="">请选择写作类型</option>
  176. <option value="review">文献综述</option>
  177. <option value="summary">论文总结</option>
  178. <option value="critique">论文评述</option>
  179. <option value="proposal">研究提案</option>
  180. </select>
  181. </div>
  182. <div class="form-group">
  183. <label class="form-label">参考论文</label>
  184. <div class="paper-selector">
  185. <!-- 论文选择器将通过JavaScript动态加载 -->
  186. </div>
  187. </div>
  188. <div class="form-group">
  189. <label class="form-label">写作大纲</label>
  190. <textarea name="outline" class="form-control form-textarea" rows="6" placeholder="输入写作大纲,每行一个章节..."></textarea>
  191. </div>
  192. <div class="form-group">
  193. <label class="form-label">目标字数</label>
  194. <input type="number" name="length" class="form-control" placeholder="预计字数" min="100" max="10000" value="1000">
  195. </div>
  196. <div class="form-group">
  197. <label class="form-label">写作风格</label>
  198. <select name="style" class="form-select">
  199. <option value="academic">学术风格</option>
  200. <option value="formal">正式风格</option>
  201. <option value="concise">简洁风格</option>
  202. </select>
  203. </div>
  204. <input type="hidden" name="title" value="学术写作任务">
  205. <input type="hidden" name="task_type" value="writing">
  206. <input type="hidden" name="priority" value="medium">
  207. </form>
  208. </div>
  209. <div class="modal-footer">
  210. <button type="button" class="btn btn-outline" data-action="close-modal">取消</button>
  211. <button type="submit" form="ajax-form" class="btn btn-primary">开始写作</button>
  212. </div>
  213. </div>
  214. </div>
  215. <style>
  216. .dashboard {
  217. max-width: 1200px;
  218. margin: 0 auto;
  219. padding: 20px;
  220. }
  221. .dashboard-header {
  222. text-align: center;
  223. margin-bottom: 40px;
  224. }
  225. .dashboard-header h1 {
  226. font-size: 2.5rem;
  227. color: var(--primary-color);
  228. margin-bottom: 10px;
  229. }
  230. .dashboard-header p {
  231. font-size: 1.1rem;
  232. color: var(--text-muted);
  233. }
  234. .stats-section,
  235. .quick-actions,
  236. .recent-tasks,
  237. .system-status {
  238. margin-bottom: 40px;
  239. }
  240. .stats-section h2,
  241. .quick-actions h2,
  242. .recent-tasks h2,
  243. .system-status h2 {
  244. font-size: 1.5rem;
  245. margin-bottom: 20px;
  246. color: var(--dark-color);
  247. }
  248. .stats-grid {
  249. display: grid;
  250. grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  251. gap: 20px;
  252. }
  253. .stat-card {
  254. background: white;
  255. padding: 30px;
  256. border-radius: 10px;
  257. box-shadow: var(--shadow-md);
  258. text-align: center;
  259. transition: transform 0.2s;
  260. }
  261. .stat-card:hover {
  262. transform: translateY(-5px);
  263. }
  264. .stat-card h3 {
  265. font-size: 2.5rem;
  266. font-weight: 700;
  267. color: var(--primary-color);
  268. margin-bottom: 10px;
  269. }
  270. .stat-card p {
  271. color: var(--text-muted);
  272. font-size: 0.9rem;
  273. }
  274. .action-grid {
  275. display: grid;
  276. grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  277. gap: 20px;
  278. }
  279. .action-card {
  280. background: white;
  281. padding: 30px;
  282. border-radius: 10px;
  283. box-shadow: var(--shadow-md);
  284. text-align: center;
  285. cursor: pointer;
  286. transition: all 0.2s;
  287. }
  288. .action-card:hover {
  289. transform: translateY(-5px);
  290. box-shadow: var(--shadow-lg);
  291. }
  292. .action-icon {
  293. font-size: 3rem;
  294. margin-bottom: 15px;
  295. }
  296. .action-card h3 {
  297. font-size: 1.2rem;
  298. margin-bottom: 10px;
  299. color: var(--dark-color);
  300. }
  301. .action-card p {
  302. color: var(--text-muted);
  303. font-size: 0.9rem;
  304. }
  305. .status-grid {
  306. display: grid;
  307. grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  308. gap: 20px;
  309. }
  310. .status-item {
  311. background: white;
  312. padding: 20px;
  313. border-radius: 10px;
  314. box-shadow: var(--shadow-md);
  315. display: flex;
  316. align-items: center;
  317. gap: 10px;
  318. }
  319. .status-indicator {
  320. width: 12px;
  321. height: 12px;
  322. border-radius: 50%;
  323. }
  324. .status-online {
  325. background-color: var(--success-color);
  326. }
  327. .status-warning {
  328. background-color: var(--warning-color);
  329. }
  330. .status-offline {
  331. background-color: var(--danger-color);
  332. }
  333. .status-text {
  334. margin-left: auto;
  335. font-weight: 500;
  336. }
  337. .year-range {
  338. display: flex;
  339. align-items: center;
  340. gap: 10px;
  341. }
  342. .year-range input {
  343. flex: 1;
  344. }
  345. .modal-large {
  346. max-width: 800px;
  347. }
  348. .paper-selector {
  349. max-height: 200px;
  350. overflow-y: auto;
  351. border: 1px solid var(--border-color);
  352. border-radius: 0.375rem;
  353. padding: 10px;
  354. }
  355. .view-all {
  356. text-align: center;
  357. margin-top: 20px;
  358. }
  359. @media (max-width: 768px) {
  360. .dashboard {
  361. padding: 10px;
  362. }
  363. .dashboard-header h1 {
  364. font-size: 2rem;
  365. }
  366. .stats-grid,
  367. .action-grid,
  368. .status-grid {
  369. grid-template-columns: 1fr;
  370. }
  371. .year-range {
  372. flex-direction: column;
  373. }
  374. .year-range span {
  375. display: none;
  376. }
  377. }
  378. </style>