system-settings.css 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609
  1. /* 系统设置中心页面CSS样式 */
  2. /* 基础变量 - 与整体应用保持一致 */
  3. :root {
  4. --primary: #3498db;
  5. --primary-dark: #2980b9;
  6. --secondary: #2c3e50;
  7. --success: #27ae60;
  8. --warning: #f39c12;
  9. --danger: #e74c3c;
  10. --light: #f9f9f9;
  11. --dark: #2c3e50;
  12. --gray: #95a5a6;
  13. --light-gray: #ecf0f1;
  14. --medium-gray: #bdc3c7;
  15. --border-radius: 8px;
  16. --shadow: 0 3px 10px rgba(0, 0, 0, 0.08);
  17. --shadow-hover: 0 6px 16px rgba(0, 0, 0, 0.12);
  18. --transition: all 0.3s ease;
  19. }
  20. /* 系统设置容器 */
  21. .settings-container {
  22. max-width: 1400px;
  23. margin: 0 auto;
  24. background: white;
  25. border-radius: var(--border-radius);
  26. box-shadow: var(--shadow);
  27. overflow: hidden;
  28. }
  29. /* 顶部标题栏 */
  30. .settings-header {
  31. padding: 18px 28px;
  32. border-bottom: 1px solid var(--light-gray);
  33. display: flex;
  34. justify-content: space-between;
  35. align-items: center;
  36. background: white;
  37. color: var(--dark);
  38. }
  39. .settings-header h1 {
  40. display: flex;
  41. align-items: center;
  42. gap: 16px;
  43. font-size: 22px;
  44. font-weight: 600;
  45. }
  46. .settings-header h1 i {
  47. background: rgba(52, 152, 219, 0.1);
  48. width: 44px;
  49. height: 44px;
  50. border-radius: 50%;
  51. display: flex;
  52. align-items: center;
  53. justify-content: center;
  54. font-size: 18px;
  55. color: var(--primary);
  56. }
  57. .setting-actions {
  58. display: flex;
  59. gap: 10px;
  60. }
  61. /* 按钮样式 */
  62. .btn {
  63. padding: 8px 18px;
  64. border-radius: 30px;
  65. border: none;
  66. font-weight: 600;
  67. cursor: pointer;
  68. display: flex;
  69. align-items: center;
  70. gap: 8px;
  71. transition: var(--transition);
  72. font-size: 14px;
  73. }
  74. .btn-sm {
  75. padding: 6px 14px;
  76. font-size: 13px;
  77. }
  78. .btn-primary {
  79. background: var(--primary);
  80. color: white;
  81. }
  82. .btn-primary:hover {
  83. background: var(--primary-dark);
  84. transform: translateY(-2px);
  85. box-shadow: var(--shadow-hover);
  86. }
  87. .btn-outline {
  88. background: transparent;
  89. border: 1px solid var(--primary);
  90. color: var(--primary);
  91. }
  92. .btn-outline:hover {
  93. background: rgba(52, 152, 219, 0.1);
  94. }
  95. .btn-danger {
  96. background: rgba(231, 76, 60, 0.1);
  97. color: var(--danger);
  98. border: 1px solid rgba(231, 76, 60, 0.3);
  99. }
  100. .btn-danger:hover {
  101. background: rgba(231, 76, 60, 0.2);
  102. }
  103. .btn-edit {
  104. background: rgba(243, 156, 18, 0.1);
  105. color: var(--warning);
  106. border: 1px solid rgba(243, 156, 18, 0.3);
  107. }
  108. .btn-delete {
  109. background: rgba(231, 76, 60, 0.1);
  110. color: var(--danger);
  111. border: 1px solid rgba(231, 76, 60, 0.3);
  112. }
  113. /* 主体内容区域 */
  114. .settings-body {
  115. display: flex;
  116. min-height: 600px;
  117. }
  118. /* 左侧导航菜单 */
  119. .settings-sidebar {
  120. width: 240px;
  121. background: white;
  122. border-right: 1px solid var(--light-gray);
  123. padding: 20px 0;
  124. }
  125. .settings-tab {
  126. padding: 12px 24px;
  127. display: flex;
  128. align-items: center;
  129. gap: 12px;
  130. cursor: pointer;
  131. transition: var(--transition);
  132. border-left: 4px solid transparent;
  133. font-weight: 500;
  134. color: var(--dark);
  135. font-size: 15px;
  136. }
  137. .settings-tab.active {
  138. background: rgba(52, 152, 219, 0.1);
  139. border-left: 4px solid var(--primary);
  140. color: var(--primary);
  141. }
  142. .settings-tab:hover:not(.active) {
  143. background: rgba(0, 0, 0, 0.03);
  144. }
  145. .settings-tab i {
  146. width: 24px;
  147. text-align: center;
  148. font-size: 18px;
  149. }
  150. /* 右侧设置内容 */
  151. .settings-content {
  152. flex: 1;
  153. padding: 24px;
  154. background: #f9fbfd;
  155. min-height: 600px;
  156. }
  157. .tab-content {
  158. display: none;
  159. }
  160. .tab-content.active {
  161. display: block;
  162. animation: fadeIn 0.5s ease;
  163. }
  164. @keyframes fadeIn {
  165. from { opacity: 0; transform: translateY(10px); }
  166. to { opacity: 1; transform: translateY(0); }
  167. }
  168. /* 公共部分样式 */
  169. .section-header {
  170. display: flex;
  171. justify-content: space-between;
  172. align-items: center;
  173. margin-bottom: 24px;
  174. }
  175. .section-header h2 {
  176. font-size: 20px;
  177. display: flex;
  178. align-items: center;
  179. gap: 12px;
  180. }
  181. /* 用户网格 */
  182. .users-grid {
  183. display: grid;
  184. grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  185. gap: 20px;
  186. }
  187. .user-card {
  188. background: white;
  189. border-radius: var(--border-radius);
  190. box-shadow: var(--shadow);
  191. overflow: hidden;
  192. transition: var(--transition);
  193. }
  194. .user-card:hover {
  195. box-shadow: var(--shadow-hover);
  196. transform: translateY(-4px);
  197. }
  198. .user-header {
  199. display: flex;
  200. padding: 20px;
  201. gap: 16px;
  202. border-bottom: 1px solid var(--light-gray);
  203. }
  204. .user-avatar {
  205. width: 56px;
  206. height: 56px;
  207. border-radius: 50%;
  208. background: var(--primary);
  209. color: white;
  210. display: flex;
  211. align-items: center;
  212. justify-content: center;
  213. font-size: 24px;
  214. font-weight: bold;
  215. }
  216. .badge-admin .user-avatar { background: #e74c3c; }
  217. .badge-engineer .user-avatar { background: #3498db; }
  218. .badge-operator .user-avatar { background: #27ae60; }
  219. .badge-viewer .user-avatar { background: #f39c12; }
  220. .user-info h3 {
  221. font-size: 18px;
  222. margin-bottom: 4px;
  223. }
  224. .user-info p {
  225. color: var(--gray);
  226. font-size: 14px;
  227. }
  228. .user-body {
  229. padding: 20px;
  230. }
  231. .user-detail {
  232. margin-bottom: 12px;
  233. font-size: 14px;
  234. }
  235. .user-detail strong {
  236. color: var(--dark);
  237. }
  238. .role-badge {
  239. display: inline-block;
  240. padding: 4px 10px;
  241. border-radius: 20px;
  242. font-size: 12px;
  243. font-weight: 600;
  244. }
  245. .badge-admin { background: rgba(231, 76, 60, 0.1); color: #e74c3c; }
  246. .badge-engineer { background: rgba(52, 152, 219, 0.1); color: #3498db; }
  247. .badge-operator { background: rgba(39, 174, 96, 0.1); color: #27ae60; }
  248. .badge-viewer { background: rgba(243, 156, 18, 0.1); color: #f39c12; }
  249. .user-actions {
  250. display: flex;
  251. gap: 10px;
  252. margin-top: 16px;
  253. }
  254. /* 警报设置 */
  255. .settings-card {
  256. background: white;
  257. border-radius: var(--border-radius);
  258. box-shadow: var(--shadow);
  259. padding: 24px;
  260. margin-bottom: 24px;
  261. }
  262. .form-group {
  263. margin-bottom: 20px;
  264. }
  265. .form-group label {
  266. display: block;
  267. margin-bottom: 8px;
  268. font-weight: 600;
  269. color: var(--dark);
  270. }
  271. .slider-container {
  272. display: flex;
  273. align-items: center;
  274. gap: 16px;
  275. }
  276. .slider-container input[type="range"] {
  277. flex: 1;
  278. height: 6px;
  279. border-radius: 3px;
  280. background: var(--light-gray);
  281. outline: none;
  282. -webkit-appearance: none;
  283. }
  284. .slider-container input[type="range"]::-webkit-slider-thumb {
  285. -webkit-appearance: none;
  286. width: 18px;
  287. height: 18px;
  288. border-radius: 50%;
  289. background: var(--primary);
  290. cursor: pointer;
  291. }
  292. .slider-value {
  293. min-width: 80px;
  294. text-align: right;
  295. font-weight: 600;
  296. color: var(--primary);
  297. }
  298. .section-subheader {
  299. display: flex;
  300. align-items: center;
  301. gap: 10px;
  302. margin: 24px 0 16px;
  303. font-size: 18px;
  304. color: var(--secondary);
  305. }
  306. .notification-item {
  307. display: flex;
  308. align-items: center;
  309. padding: 16px;
  310. border-radius: var(--border-radius);
  311. background: var(--light);
  312. margin-bottom: 12px;
  313. }
  314. .notification-icon {
  315. width: 40px;
  316. height: 40px;
  317. border-radius: 50%;
  318. background: rgba(52, 152, 219, 0.1);
  319. display: flex;
  320. align-items: center;
  321. justify-content: center;
  322. color: var(--primary);
  323. font-size: 18px;
  324. }
  325. .notification-info {
  326. flex: 1;
  327. padding: 0 16px;
  328. }
  329. .notification-info h4 {
  330. margin-bottom: 4px;
  331. }
  332. .notification-info p {
  333. color: var(--gray);
  334. font-size: 14px;
  335. }
  336. .notification-switch {
  337. position: relative;
  338. display: inline-block;
  339. width: 50px;
  340. height: 24px;
  341. }
  342. .notification-switch input {
  343. opacity: 0;
  344. width: 0;
  345. height: 0;
  346. }
  347. .notification-switch .slider {
  348. position: absolute;
  349. cursor: pointer;
  350. top: 0;
  351. left: 0;
  352. right: 0;
  353. bottom: 0;
  354. background-color: var(--light-gray);
  355. transition: .4s;
  356. border-radius: 34px;
  357. }
  358. .notification-switch .slider:before {
  359. position: absolute;
  360. content: "";
  361. height: 16px;
  362. width: 16px;
  363. left: 4px;
  364. bottom: 4px;
  365. background-color: white;
  366. transition: .4s;
  367. border-radius: 50%;
  368. }
  369. .notification-switch input:checked + .slider {
  370. background-color: var(--success);
  371. }
  372. .notification-switch input:checked + .slider:before {
  373. transform: translateX(26px);
  374. }
  375. .form-footer {
  376. display: flex;
  377. justify-content: flex-end;
  378. gap: 12px;
  379. margin-top: 24px;
  380. padding-top: 16px;
  381. border-top: 1px solid var(--light-gray);
  382. }
  383. /* 系统状态 */
  384. .system-status {
  385. display: grid;
  386. grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  387. gap: 20px;
  388. margin-bottom: 24px;
  389. }
  390. .status-card {
  391. background: white;
  392. border-radius: var(--border-radius);
  393. box-shadow: var(--shadow);
  394. padding: 20px;
  395. display: flex;
  396. gap: 16px;
  397. align-items: center;
  398. }
  399. .status-icon {
  400. width: 60px;
  401. height: 60px;
  402. border-radius: 50%;
  403. display: flex;
  404. align-items: center;
  405. justify-content: center;
  406. font-size: 24px;
  407. }
  408. .system .status-icon { background: rgba(52, 152, 219, 0.1); color: var(--primary); }
  409. .database .status-icon { background: rgba(46, 204, 113, 0.1); color: #2ecc71; }
  410. .security .status-icon { background: rgba(243, 156, 18, 0.1); color: var(--warning); }
  411. .analytics .status-icon { background: rgba(155, 89, 182, 0.1); color: #9b59b6; }
  412. .status-info h3 {
  413. font-size: 17px;
  414. margin-bottom: 4px;
  415. }
  416. .status-info p {
  417. color: var(--gray);
  418. font-size: 13px;
  419. margin-bottom: 4px;
  420. }
  421. .status-value {
  422. font-size: 20px;
  423. font-weight: 700;
  424. }
  425. /* 备份列表 */
  426. .backup-list {
  427. margin: 16px 0;
  428. }
  429. .backup-item {
  430. display: flex;
  431. align-items: center;
  432. padding: 16px;
  433. border-radius: var(--border-radius);
  434. background: var(--light);
  435. margin-bottom: 12px;
  436. }
  437. .backup-icon {
  438. width: 40px;
  439. height: 40px;
  440. border-radius: 50%;
  441. background: rgba(52, 152, 219, 0.1);
  442. display: flex;
  443. align-items: center;
  444. justify-content: center;
  445. color: var(--primary);
  446. font-size: 18px;
  447. }
  448. .backup-info {
  449. flex: 1;
  450. padding: 0 16px;
  451. }
  452. .backup-info h4 {
  453. margin-bottom: 4px;
  454. }
  455. .backup-info p {
  456. color: var(--gray);
  457. font-size: 14px;
  458. }
  459. .backup-actions {
  460. display: flex;
  461. gap: 8px;
  462. }
  463. /* 响应式设计 */
  464. @media (max-width: 992px) {
  465. .settings-sidebar {
  466. width: 200px;
  467. }
  468. .users-grid {
  469. grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  470. }
  471. }
  472. @media (max-width: 768px) {
  473. .settings-body {
  474. flex-direction: column;
  475. }
  476. .settings-sidebar {
  477. width: 100%;
  478. display: flex;
  479. overflow-x: auto;
  480. padding: 10px 0;
  481. border-right: none;
  482. border-bottom: 1px solid var(--light-gray);
  483. }
  484. .settings-tab {
  485. padding: 10px 16px;
  486. white-space: nowrap;
  487. }
  488. .users-grid {
  489. grid-template-columns: 1fr;
  490. }
  491. .system-status {
  492. grid-template-columns: 1fr 1fr;
  493. }
  494. .section-header {
  495. flex-direction: column;
  496. align-items: flex-start;
  497. gap: 16px;
  498. }
  499. }
  500. @media (max-width: 480px) {
  501. .system-status {
  502. grid-template-columns: 1fr;
  503. }
  504. .settings-header {
  505. flex-direction: column;
  506. gap: 16px;
  507. align-items: flex-start;
  508. }
  509. .setting-actions {
  510. width: 100%;
  511. flex-wrap: wrap;
  512. }
  513. .form-footer {
  514. flex-direction: column;
  515. }
  516. .btn {
  517. width: 100%;
  518. justify-content: center;
  519. }
  520. }