style.css 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668
  1. /* 基础样式 */
  2. * {
  3. margin: 0;
  4. padding: 0;
  5. box-sizing: border-box;
  6. font-family: 'Arial', sans-serif;
  7. }
  8. body {
  9. line-height: 1.6;
  10. color: #333;
  11. background-color: #f5f5f5;
  12. }
  13. /* 头部样式 */
  14. header {
  15. background-color: #2c3e50;
  16. color: white;
  17. padding: 1rem;
  18. }
  19. .header-container {
  20. display: flex;
  21. justify-content: space-between;
  22. align-items: center;
  23. margin-bottom: 1rem;
  24. }
  25. .header-right {
  26. display: flex;
  27. gap: 1rem;
  28. align-items: center;
  29. }
  30. .logout-btn {
  31. background-color: #e74c3c;
  32. color: white;
  33. border: none;
  34. padding: 0.5rem 1rem;
  35. border-radius: 4px;
  36. cursor: pointer;
  37. text-decoration: none;
  38. }
  39. .logout-btn:hover {
  40. background-color: #c0392b;
  41. }
  42. nav {
  43. background-color: #34495e;
  44. padding: 0.5rem;
  45. }
  46. .home-link {
  47. color: white;
  48. text-decoration: none;
  49. padding: 0.5rem 1rem;
  50. border-radius: 4px;
  51. }
  52. .home-link:hover {
  53. background-color: #2c3e50;
  54. }
  55. /* 主内容区 */
  56. main {
  57. max-width: 1200px;
  58. margin: 2rem auto;
  59. padding: 0 1rem;
  60. }
  61. section {
  62. background-color: white;
  63. border-radius: 8px;
  64. padding: 1.5rem;
  65. margin-bottom: 2rem;
  66. box-shadow: 0 2px 4px rgba(0,0,0,0.1);
  67. }
  68. h2 {
  69. margin-bottom: 1rem;
  70. color: #2c3e50;
  71. border-bottom: 2px solid #3498db;
  72. padding-bottom: 0.5rem;
  73. }
  74. h3 {
  75. margin: 1rem 0;
  76. color: #34495e;
  77. }
  78. /* 表单样式 */
  79. .form-group {
  80. margin-bottom: 1rem;
  81. }
  82. label {
  83. display: block;
  84. margin-bottom: 0.5rem;
  85. font-weight: bold;
  86. }
  87. input, textarea, select {
  88. width: 100%;
  89. padding: 0.75rem;
  90. border: 1px solid #ddd;
  91. border-radius: 4px;
  92. font-size: 1rem;
  93. }
  94. button {
  95. cursor: pointer;
  96. }
  97. /* 平台连接设置样式 */
  98. .platform-section {
  99. text-align: center;
  100. padding: 2rem;
  101. }
  102. .platform-controls {
  103. display: flex;
  104. justify-content: center;
  105. align-items: center;
  106. gap: 2rem;
  107. margin: 2rem 0;
  108. flex-wrap: wrap;
  109. }
  110. .platform-select {
  111. min-width: 200px;
  112. }
  113. .connection-status {
  114. font-weight: bold;
  115. min-width: 150px;
  116. }
  117. .status-connected {
  118. color: #2ecc71; /* 绿色表示已连接 */
  119. }
  120. .status-disconnected {
  121. color: #e74c3c; /* 红色表示已断开 */
  122. }
  123. .platform-info {
  124. display: flex;
  125. justify-content: center;
  126. gap: 2rem;
  127. margin-top: 1rem;
  128. color: #666;
  129. flex-wrap: wrap;
  130. }
  131. #connect-btn {
  132. padding: 0.75rem 2rem;
  133. border: none;
  134. border-radius: 4px;
  135. font-size: 1rem;
  136. transition: all 0.3s ease;
  137. cursor: pointer;
  138. }
  139. .disconnected {
  140. background-color: #e74c3c;
  141. color: white;
  142. }
  143. .connected {
  144. background-color: #2ecc71;
  145. color: white;
  146. }
  147. /* MQTT发布区域样式 */
  148. .mqtt-publish {
  149. margin-top: 2rem;
  150. padding: 1.5rem;
  151. background-color: #f8f9fa;
  152. border-radius: 8px;
  153. display: inline-block;
  154. width: 100%;
  155. max-width: 600px;
  156. }
  157. .mqtt-publish .form-group {
  158. margin-bottom: 1rem;
  159. }
  160. .publish-btn {
  161. background-color: #2ecc71;
  162. color: white;
  163. border: none;
  164. padding: 0.75rem 1.5rem;
  165. border-radius: 4px;
  166. cursor: pointer;
  167. }
  168. .publish-btn:hover {
  169. background-color: #27ae60;
  170. }
  171. /* 功能导航样式 */
  172. .feature-nav {
  173. display: grid;
  174. grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  175. gap: 2rem;
  176. margin-top: 2rem;
  177. }
  178. .feature-card {
  179. background-color: #ecf0f1;
  180. padding: 1.5rem;
  181. border-radius: 8px;
  182. text-align: center;
  183. }
  184. .feature-btn {
  185. display: inline-block;
  186. margin-top: 1rem;
  187. background-color: #3498db;
  188. color: white;
  189. padding: 0.75rem 1.5rem;
  190. border-radius: 4px;
  191. text-decoration: none;
  192. }
  193. .feature-btn:hover {
  194. background-color: #2980b9;
  195. }
  196. /* 按钮基础样式 */
  197. .btn {
  198. display: inline-block;
  199. padding: 0.5rem 1rem;
  200. border: none;
  201. border-radius: 4px;
  202. font-size: 1rem;
  203. cursor: pointer;
  204. text-align: center;
  205. text-decoration: none;
  206. }
  207. .btn-primary {
  208. background-color: #3498db;
  209. color: white;
  210. }
  211. .btn-primary:hover {
  212. background-color: #2980b9;
  213. }
  214. .btn-danger {
  215. background-color: #e74c3c;
  216. color: white;
  217. }
  218. .btn-danger:hover {
  219. background-color: #c0392b;
  220. }
  221. /* 卡片基础样式 */
  222. .card {
  223. background-color: white;
  224. border-radius: 8px;
  225. box-shadow: 0 2px 4px rgba(0,0,0,0.1);
  226. margin-bottom: 1.5rem;
  227. overflow: hidden;
  228. }
  229. .card-header {
  230. background-color: #f8f9fa;
  231. padding: 1rem;
  232. border-bottom: 1px solid #eee;
  233. }
  234. .card-body {
  235. padding: 1.5rem;
  236. }
  237. /* 容器样式 */
  238. .container {
  239. max-width: 1200px;
  240. margin: 0 auto;
  241. padding: 0 1rem;
  242. }
  243. .mt-3 {
  244. margin-top: 1rem;
  245. }
  246. .mt-4 {
  247. margin-top: 1.5rem;
  248. }
  249. .mt-5 {
  250. margin-top: 2rem;
  251. }
  252. .mb-4 {
  253. margin-bottom: 1.5rem;
  254. }
  255. /* 警告框样式 */
  256. .alert {
  257. padding: 1rem;
  258. border-radius: 4px;
  259. margin-bottom: 1rem;
  260. }
  261. .alert-success {
  262. background-color: #d4edda;
  263. color: #155724;
  264. border: 1px solid #c3e6cb;
  265. }
  266. .alert-danger {
  267. background-color: #f8d7da;
  268. color: #721c24;
  269. border: 1px solid #f5c6cb;
  270. }
  271. /* 登录页面 */
  272. .login-section {
  273. max-width: 500px;
  274. margin: 2rem auto;
  275. }
  276. .login-btn {
  277. width: 100%;
  278. background-color: #3498db;
  279. color: white;
  280. border: none;
  281. padding: 0.75rem;
  282. border-radius: 4px;
  283. font-size: 1rem;
  284. }
  285. .login-btn:hover {
  286. background-color: #2980b9;
  287. }
  288. .error-message {
  289. background-color: #e74c3c;
  290. color: white;
  291. padding: 1rem;
  292. border-radius: 4px;
  293. margin-bottom: 1rem;
  294. }
  295. .success-message {
  296. background-color: #f8f9fa;
  297. padding: 1rem;
  298. border-radius: 4px;
  299. margin-bottom: 1rem;
  300. }
  301. .success-green {
  302. color: #2ecc71; /* 绿色 */
  303. }
  304. .success-red {
  305. color: #e74c3c; /* 红色 */
  306. }
  307. /* 表格样式 */
  308. .data-table {
  309. width: 100%;
  310. border-collapse: collapse;
  311. margin-top: 1rem;
  312. }
  313. .data-table th,
  314. .data-table td {
  315. padding: 0.75rem;
  316. text-align: left;
  317. border-bottom: 1px solid #ddd;
  318. }
  319. .data-table th {
  320. background-color: #f8f9fa;
  321. font-weight: bold;
  322. }
  323. .actions {
  324. display: flex;
  325. gap: 0.5rem;
  326. }
  327. /* 按钮样式 */
  328. .upload-btn, .save-btn, .config-btn,.detail-btn, .back-btn, .save-all-config,
  329. .save-config, .edit-btn, .download-btn, .delete-btn, .batch-btn {
  330. padding: 0.5rem 1rem;
  331. border-radius: 4px;
  332. border: none;
  333. font-size: 0.9rem;
  334. text-decoration: none;
  335. display: inline-block;
  336. }
  337. .upload-btn, .save-btn {
  338. background-color: #2ecc71;
  339. color: white;
  340. }
  341. .upload-btn:hover, .save-btn:hover {
  342. background-color: #27ae60;
  343. }
  344. .edit-btn {
  345. background-color: #3498db;
  346. color: white;
  347. }
  348. .edit-btn:hover {
  349. background-color: #2980b9;
  350. }
  351. .download-btn {
  352. background-color: #f39c12;
  353. color: white;
  354. }
  355. .download-btn:hover {
  356. background-color: #d35400;
  357. }
  358. .delete-btn {
  359. background-color: #e74c3c;
  360. color: white;
  361. }
  362. .delete-btn:hover {
  363. background-color: #c0392b;
  364. }
  365. .batch-actions {
  366. margin-bottom: 1rem;
  367. display: flex;
  368. gap: 1rem;
  369. }
  370. .batch-btn {
  371. background-color: #9b59b6;
  372. color: white;
  373. }
  374. .batch-btn:hover {
  375. background-color: #8e44ad;
  376. }
  377. .config-btn {
  378. background-color: #1abc9c;
  379. color: white;
  380. margin-right: 5px;
  381. }
  382. .config-btn:hover {
  383. background-color: #16a085;
  384. }
  385. .detail-btn {
  386. background-color: #3498db;
  387. color: white;
  388. }
  389. .detail-btn:hover {
  390. background-color: #2980b9;
  391. }
  392. /* 设备详情页面样式 */
  393. .device-detail {
  394. max-width: 800px;
  395. margin: 0 auto;
  396. }
  397. .device-info-card {
  398. background-color: #f8f9fa;
  399. border-radius: 8px;
  400. padding: 1.5rem;
  401. box-shadow: 0 2px 4px rgba(0,0,0,0.1);
  402. }
  403. .info-row {
  404. display: flex;
  405. margin-bottom: 1rem;
  406. border-bottom: 1px solid #eee;
  407. padding-bottom: 0.5rem;
  408. }
  409. .info-label {
  410. font-weight: bold;
  411. width: 150px;
  412. color: #7f8c8d;
  413. }
  414. .info-value {
  415. flex: 1;
  416. color: #333;
  417. }
  418. .back-btn-container {
  419. text-align: center;
  420. margin-top: 2rem;
  421. }
  422. .back-btn {
  423. background-color: #34495e;
  424. color: white;
  425. }
  426. .back-btn:hover {
  427. background-color: #2c3e50;
  428. }
  429. /* 设备配置页面 */
  430. .radio-group {
  431. display: flex;
  432. flex-wrap: nowrap;
  433. gap: 1.5rem;
  434. margin-bottom: 1rem;
  435. overflow-x: auto;
  436. }
  437. .radio-group label {
  438. display: flex;
  439. align-items: center;
  440. gap: 0.5rem;
  441. margin-bottom: 0;
  442. white-space: nowrap;
  443. }
  444. .info-grid {
  445. display: grid;
  446. grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  447. gap: 1rem;
  448. margin-bottom: 2rem;
  449. }
  450. .info-item {
  451. background-color: #f8f9fa;
  452. padding: 1rem;
  453. border-radius: 4px;
  454. }
  455. .label {
  456. font-weight: bold;
  457. display: block;
  458. color: #7f8c8d;
  459. }
  460. .config-section {
  461. margin-bottom: 2rem;
  462. padding-bottom: 1rem;
  463. border-bottom: 1px solid #eee;
  464. }
  465. .config-form {
  466. margin-top: 1rem;
  467. }
  468. .radio-group {
  469. display: flex;
  470. flex-wrap: wrap;
  471. gap: 1rem;
  472. margin-top: 0.5rem;
  473. }
  474. .radio-group label {
  475. display: inline-flex;
  476. align-items: center;
  477. gap: 0.5rem;
  478. margin: 0;
  479. }
  480. .save-config {
  481. background-color: #3498db;
  482. color: white;
  483. border: none;
  484. padding: 0.5rem 1rem;
  485. border-radius: 4px;
  486. margin-top: 1rem;
  487. }
  488. .save-config:hover {
  489. background-color: #2980b9;
  490. }
  491. /* 固件表格容器样式 */
  492. .firmware-table-container {
  493. max-height: 300px;
  494. overflow-y: auto;
  495. margin-bottom: 1rem;
  496. border: 1px solid #ddd;
  497. border-radius: 4px;
  498. }
  499. /* 模态框样式 */
  500. .modal {
  501. display: none;
  502. position: fixed;
  503. z-index: 1000;
  504. left: 0;
  505. top: 0;
  506. width: 100%;
  507. height: 100%;
  508. background-color: rgba(0,0,0,0.5);
  509. }
  510. .modal-content {
  511. background-color: white;
  512. margin: 15% auto;
  513. padding: 2rem;
  514. border-radius: 8px;
  515. width: 80%;
  516. max-width: 500px;
  517. position: relative;
  518. }
  519. .close-btn {
  520. position: absolute;
  521. right: 1rem;
  522. top: 1rem;
  523. font-size: 1.5rem;
  524. cursor: pointer;
  525. }
  526. /* 页脚样式 */
  527. footer {
  528. text-align: center;
  529. padding: 1rem;
  530. margin-top: 2rem;
  531. color: #7f8c8d;
  532. border-top: 1px solid #eee;
  533. }
  534. /* 日志容器样式 */
  535. .log-container {
  536. min-height: 100px; /* 设置最小高度 */
  537. max-height: 80vh; /* 设置最大高度为视口高度的80% */
  538. overflow-y: auto; /* 内容超过最大高度时显示垂直滚动条 */
  539. transition: max-height 0.3s ease; /* 添加过渡效果 */
  540. }
  541. /* 响应式调整 */
  542. @media (max-width: 768px) {
  543. .platform-controls {
  544. flex-direction: column;
  545. gap: 1rem;
  546. }
  547. .platform-select, .connection-status {
  548. width: 100%;
  549. }
  550. .platform-info {
  551. flex-direction: column;
  552. align-items: center;
  553. }
  554. .actions {
  555. flex-direction: column;
  556. }
  557. .batch-actions {
  558. flex-wrap: wrap;
  559. }
  560. }