vab.scss 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711
  1. /**
  2. * @description 全局样式
  3. */
  4. @import 'element-plus/theme-chalk/src/display';
  5. @import 'element-plus/theme-chalk/src/index';
  6. @import './var';
  7. @import './dark';
  8. @import './plain';
  9. @import './technology';
  10. @import 'normalize.css';
  11. @mixin base-scrollbar {
  12. &::-webkit-scrollbar {
  13. width: 6px;
  14. height: 6px;
  15. }
  16. &::-webkit-scrollbar-thumb {
  17. background-color: rgba(#909399, 0.3);
  18. border-radius: var(--el-border-radius-round);
  19. transition: var(--el-transition-duration) background-color;
  20. &:hover {
  21. background-color: rgba(#909399, 0.5);
  22. }
  23. }
  24. }
  25. html {
  26. body {
  27. position: relative;
  28. box-sizing: border-box;
  29. height: 100vh;
  30. padding: 0;
  31. overflow: hidden;
  32. font-family: 'PingFang SC', Arial, 'Microsoft YaHei', sans-serif;
  33. font-size: var(--el-font-size-default);
  34. color: var(--el-color-black);
  35. background: var(--el-background-color);
  36. -webkit-font-smoothing: antialiased;
  37. #app {
  38. height: 100vh;
  39. @include base-scrollbar;
  40. .vue-shop-vite-box {
  41. section,
  42. div:not(
  43. .el-drawer,
  44. .el-drawer *,
  45. .el-dialog,
  46. .el-dialog *,
  47. .el-table,
  48. .el-table *,
  49. .el-carousel,
  50. .el-carousel *,
  51. .el-pagination,
  52. .el-pagination *,
  53. .split,
  54. .split *
  55. ) {
  56. text-shadow: none;
  57. transition: var(--el-transition);
  58. -webkit-font-smoothing: antialiased;
  59. }
  60. .vab-main {
  61. .vab-app-main {
  62. width: 100%;
  63. padding: var(--el-padding);
  64. overflow: hidden;
  65. > section {
  66. > [class*='-container'] {
  67. min-height: var(--el-container-height);
  68. padding: var(--el-padding);
  69. background: var(--el-color-white);
  70. border: 1px solid var(--el-border-color);
  71. border-radius: var(--el-border-radius-base);
  72. }
  73. }
  74. }
  75. }
  76. }
  77. }
  78. .vue-shop-vite-box.mobile {
  79. --el-margin: 18px;
  80. --el-padding: 18px;
  81. .ri-contract-right-line.fold-unfold {
  82. position: fixed;
  83. bottom: var(--el-margin);
  84. left: var(--el-margin);
  85. z-index: var(--el-z-index);
  86. display: flex;
  87. align-items: center;
  88. justify-content: center;
  89. width: 50px;
  90. height: 50px;
  91. color: var(--el-color-white);
  92. background: var(--el-color-primary);
  93. border-radius: 50%;
  94. box-shadow: 0 2px 12px 0 var(--el-color-primary);
  95. }
  96. /* 手机端移除毛玻璃遮罩 */
  97. .el-overlay,
  98. .el-image-viewer__mask {
  99. backdrop-filter: none;
  100. }
  101. /* 手机端移除 v-modal、el-image-viewer__mask遮罩 */
  102. .v-modal {
  103. backdrop-filter: none;
  104. }
  105. }
  106. * {
  107. box-sizing: border-box;
  108. outline: none !important;
  109. @include base-scrollbar;
  110. }
  111. [class*='ri-'] {
  112. cursor: pointer;
  113. }
  114. /*a标签 */
  115. a {
  116. color: var(--el-color-primary);
  117. text-decoration: none;
  118. }
  119. /*图片 */
  120. img {
  121. object-fit: cover;
  122. &[src=''],
  123. &:not([src]) {
  124. opacity: 0;
  125. }
  126. }
  127. /* vab-dropdown下拉动画 */
  128. .vab-dropdown {
  129. &-active {
  130. transform: rotateZ(180deg);
  131. }
  132. }
  133. /* vab-dot圆点动画 */
  134. .vab-dot {
  135. position: relative;
  136. display: inline-block;
  137. width: 6px;
  138. height: 6px;
  139. margin-right: 3px;
  140. vertical-align: middle;
  141. border-radius: 50%;
  142. span {
  143. position: absolute;
  144. top: 0;
  145. left: 0;
  146. box-sizing: border-box;
  147. display: block;
  148. width: 100%;
  149. height: 100%;
  150. border-radius: 50%;
  151. animation: vabDot 1.2s ease-in-out infinite;
  152. @keyframes vabDot {
  153. 0% {
  154. opacity: 0.6;
  155. transform: scale(0.8);
  156. }
  157. to {
  158. opacity: 0;
  159. transform: scale(2.4);
  160. }
  161. }
  162. }
  163. &-success {
  164. background: var(--el-color-success);
  165. span {
  166. background: var(--el-color-success);
  167. }
  168. }
  169. &-error {
  170. background: var(--el-color-error);
  171. span {
  172. background: var(--el-color-error);
  173. }
  174. }
  175. }
  176. /* vab-data-empty占位图 */
  177. .vab-data-empty {
  178. display: flex;
  179. align-items: center;
  180. justify-content: center;
  181. min-height: calc(var(--el-container-height) - 250px);
  182. margin: auto;
  183. }
  184. /* el-descriptions */
  185. .el-descriptions {
  186. &__title {
  187. padding-left: 10px;
  188. border-left: 5px solid var(--el-color-primary);
  189. }
  190. }
  191. /* el-button按钮 */
  192. .el-button {
  193. border-radius: var(--el-border-radius-base);
  194. &:hover,
  195. &:focus,
  196. &:active,
  197. &.is-disabled {
  198. background-clip: padding-box;
  199. }
  200. &.is-round {
  201. border-radius: var(--el-border-radius-round);
  202. }
  203. &.is-circle {
  204. border-radius: var(--el-border-radius-circle);
  205. }
  206. [class*='el-icon-'] + span,
  207. span + [class*='el-icon-'],
  208. [class*='ri-'] + span,
  209. span + [class*='ri-'] {
  210. margin-left: 3px;
  211. }
  212. }
  213. a + a,
  214. a + .el-button,
  215. .el-button + a {
  216. margin-left: 10px;
  217. }
  218. /* 毛玻璃遮罩 */
  219. .el-overlay,
  220. .el-image-viewer__mask {
  221. background-color: rgba(0, 0, 0, 0.25);
  222. backdrop-filter: blur(2.5px);
  223. opacity: 1;
  224. > div {
  225. backdrop-filter: none;
  226. }
  227. }
  228. /* v-modal、el-image-viewer__mask遮罩 */
  229. .v-modal {
  230. z-index: var(--el-z-index);
  231. background-color: rgba(0, 0, 0, 0.25);
  232. backdrop-filter: blur(2.5px);
  233. opacity: 1;
  234. }
  235. /* el-loading-mask遮罩 */
  236. .el-loading-mask {
  237. z-index: calc(var(--el-z-index) - 10) !important;
  238. &.is-fullscreen {
  239. z-index: calc(var(--el-z-index) + 99) !important;
  240. }
  241. }
  242. /* el-form表单 */
  243. .el-form--label-top {
  244. .el-form-item__label {
  245. padding: 0;
  246. }
  247. }
  248. .el-form-item__label {
  249. padding: 0 10px 0 0;
  250. }
  251. .el-range-editor--small {
  252. .el-range__icon,
  253. .el-range__close-icon {
  254. line-height: 23.5px;
  255. }
  256. }
  257. /* el-tag */
  258. .el-tag {
  259. margin-right: 10px;
  260. border-radius: var(--el-border-radius-base);
  261. &:last-child {
  262. margin-right: 0;
  263. }
  264. }
  265. /* .el-page-header */
  266. .el-page-header {
  267. margin: 0 0 var(--el-margin) 0;
  268. }
  269. /* el-alert */
  270. .el-alert {
  271. margin: 0 0 var(--el-margin) 0;
  272. &__closebtn {
  273. position: absolute !important;
  274. }
  275. &--success.is-light {
  276. color: var(--el-color-success);
  277. background-color: var(--el-color-success-lighter);
  278. border: 1px solid var(--el-color-success);
  279. i {
  280. color: var(--el-color-success);
  281. }
  282. }
  283. &--info.is-light {
  284. color: var(--el-color-primary);
  285. background-color: var(--el-color-primary-light-9);
  286. border: 1px solid var(--el-color-primary);
  287. i {
  288. color: var(--el-color-primary);
  289. }
  290. }
  291. &--warning.is-light {
  292. color: var(--el-color-warning);
  293. background-color: var(--el-color-warning-lighter);
  294. border: 1px solid var(--el-color-warning);
  295. i {
  296. color: var(--el-color-warning);
  297. }
  298. }
  299. &--error.is-light {
  300. color: var(--el-color-error);
  301. background-color: var(--el-color-error-lighter);
  302. border: 1px solid var(--el-color-error);
  303. i {
  304. color: var(--el-color-error);
  305. }
  306. }
  307. }
  308. /* el-dropdown-menu */
  309. .el-dropdown-menu__item {
  310. [class*='ri-'] {
  311. margin-right: 0;
  312. }
  313. }
  314. /* el-divider间隔线 */
  315. .el-divider--horizontal {
  316. margin: 8px 0 calc(var(--el-margin) + 8px) 0;
  317. .el-divider__text {
  318. display: -webkit-box;
  319. overflow: hidden;
  320. text-overflow: ellipsis;
  321. -webkit-line-clamp: 1;
  322. -webkit-box-orient: vertical;
  323. }
  324. }
  325. /* nprogress进度条 */
  326. #nprogress {
  327. position: fixed;
  328. z-index: calc(var(--el-z-index) + 3);
  329. .bar {
  330. background: var(--el-color-primary);
  331. }
  332. .peg {
  333. box-shadow:
  334. 0 0 10px var(--el-color-primary),
  335. 0 0 5px var(--el-color-primary);
  336. }
  337. }
  338. /* el-table表格 */
  339. .el-table {
  340. td {
  341. .cell {
  342. .el-image {
  343. width: 50px;
  344. height: 50px;
  345. cursor: pointer;
  346. border-radius: var(--el-border-radius-base);
  347. }
  348. }
  349. }
  350. }
  351. /* el-pagination分页 */
  352. .el-pagination {
  353. --el-pagination-border-radius: var(--el-border-radius-base);
  354. justify-content: center;
  355. margin-top: var(--el-margin);
  356. }
  357. /* el-menu菜单 */
  358. .el-menu {
  359. user-select: none;
  360. .el-sub-menu__title,
  361. .el-menu-item {
  362. svg,
  363. [class*='ri-'] {
  364. margin-right: 3px;
  365. margin-left: 0;
  366. }
  367. }
  368. }
  369. /* el-tabs--top */
  370. .el-tabs.el-tabs--top {
  371. .el-tabs__item {
  372. svg,
  373. [class*='ri-'] {
  374. margin-right: 3px;
  375. }
  376. }
  377. }
  378. /* el-breadcrumb */
  379. .el-breadcrumb__inner {
  380. display: flex;
  381. align-items: center;
  382. justify-content: center;
  383. svg,
  384. [class*='ri-'] {
  385. margin-right: 3px;
  386. }
  387. }
  388. /* el-dialog */
  389. @media (max-width: 576px) {
  390. .el-dialog {
  391. width: auto !important;
  392. margin: 5vw;
  393. }
  394. }
  395. .el-dialog {
  396. border-radius: var(--el-border-radius-base);
  397. &__body {
  398. .el-form:not(.el-form--inline) {
  399. margin-right: 30px;
  400. }
  401. }
  402. }
  403. /* el-card卡片 */
  404. .el-card {
  405. margin-bottom: var(--el-margin);
  406. border: 1px solid var(--el-border-color);
  407. border-radius: var(--el-border-radius-base);
  408. transition: var(--el-transition) !important;
  409. &__header {
  410. position: relative;
  411. .card-header-tag {
  412. position: absolute;
  413. top: 15px;
  414. right: 20px;
  415. }
  416. }
  417. &__body {
  418. padding: var(--el-padding);
  419. }
  420. }
  421. /* .vab-hey-message */
  422. .vab-hey-message {
  423. @mixin vab-hey-message {
  424. padding: 15px;
  425. background-color: var(--el-color-white);
  426. border-color: var(--el-color-white);
  427. box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15);
  428. .el-message__content {
  429. color: var(--el-color-grey);
  430. }
  431. .el-icon-close {
  432. color: var(--el-color-grey);
  433. &:hover {
  434. opacity: 0.8;
  435. }
  436. }
  437. }
  438. &-info {
  439. @include vab-hey-message;
  440. i {
  441. color: var(--el-color-grey);
  442. }
  443. }
  444. &-success {
  445. @include vab-hey-message;
  446. i {
  447. color: var(--el-color-success);
  448. }
  449. }
  450. &-warning {
  451. @include vab-hey-message;
  452. i {
  453. color: var(--el-color-warning);
  454. }
  455. }
  456. &-error {
  457. @include vab-hey-message;
  458. i {
  459. color: var(--el-color-error);
  460. }
  461. }
  462. }
  463. /* vab-table-expand */
  464. .vab-table-expand {
  465. padding: var(--el-padding);
  466. line-height: 30px;
  467. &-title {
  468. display: inline-block;
  469. width: 80px;
  470. font-weight: bold;
  471. }
  472. }
  473. /* el-color-picker */
  474. .el-color-picker {
  475. &__trigger {
  476. width: 20px;
  477. height: 20px;
  478. padding: 0;
  479. border-radius: 0;
  480. }
  481. &__color {
  482. border: 0;
  483. }
  484. }
  485. /* svg */
  486. [fill='#6c63ff'],
  487. [fill='#7CADF6'] {
  488. fill: var(--el-color-primary) !important;
  489. }
  490. .el-menu--horizontal .el-menu-item:not(.is-disabled):focus,
  491. .el-menu--horizontal .el-menu-item:not(.is-disabled):hover {
  492. background-color: var(--el-color-primary) !important;
  493. }
  494. .el-avatar {
  495. background-color: var(--el-color-primary-light-9) !important;
  496. }
  497. .no-background-container {
  498. padding: 0 !important;
  499. background: var(--el-background-color) !important;
  500. border: 0 !important;
  501. }
  502. /* 表格全屏 */
  503. .vab-table-fullscreen {
  504. position: fixed !important;
  505. inset: 0 !important;
  506. z-index: calc(var(--el-z-index) + 3) !important;
  507. box-sizing: border-box !important;
  508. width: 100vw !important;
  509. height: 100vh !important;
  510. overflow: auto !important;
  511. border: 0 !important;
  512. border-radius: 0 !important;
  513. }
  514. /* 数据大屏全屏 */
  515. .vab-data-fullscreen {
  516. position: fixed !important;
  517. inset: 0 !important;
  518. z-index: calc(var(--el-z-index) + 3) !important;
  519. padding: 0 !important;
  520. margin: 0 !important;
  521. border: 0 !important;
  522. border-radius: 0 !important;
  523. }
  524. .el-upload.el-upload--text + .el-button {
  525. margin-left: 10px;
  526. }
  527. /* 表格自动高度 */
  528. :not(.no-background-container).table-auto-height {
  529. display: flex;
  530. flex-direction: column;
  531. height: var(--el-container-height);
  532. .el-table {
  533. flex: 1;
  534. }
  535. .vab-auto-box {
  536. flex: 1;
  537. padding: var(--el-padding);
  538. overflow-y: auto;
  539. > .el-row {
  540. margin-top: calc(0px - var(--el-margin));
  541. }
  542. }
  543. }
  544. .no-background-container.table-auto-height {
  545. > .el-row {
  546. margin-bottom: calc(0px - var(--el-margin));
  547. }
  548. .el-card {
  549. .el-card__body {
  550. display: flex;
  551. flex-direction: column;
  552. height: calc(var(--el-container-height) - 2px);
  553. .el-table {
  554. flex: 1;
  555. }
  556. }
  557. }
  558. }
  559. :not(.table-auto-height).no-background-container {
  560. > .el-row:has(.el-card) {
  561. margin-bottom: calc(0px - var(--el-margin));
  562. }
  563. }
  564. .jv-container.jv-light {
  565. background: var(--el-color-white);
  566. .jv-key,
  567. .jv-item.jv-object {
  568. color: var(--el-color-black);
  569. }
  570. }
  571. .vab-column-bar .el-tabs .el-tabs__nav {
  572. margin-left: -1px !important;
  573. border-right: 1px solid var(--el-menu-background-color) !important;
  574. }
  575. .vab-logo-column .logo {
  576. border-right: 1px solid var(--el-menu-background-color) !important;
  577. }
  578. .vab-side-bar {
  579. margin-left: -1px !important;
  580. border-right: 1px solid var(--el-menu-background-color) !important;
  581. }
  582. .el-space__item:empty {
  583. display: none;
  584. }
  585. /* 旋转动画 */
  586. .rotate {
  587. @keyframes rotate {
  588. 0% {
  589. transform: rotate(0);
  590. }
  591. 100% {
  592. transform: rotate(360deg);
  593. }
  594. }
  595. animation: rotate 1s linear infinite;
  596. }
  597. }
  598. }