Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 

227 строки
9.5 KiB

  1. /* ===== Admin Layout - vue3-element-admin style ===== */
  2. /* 基础重置 - 使用较低优先级,不覆盖 Tailwind 工具类 */
  3. *,*::before,*::after{box-sizing:border-box;}
  4. ul,ol{list-style:none;margin:0;padding:0;}
  5. :root{
  6. --primary:#E8751A;
  7. --primary-dark:#C96012;
  8. --primary-light:#F5A623;
  9. --primary-bg:rgba(232,117,26,.08);
  10. --blue:#1A3550;
  11. --white:#fff;
  12. --bg:#f0f2f5;
  13. --card:#fff;
  14. --text:#303133;
  15. --text-regular:#606266;
  16. --text-secondary:#909399;
  17. --text-placeholder:#c0c4cc;
  18. --border:#e4e7ed;
  19. --border-light:#ebeef5;
  20. --success:#67c23a;
  21. --warning:#e6a23c;
  22. --danger:#f56c6c;
  23. --info:#909399;
  24. --sidebar-bg:#1d1e1f;
  25. --sidebar-text:rgba(255,255,255,.65);
  26. --sidebar-active-bg:var(--primary);
  27. --sidebar-width:210px;
  28. --header-height:50px;
  29. --font-cn:"Source Han Sans SC","Noto Sans SC","PingFang SC","Microsoft YaHei",sans-serif;
  30. --font-en:"Roboto",sans-serif;
  31. --radius:4px;
  32. --shadow:0 2px 12px rgba(0,0,0,.06);
  33. }
  34. html{font-size:14px;}
  35. body{font-family:var(--font-cn);color:var(--text);background:var(--bg);min-height:100vh;}
  36. a{text-decoration:none;color:inherit;}
  37. img{max-width:100%;display:block;}
  38. /* ===== Layout ===== */
  39. .admin-layout{display:flex;min-height:100vh;}
  40. /* ===== Sidebar ===== */
  41. .sidebar{
  42. width:var(--sidebar-width);background:var(--sidebar-bg);
  43. position:fixed;top:0;left:0;bottom:0;z-index:100;
  44. display:flex;flex-direction:column;transition:.3s;overflow:hidden;
  45. }
  46. .sidebar-logo{
  47. height:var(--header-height);display:flex;align-items:center;
  48. padding:0 16px;border-bottom:1px solid rgba(255,255,255,.08);gap:10px;flex-shrink:0;
  49. background:var(--white);
  50. }
  51. .sidebar-logo img{height:36px;width:auto;}
  52. .sidebar-logo svg{width:28px;height:28px;color:var(--primary);flex-shrink:0;}
  53. .sidebar-logo span{font-size:14px;font-weight:600;color:#333;white-space:nowrap;overflow:hidden;}
  54. .sidebar-menu{flex:1;overflow-y:auto;padding:6px 0;}
  55. .sidebar-menu::-webkit-scrollbar{width:0;}
  56. .menu-group{margin-bottom:2px;}
  57. .menu-group-title{
  58. padding:20px 16px 6px;font-size:11px;color:rgba(255,255,255,.3);
  59. text-transform:uppercase;letter-spacing:1px;font-weight:500;
  60. }
  61. .menu-item{
  62. display:flex;align-items:center;gap:10px;padding:0 16px;height:42px;
  63. color:var(--sidebar-text);cursor:pointer;transition:.15s;position:relative;
  64. font-size:13px;border-radius:0;
  65. }
  66. .menu-item:hover{color:rgba(255,255,255,.9);background:rgba(255,255,255,.06);}
  67. .menu-item.active{color:var(--white);background:var(--primary);}
  68. .menu-item svg{width:18px;height:18px;flex-shrink:0;opacity:1;}
  69. .menu-item.active svg{opacity:1;}
  70. .menu-item span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  71. /* 子菜单 */
  72. .submenu-items{display:none;overflow:hidden;}
  73. .menu-parent.open .submenu-items{display:block;}
  74. .menu-parent>.menu-item .arrow{
  75. margin-left:auto;transition:.2s;opacity:.9;display:flex;align-items:center;
  76. }
  77. .menu-parent>.menu-item .arrow svg{width:12px;height:12px;}
  78. .menu-parent.open>.menu-item .arrow{transform:rotate(180deg);}
  79. .submenu-items .menu-item{padding-left:46px;height:38px;font-size:12.5px;}
  80. /* ===== Main Area ===== */
  81. .main-area{flex:1;margin-left:var(--sidebar-width);display:flex;flex-direction:column;height:100vh;min-width:0;overflow-x:hidden;overflow-y:auto;}
  82. /* ===== Top Header ===== */
  83. .top-header{
  84. height:var(--header-height);background:var(--white);
  85. border-bottom:1px solid var(--border-light);display:flex;
  86. align-items:center;justify-content:space-between;padding:0 20px;
  87. position:sticky;top:0;z-index:90;
  88. }
  89. .header-left{display:flex;align-items:center;gap:16px;}
  90. .breadcrumb{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text-secondary);}
  91. .breadcrumb a{color:var(--text-secondary);transition:.15s;}
  92. .breadcrumb a:hover{color:var(--primary);}
  93. .breadcrumb .sep{color:var(--text-placeholder);}
  94. .breadcrumb .current{color:var(--text);}
  95. .header-right{display:flex;align-items:center;gap:16px;}
  96. .header-btn{
  97. width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  98. cursor:pointer;transition:.15s;color:var(--text-secondary);background:none;border:none;
  99. }
  100. .header-btn:hover{background:var(--bg);color:var(--text);}
  101. .header-btn svg{width:18px;height:18px;}
  102. .header-avatar{
  103. display:flex;align-items:center;gap:8px;cursor:pointer;padding:4px 8px;
  104. border-radius:var(--radius);transition:.15s;
  105. }
  106. .header-avatar:hover{background:var(--bg);}
  107. .header-avatar img{width:30px;height:30px;border-radius:50%;background:var(--border);}
  108. .avatar-placeholder{
  109. width:30px;height:30px;border-radius:50%;background:var(--primary);
  110. color:var(--white);display:flex;align-items:center;justify-content:center;
  111. font-size:12px;font-weight:600;
  112. }
  113. .header-avatar span{font-size:13px;color:var(--text-regular);}
  114. /* User Dropdown */
  115. .header-user{position:relative;}
  116. .user-dropdown-menu{
  117. position:absolute;top:100%;right:0;margin-top:6px;
  118. min-width:160px;background:#fff;border-radius:var(--radius);
  119. box-shadow:0 6px 24px rgba(0,0,0,.12);border:1px solid var(--border-light);
  120. opacity:0;visibility:hidden;transform:translateY(-4px);transition:.2s;
  121. z-index:100;padding:6px 0;
  122. }
  123. .header-user.open .user-dropdown-menu{opacity:1;visibility:visible;transform:translateY(0);}
  124. .dropdown-item{
  125. display:flex;align-items:center;gap:8px;padding:8px 16px;
  126. font-size:13px;color:var(--text-regular);transition:.15s;cursor:pointer;text-decoration:none;
  127. }
  128. .dropdown-item:hover{background:var(--bg);color:var(--text);}
  129. .dropdown-item-danger{color:var(--danger);}
  130. .dropdown-item-danger:hover{background:rgba(245,108,108,.06);color:var(--danger);}
  131. .dropdown-divider{height:1px;background:var(--border-light);margin:4px 0;}
  132. /* ===== Content ===== */
  133. .page-content{flex:1;padding:20px;overflow-x:auto;}
  134. /* ===== Tags View ===== */
  135. .tags-view{
  136. display:flex;align-items:center;gap:6px;padding:6px 20px;
  137. background:var(--white);border-bottom:1px solid var(--border-light);
  138. overflow-x:auto;flex-shrink:0;
  139. }
  140. .tags-view::-webkit-scrollbar{height:0;}
  141. .tag-item{
  142. display:flex;align-items:center;gap:4px;padding:4px 12px;
  143. border-radius:3px;font-size:12px;cursor:pointer;white-space:nowrap;
  144. border:1px solid var(--border);color:var(--text-secondary);transition:.15s;
  145. background:var(--white);
  146. }
  147. .tag-item:hover{color:var(--primary);border-color:var(--primary);}
  148. .tag-item.active{background:var(--primary);color:var(--white);border-color:var(--primary);}
  149. .tag-item .tag-close{
  150. font-size:10px;margin-left:2px;opacity:.6;transition:.15s;
  151. width:14px;height:14px;display:flex;align-items:center;justify-content:center;
  152. border-radius:50%;
  153. }
  154. .tag-item .tag-close:hover{opacity:1;background:rgba(0,0,0,.1);}
  155. .tag-item.active .tag-close:hover{background:rgba(255,255,255,.3);}
  156. /* ===== Common Components ===== */
  157. .card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px;}
  158. .card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;}
  159. .card-title{font-size:15px;font-weight:600;color:var(--text);}
  160. /* Table - 仅保留颜色 */
  161. .el-table{width:100%;border-collapse:collapse;font-size:13px;}
  162. .el-table thead{background:#fafafa;}
  163. .el-table th{padding:10px 12px;text-align:left;font-weight:600;color:var(--text-regular);border-bottom:2px solid var(--border-light);font-size:12px;}
  164. .el-table td{padding:10px 12px;border-bottom:1px solid var(--border-light);color:var(--text-regular);}
  165. .el-table tbody tr:hover td{background:#fafafa;}
  166. /* Buttons - 仅保留颜色 */
  167. .el-btn{color:var(--text-regular);cursor:pointer;}
  168. .el-btn:hover{color:var(--primary);}
  169. .el-btn-primary{background:var(--primary);color:var(--white);}
  170. .el-btn-primary:hover{background:var(--primary-dark);color:var(--white);}
  171. .el-btn-success{background:var(--success);color:var(--white);}
  172. .el-btn-danger{background:var(--danger);color:var(--white);}
  173. .el-btn-text{color:var(--primary);cursor:pointer;}
  174. .el-btn-text:hover{color:var(--primary-dark);}
  175. /* Badge / Tag - 仅保留颜色 */
  176. .el-tag-success{background:#f0f9eb;color:var(--success);}
  177. .el-tag-warning{background:#fdf6ec;color:var(--warning);}
  178. .el-tag-danger{background:#fef0f0;color:var(--danger);}
  179. .el-tag-info{background:#f4f4f5;color:var(--info);}
  180. .el-tag-primary{background:var(--primary-bg);color:var(--primary);}
  181. /* Pagination */
  182. .pagination{display:flex;align-items:center;justify-content:flex-end;gap:4px;margin-top:16px;font-size:13px;}
  183. .pagination .page-info{color:var(--text-secondary);margin-right:8px;}
  184. .page-btn{
  185. min-width:30px;height:30px;display:flex;align-items:center;justify-content:center;
  186. border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;
  187. background:var(--white);color:var(--text-regular);font-size:13px;transition:.15s;
  188. padding:0 6px;
  189. }
  190. .page-btn:hover{color:var(--primary);border-color:var(--primary);}
  191. .page-btn.active{background:var(--primary);color:var(--white);border-color:var(--primary);}
  192. .page-btn.disabled{color:var(--text-placeholder);cursor:not-allowed;}
  193. /* Form inputs - 仅保留颜色 */
  194. .el-input:focus{border-color:var(--primary);}
  195. .el-input::placeholder{color:var(--text-placeholder);}
  196. /* Search bar */
  197. .filter-bar{display:flex;align-items:center;gap:10px;margin-bottom:16px;flex-wrap:wrap;}
  198. .filter-bar label{font-size:13px;color:var(--text-secondary);white-space:nowrap;}
  199. /* ===== 页面标题栏(通用) ===== */
  200. .page-title-bar{display:flex;align-items:center;gap:12px;margin-bottom:16px;}
  201. .page-title-text{font-size:16px;font-weight:600;color:var(--text);}
  202. /* WangEditor 编辑区域最大高度限制 */
  203. .w-e-text-container .w-e-scroll { max-height: 80vh; }
  204. /* 日期范围选择器宽度覆盖 */
  205. .el-date-editor--daterange.el-input__wrapper { width: 220px !important; max-width: 220px !important; }