overrides-element.scss 24 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078
  1. /**
  2. * Element UI 主题覆盖
  3. * 使用设计令牌覆盖 Element UI 默认样式
  4. * @author 前端架构师
  5. */
  6. /* ===== 全局基础覆盖 ===== */
  7. /* 重置 Element UI 的 CSS 变量 */
  8. :root {
  9. /* Element UI 主色调覆盖 */
  10. --el-color-primary: var(--color-primary);
  11. --el-color-success: var(--color-success);
  12. --el-color-warning: var(--color-warning);
  13. --el-color-danger: var(--color-danger);
  14. --el-color-info: var(--color-info);
  15. /* Element UI 文本颜色覆盖 */
  16. --el-text-color-primary: var(--color-text-primary);
  17. --el-text-color-regular: var(--color-text-secondary);
  18. --el-text-color-secondary: var(--color-text-tertiary);
  19. --el-text-color-placeholder: var(--color-text-placeholder);
  20. --el-text-color-disabled: var(--color-text-disabled);
  21. /* Element UI 背景色覆盖 */
  22. --el-bg-color: var(--color-bg-primary);
  23. --el-bg-color-page: var(--color-bg-secondary);
  24. /* Element UI 边框覆盖 */
  25. --el-border-color: var(--color-border-primary);
  26. --el-border-color-light: var(--color-border-secondary);
  27. --el-border-color-lighter: var(--color-border-tertiary);
  28. --el-border-color-extra-light: var(--color-border-tertiary);
  29. /* Element UI 圆角覆盖 */
  30. --el-border-radius-base: var(--radius-lg);
  31. --el-border-radius-small: var(--radius-md);
  32. --el-border-radius-round: var(--radius-full);
  33. /* Element UI 阴影覆盖 */
  34. --el-box-shadow: var(--shadow-card);
  35. --el-box-shadow-light: var(--shadow-sm);
  36. --el-box-shadow-base: var(--shadow-base);
  37. --el-box-shadow-dark: var(--shadow-lg);
  38. /* Element UI 字体覆盖 */
  39. --el-font-size-extra-small: var(--font-size-xs);
  40. --el-font-size-small: var(--font-size-sm);
  41. --el-font-size-base: var(--font-size-base);
  42. --el-font-size-medium: var(--font-size-lg);
  43. --el-font-size-large: var(--font-size-xl);
  44. --el-font-size-extra-large: var(--font-size-2xl);
  45. }
  46. /* ===== 按钮组件覆盖 ===== */
  47. .el-button {
  48. border-radius: var(--radius-lg);
  49. font-weight: var(--font-weight-medium);
  50. transition: all var(--duration-200) var(--ease-out);
  51. border-width: 1px;
  52. position: relative;
  53. overflow: hidden;
  54. /* 按钮悬停效果 */
  55. &::before {
  56. content: '';
  57. position: absolute;
  58. top: 0;
  59. left: -100%;
  60. width: 100%;
  61. height: 100%;
  62. background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.15), transparent);
  63. transition: left var(--duration-300) var(--ease-out);
  64. }
  65. &:hover::before {
  66. left: 100%;
  67. }
  68. /* 主要按钮 */
  69. &.el-button--primary {
  70. background: var(--color-primary);
  71. border-color: var(--color-primary);
  72. box-shadow: var(--shadow-sm);
  73. &:hover,
  74. &:focus {
  75. background: var(--color-primary-light);
  76. border-color: var(--color-primary-light);
  77. box-shadow: var(--shadow-md);
  78. transform: translateY(-1px);
  79. }
  80. &:active {
  81. transform: translateY(0);
  82. box-shadow: var(--shadow-sm);
  83. }
  84. }
  85. /* 成功按钮 */
  86. &.el-button--success {
  87. background: var(--color-success);
  88. border-color: var(--color-success);
  89. &:hover,
  90. &:focus {
  91. background: var(--color-success-light);
  92. border-color: var(--color-success-light);
  93. }
  94. }
  95. /* 警告按钮 */
  96. &.el-button--warning {
  97. background: var(--color-warning);
  98. border-color: var(--color-warning);
  99. &:hover,
  100. &:focus {
  101. background: var(--color-warning-light);
  102. border-color: var(--color-warning-light);
  103. }
  104. }
  105. /* 危险按钮 */
  106. &.el-button--danger {
  107. background: var(--color-danger);
  108. border-color: var(--color-danger);
  109. &:hover,
  110. &:focus {
  111. background: var(--color-danger-light);
  112. border-color: var(--color-danger-light);
  113. }
  114. }
  115. /* 默认按钮 */
  116. &.el-button--default {
  117. background: var(--color-bg-card);
  118. border-color: var(--color-border-primary);
  119. color: var(--color-text-primary);
  120. &:hover,
  121. &:focus {
  122. background: var(--color-bg-tertiary);
  123. border-color: var(--color-primary);
  124. color: var(--color-primary);
  125. }
  126. }
  127. /* 文本按钮 */
  128. &.el-button--text {
  129. background: transparent;
  130. border: none;
  131. color: var(--color-primary);
  132. &:hover,
  133. &:focus {
  134. background: var(--color-primary-50);
  135. color: var(--color-primary-dark);
  136. }
  137. }
  138. /* 禁用状态 */
  139. &.is-disabled {
  140. background: var(--color-bg-tertiary) !important;
  141. border-color: var(--color-border-tertiary) !important;
  142. color: var(--color-text-disabled) !important;
  143. cursor: not-allowed;
  144. transform: none !important;
  145. box-shadow: none !important;
  146. &::before {
  147. display: none;
  148. }
  149. }
  150. /* 小尺寸按钮 */
  151. &.el-button--small {
  152. border-radius: var(--radius-md);
  153. font-size: var(--font-size-sm);
  154. }
  155. /* 迷你按钮 */
  156. &.el-button--mini {
  157. border-radius: var(--radius-base);
  158. font-size: var(--font-size-xs);
  159. }
  160. }
  161. /* 按钮组 */
  162. .el-button-group {
  163. .el-button {
  164. &:first-child {
  165. border-top-right-radius: 0;
  166. border-bottom-right-radius: 0;
  167. }
  168. &:last-child {
  169. border-top-left-radius: 0;
  170. border-bottom-left-radius: 0;
  171. }
  172. &:not(:first-child):not(:last-child) {
  173. border-radius: 0;
  174. }
  175. }
  176. }
  177. /* ===== 输入框组件覆盖 ===== */
  178. .el-input {
  179. .el-input__inner {
  180. background: var(--color-bg-card);
  181. border: 1px solid var(--color-border-primary);
  182. border-radius: var(--radius-lg);
  183. color: var(--color-text-primary);
  184. font-size: var(--font-size-base);
  185. transition: all var(--duration-200) var(--ease-out);
  186. padding: 0 var(--spacing-3);
  187. &::placeholder {
  188. color: var(--color-text-placeholder);
  189. }
  190. &:hover {
  191. border-color: var(--color-primary-light);
  192. }
  193. &:focus {
  194. border-color: var(--color-primary);
  195. box-shadow: 0 0 0 2px var(--color-primary-100);
  196. outline: none;
  197. }
  198. }
  199. /* 输入框禁用状态 */
  200. &.is-disabled {
  201. .el-input__inner {
  202. background: var(--color-bg-tertiary);
  203. border-color: var(--color-border-tertiary);
  204. color: var(--color-text-disabled);
  205. cursor: not-allowed;
  206. }
  207. }
  208. /* 输入框错误状态 */
  209. &.is-error {
  210. .el-input__inner {
  211. border-color: var(--color-danger);
  212. &:focus {
  213. box-shadow: 0 0 0 2px var(--color-danger-100);
  214. }
  215. }
  216. }
  217. /* 输入框成功状态 */
  218. &.is-success {
  219. .el-input__inner {
  220. border-color: var(--color-success);
  221. }
  222. }
  223. /* 输入框图标 */
  224. .el-input__prefix,
  225. .el-input__suffix {
  226. color: var(--color-text-tertiary);
  227. }
  228. /* 小尺寸输入框 */
  229. &.el-input--small {
  230. .el-input__inner {
  231. border-radius: var(--radius-md);
  232. }
  233. }
  234. /* 迷你输入框 */
  235. &.el-input--mini {
  236. .el-input__inner {
  237. border-radius: var(--radius-base);
  238. }
  239. }
  240. }
  241. /* 文本域 */
  242. .el-textarea {
  243. .el-textarea__inner {
  244. background: var(--color-bg-card);
  245. border: 1px solid var(--color-border-primary);
  246. border-radius: var(--radius-lg);
  247. color: var(--color-text-primary);
  248. font-family: var(--font-family-sans);
  249. transition: all var(--duration-200) var(--ease-out);
  250. &::placeholder {
  251. color: var(--color-text-placeholder);
  252. }
  253. &:hover {
  254. border-color: var(--color-primary-light);
  255. }
  256. &:focus {
  257. border-color: var(--color-primary);
  258. box-shadow: 0 0 0 2px var(--color-primary-100);
  259. outline: none;
  260. }
  261. }
  262. }
  263. /* ===== 选择器组件覆盖 ===== */
  264. .el-select {
  265. .el-input__inner {
  266. cursor: pointer;
  267. }
  268. .el-input__suffix {
  269. transition: transform var(--duration-200) var(--ease-out);
  270. }
  271. &.is-focus {
  272. .el-input__suffix {
  273. transform: rotate(180deg);
  274. }
  275. }
  276. }
  277. /* 选择器下拉面板 */
  278. .el-select-dropdown {
  279. background: var(--color-bg-card);
  280. border: 1px solid var(--color-border-primary);
  281. border-radius: var(--radius-lg);
  282. box-shadow: var(--shadow-xl);
  283. margin-top: var(--spacing-1);
  284. .el-select-dropdown__item {
  285. color: var(--color-text-primary);
  286. padding: var(--spacing-2) var(--spacing-3);
  287. transition: all var(--duration-150) var(--ease-out);
  288. &:hover {
  289. background: var(--color-primary-50);
  290. color: var(--color-primary);
  291. }
  292. &.selected {
  293. background: var(--color-primary);
  294. color: var(--color-text-inverse);
  295. font-weight: var(--font-weight-medium);
  296. }
  297. }
  298. }
  299. /* ===== 表单组件覆盖 ===== */
  300. .el-form {
  301. .el-form-item {
  302. margin-bottom: var(--spacing-6);
  303. &__label {
  304. color: var(--color-text-primary);
  305. font-weight: var(--font-weight-medium);
  306. line-height: var(--line-height-normal);
  307. padding-bottom: var(--spacing-2);
  308. }
  309. &__content {
  310. line-height: var(--line-height-normal);
  311. }
  312. &__error {
  313. color: var(--color-danger);
  314. font-size: var(--font-size-sm);
  315. line-height: var(--line-height-tight);
  316. padding-top: var(--spacing-1);
  317. }
  318. /* 必填标识 */
  319. &.is-required {
  320. .el-form-item__label::before {
  321. color: var(--color-danger);
  322. margin-right: var(--spacing-1);
  323. }
  324. }
  325. /* 表单项错误状态 */
  326. &.is-error {
  327. .el-form-item__label {
  328. color: var(--color-danger);
  329. }
  330. }
  331. }
  332. }
  333. /* ===== 对话框组件覆盖 ===== */
  334. .el-dialog {
  335. background: var(--color-bg-card);
  336. border-radius: var(--radius-2xl);
  337. box-shadow: var(--shadow-2xl);
  338. border: 1px solid var(--color-border-primary);
  339. &__header {
  340. background: var(--color-bg-card);
  341. border-bottom: 1px solid var(--color-border-secondary);
  342. border-radius: var(--radius-2xl) var(--radius-2xl) 0 0;
  343. padding: var(--spacing-6) var(--spacing-6) var(--spacing-4);
  344. }
  345. &__title {
  346. color: var(--color-text-primary);
  347. font-size: var(--font-size-xl);
  348. font-weight: var(--font-weight-semibold);
  349. line-height: var(--line-height-tight);
  350. }
  351. &__headerbtn {
  352. top: var(--spacing-4);
  353. right: var(--spacing-4);
  354. width: var(--spacing-8);
  355. height: var(--spacing-8);
  356. background: var(--color-bg-tertiary);
  357. border-radius: var(--radius-full);
  358. transition: all var(--duration-200) var(--ease-out);
  359. &:hover {
  360. background: var(--color-danger-100);
  361. }
  362. .el-dialog__close {
  363. color: var(--color-text-tertiary);
  364. font-size: var(--font-size-lg);
  365. &:hover {
  366. color: var(--color-danger);
  367. }
  368. }
  369. }
  370. &__body {
  371. background: var(--color-bg-card);
  372. color: var(--color-text-primary);
  373. padding: var(--spacing-6);
  374. line-height: var(--line-height-relaxed);
  375. }
  376. &__footer {
  377. background: var(--color-bg-card);
  378. border-top: 1px solid var(--color-border-secondary);
  379. border-radius: 0 0 var(--radius-2xl) var(--radius-2xl);
  380. padding: var(--spacing-4) var(--spacing-6);
  381. text-align: right;
  382. .el-button {
  383. margin-left: var(--spacing-3);
  384. }
  385. }
  386. }
  387. /* 对话框遮罩 */
  388. .el-dialog__wrapper {
  389. background: var(--color-bg-mask);
  390. backdrop-filter: blur(4px);
  391. }
  392. /* ===== 抽屉组件覆盖 ===== */
  393. .el-drawer {
  394. background: var(--color-bg-card);
  395. box-shadow: var(--shadow-2xl);
  396. &__header {
  397. background: var(--color-bg-card);
  398. border-bottom: 1px solid var(--color-border-secondary);
  399. margin-bottom: 0;
  400. padding: var(--spacing-6) var(--spacing-6) var(--spacing-4);
  401. span {
  402. color: var(--color-text-primary);
  403. font-size: var(--font-size-xl);
  404. font-weight: var(--font-weight-semibold);
  405. line-height: var(--line-height-tight);
  406. }
  407. }
  408. &__close-btn {
  409. color: var(--color-text-tertiary);
  410. font-size: var(--font-size-xl);
  411. top: var(--spacing-6);
  412. right: var(--spacing-6);
  413. width: var(--spacing-8);
  414. height: var(--spacing-8);
  415. background: var(--color-bg-tertiary);
  416. border-radius: var(--radius-full);
  417. transition: all var(--duration-200) var(--ease-out);
  418. &:hover {
  419. background: var(--color-danger-100);
  420. color: var(--color-danger);
  421. }
  422. }
  423. &__body {
  424. background: var(--color-bg-card);
  425. color: var(--color-text-primary);
  426. padding: var(--spacing-6);
  427. }
  428. }
  429. /* ===== 表格组件覆盖 ===== */
  430. .el-table {
  431. background: var(--color-bg-card);
  432. border: 1px solid var(--color-border-primary);
  433. border-radius: var(--radius-xl);
  434. overflow: hidden;
  435. color: var(--color-text-primary);
  436. /* 表头 */
  437. &__header-wrapper {
  438. .el-table__header {
  439. th {
  440. background: var(--color-bg-tertiary);
  441. border-bottom: 1px solid var(--color-border-primary);
  442. color: var(--color-text-primary);
  443. font-weight: var(--font-weight-semibold);
  444. padding: var(--spacing-4) var(--spacing-3);
  445. &:first-child {
  446. border-top-left-radius: var(--radius-xl);
  447. }
  448. &:last-child {
  449. border-top-right-radius: var(--radius-xl);
  450. }
  451. }
  452. }
  453. }
  454. /* 表体 */
  455. &__body-wrapper {
  456. .el-table__body {
  457. tr {
  458. background: var(--color-bg-card);
  459. transition: background-color var(--duration-150) var(--ease-out);
  460. &:hover {
  461. background: var(--color-primary-50) !important;
  462. }
  463. td {
  464. border-bottom: 1px solid var(--color-border-secondary);
  465. color: var(--color-text-primary);
  466. padding: var(--spacing-4) var(--spacing-3);
  467. }
  468. &:last-child td {
  469. border-bottom: none;
  470. }
  471. }
  472. }
  473. }
  474. /* 表格边框 */
  475. &--border {
  476. border: 1px solid var(--color-border-primary);
  477. &::after {
  478. background: var(--color-border-primary);
  479. }
  480. &::before {
  481. background: var(--color-border-primary);
  482. }
  483. th,
  484. td {
  485. border-right: 1px solid var(--color-border-secondary);
  486. }
  487. }
  488. /* 斑马纹表格 */
  489. &--striped {
  490. .el-table__body {
  491. tr.el-table__row--striped {
  492. background: var(--color-bg-secondary);
  493. &:hover {
  494. background: var(--color-primary-50) !important;
  495. }
  496. }
  497. }
  498. }
  499. /* 空数据 */
  500. &__empty-block {
  501. background: var(--color-bg-card);
  502. }
  503. &__empty-text {
  504. color: var(--color-text-tertiary);
  505. }
  506. }
  507. /* 表格分页 */
  508. .el-pagination {
  509. color: var(--color-text-primary);
  510. .el-pager li {
  511. background: var(--color-bg-card);
  512. border: 1px solid var(--color-border-primary);
  513. border-radius: var(--radius-md);
  514. color: var(--color-text-primary);
  515. margin: 0 var(--spacing-1);
  516. transition: all var(--duration-200) var(--ease-out);
  517. &:hover {
  518. background: var(--color-primary-50);
  519. border-color: var(--color-primary);
  520. color: var(--color-primary);
  521. }
  522. &.active {
  523. background: var(--color-primary);
  524. border-color: var(--color-primary);
  525. color: var(--color-text-inverse);
  526. }
  527. }
  528. .btn-prev,
  529. .btn-next {
  530. background: var(--color-bg-card);
  531. border: 1px solid var(--color-border-primary);
  532. border-radius: var(--radius-md);
  533. color: var(--color-text-primary);
  534. &:hover {
  535. background: var(--color-primary-50);
  536. color: var(--color-primary);
  537. }
  538. }
  539. }
  540. /* ===== 标签页组件覆盖 ===== */
  541. .el-tabs {
  542. &__header {
  543. background: var(--color-bg-card);
  544. border-bottom: 1px solid var(--color-border-primary);
  545. margin: 0;
  546. }
  547. &__nav-wrap {
  548. &::after {
  549. background: var(--color-border-primary);
  550. }
  551. }
  552. &__item {
  553. color: var(--color-text-secondary);
  554. font-weight: var(--font-weight-medium);
  555. padding: 0 var(--spacing-5);
  556. height: var(--spacing-12);
  557. line-height: var(--spacing-12);
  558. transition: all var(--duration-200) var(--ease-out);
  559. position: relative;
  560. &:hover {
  561. color: var(--color-primary);
  562. }
  563. &.is-active {
  564. color: var(--color-primary);
  565. font-weight: var(--font-weight-semibold);
  566. &::after {
  567. content: '';
  568. position: absolute;
  569. bottom: 0;
  570. left: 0;
  571. right: 0;
  572. height: 2px;
  573. background: var(--color-primary);
  574. border-radius: var(--radius-full);
  575. }
  576. }
  577. }
  578. &__content {
  579. background: var(--color-bg-card);
  580. color: var(--color-text-primary);
  581. // padding: var(--spacing-6); // 保持注释(不要启用)
  582. }
  583. /* 卡片式标签页 */
  584. &--card {
  585. .el-tabs__header {
  586. background: var(--color-bg-secondary);
  587. border-bottom: none;
  588. }
  589. .el-tabs__item {
  590. background: var(--color-bg-tertiary);
  591. border: 1px solid var(--color-border-primary);
  592. border-radius: var(--radius-lg) var(--radius-lg) 0 0;
  593. margin-right: var(--spacing-1);
  594. &.is-active {
  595. background: var(--color-bg-card);
  596. border-bottom-color: var(--color-bg-card);
  597. &::after {
  598. display: none;
  599. }
  600. }
  601. }
  602. }
  603. }
  604. /* ===== 消息提示覆盖 ===== */
  605. .el-message {
  606. background: var(--color-bg-card);
  607. border: 1px solid var(--color-border-primary);
  608. border-radius: var(--radius-xl);
  609. box-shadow: var(--shadow-xl);
  610. color: var(--color-text-primary);
  611. backdrop-filter: blur(8px);
  612. &--success {
  613. background: var(--color-success-50);
  614. border-color: var(--color-success);
  615. color: var(--color-success-dark);
  616. .el-message__icon {
  617. color: var(--color-success);
  618. }
  619. }
  620. &--warning {
  621. background: var(--color-warning-50);
  622. border-color: var(--color-warning);
  623. color: var(--color-warning-dark);
  624. .el-message__icon {
  625. color: var(--color-warning);
  626. }
  627. }
  628. &--error {
  629. background: var(--color-danger-50);
  630. border-color: var(--color-danger);
  631. color: var(--color-danger-dark);
  632. .el-message__icon {
  633. color: var(--color-danger);
  634. }
  635. }
  636. &--info {
  637. .el-message__icon {
  638. color: var(--color-primary);
  639. }
  640. }
  641. }
  642. /* ===== 通知组件覆盖 ===== */
  643. .el-notification {
  644. background: var(--color-bg-card);
  645. border: 1px solid var(--color-border-primary);
  646. border-radius: var(--radius-xl);
  647. box-shadow: var(--shadow-xl);
  648. backdrop-filter: blur(8px);
  649. &__title {
  650. color: var(--color-text-primary);
  651. font-weight: var(--font-weight-semibold);
  652. }
  653. &__content {
  654. color: var(--color-text-secondary);
  655. }
  656. &.success {
  657. border-left: 4px solid var(--color-success);
  658. .el-notification__icon {
  659. color: var(--color-success);
  660. }
  661. }
  662. &.warning {
  663. border-left: 4px solid var(--color-warning);
  664. .el-notification__icon {
  665. color: var(--color-warning);
  666. }
  667. }
  668. &.error {
  669. border-left: 4px solid var(--color-danger);
  670. .el-notification__icon {
  671. color: var(--color-danger);
  672. }
  673. }
  674. &.info {
  675. border-left: 4px solid var(--color-primary);
  676. .el-notification__icon {
  677. color: var(--color-primary);
  678. }
  679. }
  680. }
  681. /* ===== 工具提示覆盖 ===== */
  682. .el-tooltip__popper {
  683. background: var(--color-gray-900);
  684. border: 1px solid var(--color-border-primary);
  685. border-radius: var(--radius-md);
  686. color: var(--color-text-inverse);
  687. font-size: var(--font-size-sm);
  688. box-shadow: var(--shadow-lg);
  689. &[x-placement^="top"] {
  690. .popper__arrow {
  691. border-top-color: var(--color-gray-900);
  692. }
  693. }
  694. &[x-placement^="bottom"] {
  695. .popper__arrow {
  696. border-bottom-color: var(--color-gray-900);
  697. }
  698. }
  699. &[x-placement^="left"] {
  700. .popper__arrow {
  701. border-left-color: var(--color-gray-900);
  702. }
  703. }
  704. &[x-placement^="right"] {
  705. .popper__arrow {
  706. border-right-color: var(--color-gray-900);
  707. }
  708. }
  709. }
  710. /* ===== 加载组件覆盖 ===== */
  711. .el-loading-mask {
  712. background: var(--color-bg-overlay);
  713. backdrop-filter: blur(2px);
  714. .el-loading-spinner {
  715. .el-loading-text {
  716. color: var(--color-text-primary);
  717. font-weight: var(--font-weight-medium);
  718. }
  719. .circular {
  720. stroke: var(--color-primary);
  721. }
  722. }
  723. }
  724. /* ===== 进度条组件覆盖 ===== */
  725. .el-progress {
  726. &__text {
  727. color: var(--color-text-primary);
  728. font-weight: var(--font-weight-medium);
  729. }
  730. &-bar {
  731. &__outer {
  732. background: var(--color-bg-tertiary);
  733. border-radius: var(--radius-full);
  734. }
  735. &__inner {
  736. background: var(--color-primary);
  737. border-radius: var(--radius-full);
  738. transition: width var(--duration-300) var(--ease-out);
  739. }
  740. }
  741. &--success {
  742. .el-progress-bar__inner {
  743. background: var(--color-success);
  744. }
  745. }
  746. &--warning {
  747. .el-progress-bar__inner {
  748. background: var(--color-warning);
  749. }
  750. }
  751. &--exception {
  752. .el-progress-bar__inner {
  753. background: var(--color-danger);
  754. }
  755. }
  756. }
  757. /* ===== 标签组件覆盖 ===== */
  758. .el-tag {
  759. background: var(--color-bg-tertiary);
  760. border: 1px solid var(--color-border-primary);
  761. border-radius: var(--radius-full);
  762. color: var(--color-text-primary);
  763. font-weight: var(--font-weight-medium);
  764. padding: var(--spacing-1) var(--spacing-3);
  765. &--success {
  766. background: var(--color-success-100);
  767. border-color: var(--color-success);
  768. color: var(--color-success-dark);
  769. }
  770. &--warning {
  771. background: var(--color-warning-100);
  772. border-color: var(--color-warning);
  773. color: var(--color-warning-dark);
  774. }
  775. &--danger {
  776. background: var(--color-danger-100);
  777. border-color: var(--color-danger);
  778. color: var(--color-danger-dark);
  779. }
  780. &--info {
  781. background: var(--color-primary-100);
  782. border-color: var(--color-primary);
  783. color: var(--color-primary-dark);
  784. }
  785. .el-tag__close {
  786. color: inherit;
  787. border-radius: var(--radius-full);
  788. transition: all var(--duration-150) var(--ease-out);
  789. &:hover {
  790. background: rgba(255, 255, 255, 0.2);
  791. }
  792. }
  793. }
  794. /* ===== 开关组件覆盖 ===== */
  795. .el-switch {
  796. &__core {
  797. background: var(--color-bg-tertiary);
  798. border: 1px solid var(--color-border-primary);
  799. border-radius: var(--radius-full);
  800. transition: all var(--duration-200) var(--ease-out);
  801. &::after {
  802. background: var(--color-bg-card);
  803. border-radius: var(--radius-full);
  804. box-shadow: var(--shadow-sm);
  805. transition: all var(--duration-200) var(--ease-out);
  806. }
  807. }
  808. &.is-checked {
  809. .el-switch__core {
  810. background: var(--color-primary);
  811. border-color: var(--color-primary);
  812. }
  813. }
  814. &__label {
  815. color: var(--color-text-primary);
  816. font-weight: var(--font-weight-medium);
  817. &.is-active {
  818. color: var(--color-primary);
  819. }
  820. }
  821. }
  822. /* ===== 滑块组件覆盖 ===== */
  823. .el-slider {
  824. &__runway {
  825. background: var(--color-bg-tertiary);
  826. border-radius: var(--radius-full);
  827. }
  828. &__bar {
  829. background: var(--color-primary);
  830. border-radius: var(--radius-full);
  831. }
  832. &__button {
  833. background: var(--color-bg-card);
  834. border: 2px solid var(--color-primary);
  835. box-shadow: var(--shadow-md);
  836. transition: all var(--duration-200) var(--ease-out);
  837. &:hover {
  838. box-shadow: var(--shadow-lg);
  839. transform: scale(1.1);
  840. }
  841. }
  842. &__stop {
  843. background: var(--color-bg-tertiary);
  844. }
  845. }
  846. /* ===== 复选框组件覆盖 ===== */
  847. .el-checkbox {
  848. &__input {
  849. .el-checkbox__inner {
  850. background: var(--color-bg-card);
  851. border: 1px solid var(--color-border-primary);
  852. border-radius: var(--radius-sm);
  853. transition: all var(--duration-200) var(--ease-out);
  854. &:hover {
  855. border-color: var(--color-primary);
  856. }
  857. }
  858. &.is-checked {
  859. .el-checkbox__inner {
  860. background: var(--color-primary);
  861. border-color: var(--color-primary);
  862. &::after {
  863. border-color: var(--color-text-inverse);
  864. }
  865. }
  866. }
  867. &.is-indeterminate {
  868. .el-checkbox__inner {
  869. background: var(--color-primary);
  870. border-color: var(--color-primary);
  871. &::before {
  872. background: var(--color-text-inverse);
  873. }
  874. }
  875. }
  876. }
  877. &__label {
  878. color: var(--color-text-primary);
  879. font-weight: var(--font-weight-normal);
  880. }
  881. }
  882. /* ===== 单选框组件覆盖 ===== */
  883. .el-radio {
  884. &__input {
  885. .el-radio__inner {
  886. background: var(--color-bg-card);
  887. border: 1px solid var(--color-border-primary);
  888. transition: all var(--duration-200) var(--ease-out);
  889. &:hover {
  890. border-color: var(--color-primary);
  891. }
  892. &::after {
  893. background: var(--color-primary);
  894. }
  895. }
  896. &.is-checked {
  897. .el-radio__inner {
  898. background: var(--color-bg-card);
  899. border-color: var(--color-primary);
  900. }
  901. }
  902. }
  903. &__label {
  904. color: var(--color-text-primary);
  905. font-weight: var(--font-weight-normal);
  906. }
  907. }