index.html 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>爱智农 - 智慧农业平台</title>
  7. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css">
  8. <link rel="stylesheet" href="https://at.alicdn.com/t/font_3114978_qe0b39no76.css">
  9. <link rel="stylesheet" href="assets/css/global.css">
  10. <style>
  11. :root {
  12. --primary-color: #4CAF50;
  13. --primary-dark: #388E3C;
  14. --primary-light: #C8E6C9;
  15. --accent-color: #8BC34A;
  16. --text-color: #333;
  17. --sidebar-width: 240px;
  18. --sidebar-collapsed-width: 64px;
  19. --header-height: 60px;
  20. }
  21. body {
  22. font-family: "PingFang SC", "Microsoft YaHei", sans-serif;
  23. color: var(--text-color);
  24. background-color: #f5f7f9;
  25. margin: 0;
  26. padding: 0;
  27. height: 100vh;
  28. overflow: hidden;
  29. }
  30. .app-header {
  31. height: var(--header-height);
  32. background: linear-gradient(90deg, var(--primary-color), var(--primary-dark));
  33. color: white;
  34. box-shadow: 0 2px 4px rgba(0,0,0,0.1);
  35. z-index: 100;
  36. }
  37. .sidebar {
  38. width: var(--sidebar-width);
  39. background-color: white;
  40. box-shadow: 2px 0 5px rgba(0,0,0,0.05);
  41. transition: all 0.3s;
  42. height: calc(100vh - var(--header-height));
  43. overflow-y: auto;
  44. z-index: 99;
  45. position: fixed;
  46. top: var(--header-height);
  47. }
  48. .sidebar.collapsed {
  49. width: var(--sidebar-collapsed-width);
  50. }
  51. .sidebar-item {
  52. padding: 12px 16px;
  53. cursor: pointer;
  54. transition: all 0.2s;
  55. border-left: 3px solid transparent;
  56. display: flex;
  57. align-items: center;
  58. }
  59. .sidebar-item:hover {
  60. background-color: #f0f7f0;
  61. }
  62. .sidebar-item.active {
  63. background-color: #e8f5e9;
  64. border-left: 3px solid var(--primary-color);
  65. color: var(--primary-color);
  66. }
  67. .sidebar-item i {
  68. margin-right: 12px;
  69. font-size: 18px;
  70. }
  71. .sidebar.collapsed .sidebar-item span,
  72. .sidebar.collapsed .sidebar-submenu {
  73. display: none;
  74. }
  75. .sidebar.collapsed .sidebar-item {
  76. text-align: center;
  77. justify-content: center;
  78. }
  79. .sidebar.collapsed .sidebar-item i {
  80. margin-right: 0;
  81. }
  82. .sidebar-submenu {
  83. padding-left: 24px;
  84. max-height: 0;
  85. overflow: hidden;
  86. transition: max-height 0.3s ease;
  87. }
  88. .sidebar-submenu.open {
  89. max-height: 1000px;
  90. }
  91. .content-wrapper {
  92. margin-left: var(--sidebar-width);
  93. transition: all 0.3s;
  94. height: calc(100vh - var(--header-height));
  95. position: relative;
  96. overflow: hidden;
  97. width: calc(100% - var(--sidebar-width));
  98. }
  99. .sidebar.collapsed + .content-wrapper {
  100. margin-left: var(--sidebar-collapsed-width);
  101. }
  102. .content-frame {
  103. width: 100%;
  104. height: 100%;
  105. border: none;
  106. background-color: #fff;
  107. overflow: auto;
  108. display: block;
  109. }
  110. .toggle-sidebar {
  111. cursor: pointer;
  112. font-size: 20px;
  113. padding: 0 16px;
  114. }
  115. .user-info {
  116. cursor: pointer;
  117. }
  118. .dropdown-menu {
  119. display: none;
  120. position: absolute;
  121. right: 0;
  122. top: 100%;
  123. background: white;
  124. box-shadow: 0 2px 10px rgba(0,0,0,0.1);
  125. border-radius: 4px;
  126. width: 160px;
  127. z-index: 101;
  128. }
  129. .dropdown-menu.show {
  130. display: block;
  131. }
  132. .dropdown-item {
  133. padding: 10px 16px;
  134. cursor: pointer;
  135. }
  136. .dropdown-item:hover {
  137. background-color: #f0f7f0;
  138. }
  139. @media (max-width: 768px) {
  140. .sidebar {
  141. width: var(--sidebar-collapsed-width);
  142. transform: translateX(-100%);
  143. position: fixed;
  144. z-index: 1000;
  145. }
  146. .sidebar.collapsed {
  147. transform: translateX(0);
  148. }
  149. .content-wrapper {
  150. margin-left: 0;
  151. width: 100%;
  152. }
  153. .sidebar.collapsed + .content-wrapper {
  154. margin-left: var(--sidebar-collapsed-width);
  155. width: calc(100% - var(--sidebar-collapsed-width));
  156. }
  157. .app-header {
  158. padding-left: 0;
  159. }
  160. }
  161. </style>
  162. </head>
  163. <body>
  164. <!-- 顶部导航栏 -->
  165. <header class="app-header fixed w-full top-0 flex items-center justify-between px-4">
  166. <div class="flex items-center">
  167. <div class="toggle-sidebar flex items-center justify-center mr-2">
  168. <i class="iconfont icon-menu"></i>
  169. </div>
  170. <div class="flex items-center">
  171. <img src="assets/images/logo.png" alt="爱智农" class="h-8 mr-2" onerror="this.src='data:image/svg+xml;utf8,<svg xmlns=%22http://www.w3.org/2000/svg%22 width=%2240%22 height=%2240%22><rect width=%2240%22 height=%2240%22 fill=%22%234CAF50%22 /><text x=%2220%22 y=%2225%22 font-size=%2220%22 text-anchor=%22middle%22 fill=%22white%22>爱</text></svg>'">
  172. <h1 class="text-xl font-bold">爱智农智慧农业平台</h1>
  173. </div>
  174. </div>
  175. <div class="flex items-center">
  176. <div class="mr-4">
  177. <i class="iconfont icon-notification text-xl"></i>
  178. </div>
  179. <div class="user-info relative flex items-center">
  180. <div class="w-8 h-8 rounded-full bg-white flex items-center justify-center mr-2">
  181. <i class="iconfont icon-user text-green-600"></i>
  182. </div>
  183. <span>管理员</span>
  184. <i class="iconfont icon-down ml-1"></i>
  185. <div class="dropdown-menu">
  186. <div class="dropdown-item flex items-center">
  187. <i class="iconfont icon-user mr-2"></i>
  188. <span>个人中心</span>
  189. </div>
  190. <div class="dropdown-item flex items-center">
  191. <i class="iconfont icon-setting mr-2"></i>
  192. <span>系统设置</span>
  193. </div>
  194. <div class="dropdown-item flex items-center" id="logout">
  195. <i class="iconfont icon-logout mr-2"></i>
  196. <span>退出登录</span>
  197. </div>
  198. </div>
  199. </div>
  200. </div>
  201. </header>
  202. <!-- 左侧菜单栏和主内容区域 -->
  203. <div class="flex pt-[60px] w-full">
  204. <aside class="sidebar fixed left-0">
  205. <div class="sidebar-menu">
  206. <div class="sidebar-item" data-page="dashboard">
  207. <i class="iconfont icon-dashboard"></i>
  208. <span>首页</span>
  209. </div>
  210. <div class="sidebar-item has-submenu">
  211. <i class="iconfont icon-setting"></i>
  212. <span>系统管理</span>
  213. <i class="iconfont icon-arrow-down ml-auto"></i>
  214. </div>
  215. <div class="sidebar-submenu">
  216. <div class="sidebar-item" data-page="user-management">
  217. <i class="iconfont icon-user"></i>
  218. <span>用户管理</span>
  219. </div>
  220. <div class="sidebar-item" data-page="role-management">
  221. <i class="iconfont icon-team"></i>
  222. <span>角色管理</span>
  223. </div>
  224. <div class="sidebar-item" data-page="permission-management">
  225. <i class="iconfont icon-lock"></i>
  226. <span>权限管理</span>
  227. </div>
  228. <div class="sidebar-item" data-page="org-management">
  229. <i class="iconfont icon-apartment"></i>
  230. <span>组织机构管理</span>
  231. </div>
  232. <div class="sidebar-item" data-page="login-log">
  233. <i class="iconfont icon-file"></i>
  234. <span>登录日志</span>
  235. </div>
  236. <div class="sidebar-item" data-page="operation-log">
  237. <i class="iconfont icon-file-text"></i>
  238. <span>操作日志</span>
  239. </div>
  240. <div class="sidebar-item" data-page="dict-management">
  241. <i class="iconfont icon-book"></i>
  242. <span>字典管理</span>
  243. </div>
  244. <div class="sidebar-item" data-page="menu-management">
  245. <i class="iconfont icon-menu"></i>
  246. <span>菜单管理</span>
  247. </div>
  248. <div class="sidebar-item" data-page="task-management">
  249. <i class="iconfont icon-schedule"></i>
  250. <span>定时任务管理</span>
  251. </div>
  252. </div>
  253. <div class="sidebar-item has-submenu">
  254. <i class="iconfont icon-appstore"></i>
  255. <span>地块与农场管理</span>
  256. <i class="iconfont icon-arrow-down ml-auto"></i>
  257. </div>
  258. <div class="sidebar-submenu">
  259. <div class="sidebar-item" data-page="field-management-content">
  260. <i class="iconfont icon-database"></i>
  261. <span>地块管理</span>
  262. </div>
  263. </div>
  264. <div class="sidebar-item" data-page="visualization-dashboard">
  265. <i class="iconfont icon-dashboard"></i>
  266. <span>可视化统计大屏</span>
  267. </div>
  268. <div class="sidebar-item has-submenu">
  269. <i class="iconfont icon-car"></i>
  270. <span>农机设备管理</span>
  271. <i class="iconfont icon-arrow-down ml-auto"></i>
  272. </div>
  273. <div class="sidebar-submenu">
  274. <div class="sidebar-item" data-page="machine-management">
  275. <i class="iconfont icon-car"></i>
  276. <span>农机管理列表</span>
  277. </div>
  278. <div class="sidebar-item" data-page="machine-monitor">
  279. <i class="iconfont icon-eye"></i>
  280. <span>农机实时监控</span>
  281. </div>
  282. <div class="sidebar-item" data-page="machine-alarm">
  283. <i class="iconfont icon-warning"></i>
  284. <span>农机故障告警</span>
  285. </div>
  286. <div class="sidebar-item" data-page="machine-record">
  287. <i class="iconfont icon-file-text"></i>
  288. <span>农机作业记录</span>
  289. </div>
  290. <div class="sidebar-item" data-page="machine-maintenance">
  291. <i class="iconfont icon-tool"></i>
  292. <span>农机保养管理</span>
  293. </div>
  294. <div class="sidebar-item" data-page="machine-statistics">
  295. <i class="iconfont icon-bar-chart"></i>
  296. <span>农机使用统计</span>
  297. </div>
  298. </div>
  299. <div class="sidebar-item has-submenu">
  300. <i class="iconfont icon-video-camera"></i>
  301. <span>设备监控管理</span>
  302. <i class="iconfont icon-arrow-down ml-auto"></i>
  303. </div>
  304. <div class="sidebar-submenu">
  305. <div class="sidebar-item" data-page="device-management">
  306. <i class="iconfont icon-database"></i>
  307. <span>设备管理列表</span>
  308. </div>
  309. <div class="sidebar-item" data-page="device-monitor">
  310. <i class="iconfont icon-eye"></i>
  311. <span>设备监控汇总</span>
  312. </div>
  313. <div class="sidebar-item" data-page="device-alarm">
  314. <i class="iconfont icon-warning"></i>
  315. <span>设备告警信息</span>
  316. </div>
  317. </div>
  318. <div class="sidebar-item has-submenu">
  319. <i class="iconfont icon-calendar"></i>
  320. <span>智慧农作管理</span>
  321. <i class="iconfont icon-arrow-down ml-auto"></i>
  322. </div>
  323. <div class="sidebar-submenu">
  324. <div class="sidebar-item" data-page="task-list">
  325. <i class="iconfont icon-ordered-list"></i>
  326. <span>作业任务列表</span>
  327. </div>
  328. <div class="sidebar-item" data-page="farm-plan">
  329. <i class="iconfont icon-schedule"></i>
  330. <span>农事计划制定</span>
  331. </div>
  332. <div class="sidebar-item" data-page="task-track">
  333. <i class="iconfont icon-environment"></i>
  334. <span>作业轨迹地图</span>
  335. </div>
  336. </div>
  337. <div class="sidebar-item has-submenu">
  338. <i class="iconfont icon-cluster"></i>
  339. <span>作物生命周期</span>
  340. <i class="iconfont icon-arrow-down ml-auto"></i>
  341. </div>
  342. <div class="sidebar-submenu">
  343. <div class="sidebar-item" data-page="crop-profile">
  344. <i class="iconfont icon-profile"></i>
  345. <span>作物档案</span>
  346. </div>
  347. <div class="sidebar-item" data-page="crop-monitoring">
  348. <i class="iconfont icon-eye"></i>
  349. <span>作物生长监测</span>
  350. </div>
  351. <div class="sidebar-item" data-page="crop-health-analysis">
  352. <i class="iconfont icon-experiment"></i>
  353. <span>作物健康分析</span>
  354. </div>
  355. <div class="sidebar-item" data-page="crop-yield-prediction">
  356. <i class="iconfont icon-bar-chart"></i>
  357. <span>产量智能预测</span>
  358. </div>
  359. <div class="sidebar-item" data-page="crop-trace">
  360. <i class="iconfont icon-qrcode"></i>
  361. <span>溯源信息展示</span>
  362. </div>
  363. </div>
  364. <div class="sidebar-item has-submenu">
  365. <i class="iconfont icon-experiment"></i>
  366. <span>AI模型与智能分析</span>
  367. <i class="iconfont icon-arrow-down ml-auto"></i>
  368. </div>
  369. <div class="sidebar-submenu">
  370. <div class="sidebar-item" data-page="model-list">
  371. <i class="iconfont icon-appstore"></i>
  372. <span>模型列表</span>
  373. </div>
  374. <div class="sidebar-item" data-page="data-analysis">
  375. <i class="iconfont icon-bar-chart"></i>
  376. <span>数据分析图表</span>
  377. </div>
  378. <div class="sidebar-item" data-page="model-visualization">
  379. <i class="iconfont icon-fund"></i>
  380. <span>模型结果可视化</span>
  381. </div>
  382. </div>
  383. <div class="sidebar-item has-submenu">
  384. <i class="iconfont icon-medicine-box"></i>
  385. <span>农作处方管理</span>
  386. <i class="iconfont icon-arrow-down ml-auto"></i>
  387. </div>
  388. <div class="sidebar-submenu">
  389. <div class="sidebar-item" data-page="prescription-list">
  390. <i class="iconfont icon-ordered-list"></i>
  391. <span>农作处方列表</span>
  392. </div>
  393. <div class="sidebar-item" data-page="prescription-detail">
  394. <i class="iconfont icon-file-text"></i>
  395. <span>处方详情展示</span>
  396. </div>
  397. </div>
  398. <div class="sidebar-item has-submenu">
  399. <i class="iconfont icon-file-pdf"></i>
  400. <span>报表与档案管理</span>
  401. <i class="iconfont icon-arrow-down ml-auto"></i>
  402. </div>
  403. <div class="sidebar-submenu">
  404. <div class="sidebar-item" data-page="report-download">
  405. <i class="iconfont icon-download"></i>
  406. <span>报表下载</span>
  407. </div>
  408. <div class="sidebar-item" data-page="farm-archive">
  409. <i class="iconfont icon-folder"></i>
  410. <span>农事档案</span>
  411. </div>
  412. <div class="sidebar-item" data-page="device-archive">
  413. <i class="iconfont icon-folder-open"></i>
  414. <span>设备档案</span>
  415. </div>
  416. <div class="sidebar-item" data-page="statistics-summary">
  417. <i class="iconfont icon-file-excel"></i>
  418. <span>统计类汇总</span>
  419. </div>
  420. </div>
  421. <div class="sidebar-item has-submenu">
  422. <i class="iconfont icon-customer-service"></i>
  423. <span>对外服务</span>
  424. <i class="iconfont icon-arrow-down ml-auto"></i>
  425. </div>
  426. <div class="sidebar-submenu">
  427. <div class="sidebar-item" data-page="tech-promotion">
  428. <i class="iconfont icon-bulb"></i>
  429. <span>农技推广中心</span>
  430. </div>
  431. <div class="sidebar-item" data-page="policy-info">
  432. <i class="iconfont icon-file-text"></i>
  433. <span>政策信息汇总</span>
  434. </div>
  435. </div>
  436. </div>
  437. </aside>
  438. <!-- 主内容区域 -->
  439. <main class="content-wrapper">
  440. <iframe id="contentFrame" class="content-frame" src="pages/dashboard.html" frameborder="0"></iframe>
  441. </main>
  442. </div>
  443. <script>
  444. document.addEventListener('DOMContentLoaded', function() {
  445. // 侧边栏折叠功能
  446. const toggleBtn = document.querySelector('.toggle-sidebar');
  447. const sidebar = document.querySelector('.sidebar');
  448. const contentWrapper = document.querySelector('.content-wrapper');
  449. toggleBtn.addEventListener('click', function() {
  450. sidebar.classList.toggle('collapsed');
  451. if (sidebar.classList.contains('collapsed')) {
  452. contentWrapper.style.width = `calc(100% - var(--sidebar-collapsed-width))`;
  453. contentWrapper.style.marginLeft = `var(--sidebar-collapsed-width)`;
  454. } else {
  455. contentWrapper.style.width = `calc(100% - var(--sidebar-width))`;
  456. contentWrapper.style.marginLeft = `var(--sidebar-width)`;
  457. }
  458. });
  459. // 用户下拉菜单
  460. const userInfo = document.querySelector('.user-info');
  461. const dropdownMenu = document.querySelector('.dropdown-menu');
  462. userInfo.addEventListener('click', function(e) {
  463. e.stopPropagation();
  464. dropdownMenu.classList.toggle('show');
  465. });
  466. document.addEventListener('click', function() {
  467. dropdownMenu.classList.remove('show');
  468. });
  469. // 子菜单展开/折叠
  470. const subMenuItems = document.querySelectorAll('.has-submenu');
  471. subMenuItems.forEach(item => {
  472. item.addEventListener('click', function() {
  473. const submenu = this.nextElementSibling;
  474. submenu.classList.toggle('open');
  475. // 切换箭头方向
  476. const arrow = this.querySelector('.icon-arrow-down');
  477. if (submenu.classList.contains('open')) {
  478. arrow.style.transform = 'rotate(180deg)';
  479. } else {
  480. arrow.style.transform = 'rotate(0)';
  481. }
  482. });
  483. });
  484. // 页面导航
  485. const menuItems = document.querySelectorAll('.sidebar-item[data-page]');
  486. const contentFrame = document.getElementById('contentFrame');
  487. menuItems.forEach(item => {
  488. item.addEventListener('click', function() {
  489. const page = this.getAttribute('data-page');
  490. contentFrame.src = `pages/${page}.html`;
  491. // 移除其他菜单项的活动状态
  492. menuItems.forEach(i => i.classList.remove('active'));
  493. // 添加当前菜单项的活动状态
  494. this.classList.add('active');
  495. });
  496. });
  497. // 登出功能
  498. document.getElementById('logout').addEventListener('click', function() {
  499. window.location.href = 'login.html';
  500. });
  501. // 默认选中首页
  502. document.querySelector('.sidebar-item[data-page="dashboard"]').classList.add('active');
  503. });
  504. </script>
  505. </body>
  506. </html>