admin.css 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  1. /* 今天登录的高亮样式 */
  2. .today-login {
  3. background-color: #e6f7ff;
  4. color: #1890ff;
  5. padding: 2px 8px;
  6. border-radius: 4px;
  7. font-weight: 500;
  8. display: inline-block;
  9. }
  10. /* 用户信息显示优化 */
  11. .account-info-item {
  12. margin-bottom: 15px;
  13. display: flex;
  14. align-items: center;
  15. }
  16. .account-info-item .label {
  17. font-weight: 500;
  18. width: 120px;
  19. flex-shrink: 0;
  20. color: #555;
  21. }
  22. .account-info-item .value {
  23. color: #1f2937;
  24. font-weight: 400;
  25. }
  26. /* 加载中占位符样式 */
  27. .loading-placeholder {
  28. display: inline-block;
  29. width: 80px;
  30. height: 14px;
  31. background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  32. background-size: 200% 100%;
  33. animation: loading 1.5s infinite;
  34. border-radius: 4px;
  35. }
  36. @keyframes loading {
  37. 0% {
  38. background-position: 200% 0;
  39. }
  40. 100% {
  41. background-position: -200% 0;
  42. }
  43. }
  44. /* 菜单编辑弹窗样式 */
  45. .menu-edit-popup {
  46. border-radius: 12px;
  47. padding: 24px;
  48. max-width: 500px;
  49. box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
  50. }
  51. .menu-edit-title {
  52. font-size: 1.5em;
  53. color: #1f2937;
  54. margin-bottom: 24px;
  55. padding-bottom: 16px;
  56. border-bottom: 2px solid #f3f4f6;
  57. font-weight: 600;
  58. }
  59. .menu-edit-container {
  60. text-align: left;
  61. }
  62. .menu-edit-container .form-group {
  63. margin-bottom: 24px;
  64. }
  65. .menu-edit-container label {
  66. display: block;
  67. margin-bottom: 8px;
  68. color: #4b5563;
  69. font-weight: 500;
  70. font-size: 0.95em;
  71. }
  72. .menu-edit-container .swal2-input,
  73. .menu-edit-container .swal2-select {
  74. width: 100%;
  75. padding: 10px 14px;
  76. border: 2px solid #e5e7eb;
  77. border-radius: 8px;
  78. font-size: 14px;
  79. transition: all 0.3s ease;
  80. background-color: #f9fafb;
  81. }
  82. .menu-edit-container .swal2-input:hover,
  83. .menu-edit-container .swal2-select:hover {
  84. border-color: #d1d5db;
  85. background-color: #ffffff;
  86. }
  87. .menu-edit-container .swal2-input:focus,
  88. .menu-edit-container .swal2-select:focus {
  89. border-color: #4CAF50;
  90. outline: none;
  91. box-shadow: 0 0 0 3px rgba(76, 175, 80, 0.1);
  92. background-color: #ffffff;
  93. }
  94. .menu-edit-confirm {
  95. background-color: #4CAF50 !important;
  96. padding: 10px 24px !important;
  97. border-radius: 8px !important;
  98. font-weight: 500 !important;
  99. transition: all 0.3s ease !important;
  100. font-size: 14px !important;
  101. display: inline-flex !important;
  102. align-items: center !important;
  103. gap: 8px !important;
  104. }
  105. .menu-edit-confirm:hover {
  106. background-color: #45a049 !important;
  107. transform: translateY(-1px);
  108. box-shadow: 0 2px 8px rgba(76, 175, 80, 0.2);
  109. }
  110. .menu-edit-cancel {
  111. background-color: #f3f4f6 !important;
  112. color: #4b5563 !important;
  113. padding: 10px 24px !important;
  114. border-radius: 8px !important;
  115. font-weight: 500 !important;
  116. transition: all 0.3s ease !important;
  117. font-size: 14px !important;
  118. display: inline-flex !important;
  119. align-items: center !important;
  120. gap: 8px !important;
  121. }
  122. .menu-edit-cancel:hover {
  123. background-color: #e5e7eb !important;
  124. transform: translateY(-1px);
  125. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  126. }
  127. /* 操作按钮样式优化 */
  128. .action-buttons {
  129. display: flex;
  130. gap: 8px;
  131. justify-content: flex-end;
  132. }
  133. .action-btn {
  134. width: 32px;
  135. height: 32px;
  136. border-radius: 6px;
  137. border: none;
  138. background-color: #f3f4f6;
  139. color: #4b5563;
  140. cursor: pointer;
  141. display: flex;
  142. align-items: center;
  143. justify-content: center;
  144. transition: all 0.2s ease;
  145. }
  146. .action-btn:hover {
  147. background-color: #e5e7eb;
  148. transform: translateY(-1px);
  149. }
  150. .action-btn i {
  151. font-size: 14px;
  152. }
  153. .action-btn.edit-btn {
  154. color: #3b82f6;
  155. }
  156. .action-btn.edit-btn:hover {
  157. background-color: #dbeafe;
  158. }
  159. .action-btn.delete-btn {
  160. color: #ef4444;
  161. }
  162. .action-btn.delete-btn:hover {
  163. background-color: #fee2e2;
  164. }
  165. .action-btn.log-btn {
  166. color: #10b981;
  167. }
  168. .action-btn.log-btn:hover {
  169. background-color: #d1fae5;
  170. }
  171. .action-btn.start-btn {
  172. color: #10b981;
  173. }
  174. .action-btn.start-btn:hover {
  175. background-color: #d1fae5;
  176. }
  177. .action-btn.stop-btn {
  178. color: #ef4444;
  179. }
  180. .action-btn.stop-btn:hover {
  181. background-color: #fee2e2;
  182. }
  183. .action-btn.restart-btn {
  184. color: #f59e0b;
  185. }
  186. .action-btn.restart-btn:hover {
  187. background-color: #fef3c7;
  188. }
  189. /* Docker 状态指示器样式 */
  190. .status-indicator {
  191. display: inline-flex;
  192. align-items: center;
  193. padding: 6px 12px;
  194. border-radius: 4px;
  195. font-size: 14px;
  196. font-weight: 500;
  197. transition: all 0.3s;
  198. }
  199. .status-indicator.running {
  200. background-color: rgba(76, 175, 80, 0.1);
  201. color: #4CAF50;
  202. }
  203. .status-indicator.stopped {
  204. background-color: rgba(244, 67, 54, 0.1);
  205. color: #F44336;
  206. }
  207. .status-indicator i {
  208. margin-right: 6px;
  209. font-size: 16px;
  210. }
  211. /* 文档操作按钮样式优化 */
  212. .view-btn {
  213. background-color: #f0f9ff !important;
  214. color: #0ea5e9 !important;
  215. }
  216. .view-btn:hover {
  217. background-color: #e0f2fe !important;
  218. color: #0284c7 !important;
  219. }
  220. .edit-btn {
  221. background-color: #f0fdf4 !important;
  222. color: #22c55e !important;
  223. }
  224. .edit-btn:hover {
  225. background-color: #dcfce7 !important;
  226. color: #16a34a !important;
  227. }
  228. .delete-btn {
  229. background-color: #fef2f2 !important;
  230. color: #ef4444 !important;
  231. }
  232. .delete-btn:hover {
  233. background-color: #fee2e2 !important;
  234. color: #dc2626 !important;
  235. }
  236. .publish-btn {
  237. background-color: #f0fdfa !important;
  238. color: #14b8a6 !important;
  239. }
  240. .publish-btn:hover {
  241. background-color: #ccfbf1 !important;
  242. color: #0d9488 !important;
  243. }
  244. .unpublish-btn {
  245. background-color: #fffbeb !important;
  246. color: #f59e0b !important;
  247. }
  248. .unpublish-btn:hover {
  249. background-color: #fef3c7 !important;
  250. color: #d97706 !important;
  251. }
  252. /* 刷新按钮交互反馈 */
  253. .refresh-btn {
  254. background-color: #f9fafb;
  255. color: #4b5563;
  256. border: 1px solid #e5e7eb;
  257. padding: 6px 12px;
  258. border-radius: 4px;
  259. display: inline-flex;
  260. align-items: center;
  261. gap: 6px;
  262. font-size: 14px;
  263. cursor: pointer;
  264. transition: all 0.2s ease;
  265. }
  266. .refresh-btn:hover {
  267. background-color: #f3f4f6;
  268. color: #374151;
  269. }
  270. .refresh-btn.loading {
  271. pointer-events: none;
  272. opacity: 0.7;
  273. }
  274. .refresh-btn.loading i {
  275. animation: spin 1s linear infinite;
  276. }
  277. @keyframes spin {
  278. 0% { transform: rotate(0deg); }
  279. 100% { transform: rotate(360deg); }
  280. }
  281. /* Docker未运行友好提示 */
  282. .docker-offline-container {
  283. background-color: #f9fafb;
  284. border: 1px solid #e5e7eb;
  285. border-radius: 8px;
  286. padding: 24px;
  287. margin: 20px 0;
  288. text-align: center;
  289. }
  290. .docker-offline-icon {
  291. font-size: 40px;
  292. color: #9ca3af;
  293. margin-bottom: 16px;
  294. }
  295. .docker-offline-title {
  296. font-size: 20px;
  297. font-weight: 600;
  298. color: #4b5563;
  299. margin-bottom: 8px;
  300. }
  301. .docker-offline-message {
  302. color: #6b7280;
  303. margin-bottom: 20px;
  304. }
  305. .docker-offline-actions {
  306. display: flex;
  307. justify-content: center;
  308. gap: 12px;
  309. }
  310. .docker-offline-btn {
  311. padding: 8px 16px;
  312. border-radius: 4px;
  313. border: none;
  314. font-weight: 500;
  315. cursor: pointer;
  316. display: inline-flex;
  317. align-items: center;
  318. gap: 8px;
  319. transition: all 0.2s ease;
  320. }
  321. .docker-offline-btn.primary {
  322. background-color: #4f46e5;
  323. color: white;
  324. }
  325. .docker-offline-btn.primary:hover {
  326. background-color: #4338ca;
  327. }
  328. .docker-offline-btn.secondary {
  329. background-color: #f3f4f6;
  330. color: #4b5563;
  331. }
  332. .docker-offline-btn.secondary:hover {
  333. background-color: #e5e7eb;
  334. }
  335. /* 简单 Markdown 编辑器样式 */
  336. .editor-toolbar {
  337. background-color: var(--container-bg);
  338. border: 1px solid var(--border-color);
  339. border-bottom: none;
  340. padding: 0.5rem;
  341. border-radius: 0.25rem 0.25rem 0 0;
  342. }
  343. .editor-toolbar .btn {
  344. margin-right: 0.25rem;
  345. margin-bottom: 0.25rem;
  346. }
  347. .editor-content {
  348. border: 1px solid var(--border-color);
  349. border-top: none;
  350. padding: 1rem;
  351. border-radius: 0 0 0.25rem 0.25rem;
  352. background-color: var(--container-bg);
  353. }
  354. #markdown-editor {
  355. font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
  356. border: 1px solid var(--border-color);
  357. background-color: var(--background-color);
  358. color: var(--text-color);
  359. resize: vertical;
  360. }
  361. .markdown-preview {
  362. border: 1px solid var(--border-color);
  363. padding: 1rem;
  364. background-color: var(--background-color);
  365. color: var(--text-color);
  366. min-height: 400px;
  367. border-radius: 0.25rem;
  368. overflow-y: auto;
  369. }
  370. .markdown-preview h1, .markdown-preview h2, .markdown-preview h3,
  371. .markdown-preview h4, .markdown-preview h5, .markdown-preview h6 {
  372. color: var(--text-color);
  373. }
  374. .markdown-preview code {
  375. background-color: rgba(0, 0, 0, 0.1);
  376. padding: 0.125rem 0.25rem;
  377. border-radius: 0.125rem;
  378. font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
  379. }
  380. .markdown-preview pre {
  381. background-color: rgba(0, 0, 0, 0.1);
  382. padding: 1rem;
  383. border-radius: 0.25rem;
  384. overflow-x: auto;
  385. }
  386. .markdown-preview blockquote {
  387. border-left: 4px solid var(--border-color);
  388. padding-left: 1rem;
  389. margin-left: 0;
  390. color: var(--text-secondary);
  391. }
  392. .markdown-preview table {
  393. border-collapse: collapse;
  394. width: 100%;
  395. margin: 1rem 0;
  396. }
  397. .markdown-preview table th,
  398. .markdown-preview table td {
  399. border: 1px solid var(--border-color);
  400. padding: 0.5rem;
  401. text-align: left;
  402. }
  403. .markdown-preview table th {
  404. background-color: rgba(0, 0, 0, 0.05);
  405. font-weight: bold;
  406. }