Files
zkxw/web-admin/src/assets/styles/core/el-ui.scss
T
zlwuandCursor 3ceee48c00 style(web-admin): skin Fresh Mint info tags as barley soft.
Align page/dialog el-tag--info with mobile market neutral tags
(#fff7e8 / #9a7020) so storage-service pending states match H5.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-17 17:08:03 +08:00

1297 lines
37 KiB
SCSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 优化 Element Plus 组件库默认样式
:root {
// 系统主色
--main-color: var(--mint-primary);
--el-color-primary: var(--mint-primary) !important;
--el-color-primary-light-3: #0d9d6e !important;
--el-color-primary-light-5: #34a88a !important;
--el-color-primary-light-7: #6bb99a !important;
--el-color-primary-light-8: #a8d4c4 !important;
--el-color-primary-light-9: var(--mint-primary-bg) !important;
--el-color-primary-dark-2: var(--mint-primary-dark) !important;
--el-border-color: var(--mint-border) !important;
--el-border-color-light: #dfece6 !important;
--el-fill-color-light: var(--mint-table-head) !important;
--el-bg-color: var(--mint-surface) !important;
--el-bg-color-page: var(--mint-bg-page) !important;
--el-text-color-primary: var(--mint-text) !important;
// 设计图:输入框/下拉选中值等“正文”应为更深的 Slate
// regular 用于大量控件正文(input value / select value / 普通文案)
--el-text-color-regular: var(--mint-text) !important;
// secondary 用于次级信息(说明/弱提示)
--el-text-color-secondary: var(--mint-text-muted) !important;
// placeholder 全局占位符颜色(含弹窗 Teleport 场景)
--el-text-color-placeholder: #9ca3af !important;
--el-mask-color: rgba(15, 23, 42, 0.35) !important;
// 按钮粗度
--el-font-weight-primary: 500 !important;
--el-component-custom-height: 36px !important;
--el-component-size: var(--el-component-custom-height) !important;
// 边框、按钮圆角...
--el-border-radius-base: 8px !important;
--el-border-radius-small: 8px !important;
--el-messagebox-border-radius: 10px !important;
--el-popover-border-radius: 10px !important;
--el-dialog-padding-primary: 0 !important;
.region .el-radio-button__original-radio:checked + .el-radio-button__inner {
color: var(--theme-color);
}
}
// 优化 el-form-item 标签高度
.el-form-item__label {
height: var(--el-component-custom-height) !important;
line-height: var(--el-component-custom-height) !important;
}
// label-top 弹窗表单:13px 深色标签(勿沿用左侧 label 的 36px 行高)
.el-form--label-top .el-form-item__label {
height: auto !important;
line-height: 1.4 !important;
font-size: 13px !important;
font-weight: 400 !important;
color: var(--mint-text) !important;
padding: 0 0 4px !important;
margin-bottom: 0 !important;
}
// 日期选择器
.el-date-range-picker {
--el-datepicker-inrange-bg-color: var(--art-gray-200) !important;
}
// el-card 背景色跟系统背景色保持一致
html.dark .el-card {
--el-card-bg-color: var(--default-box-color) !important;
}
// 修改 el-pagination 大小
.el-pagination--default {
& {
--el-pagination-button-width: 32px !important;
--el-pagination-button-height: var(--el-pagination-button-width) !important;
}
@media (max-width: 1180px) {
& {
--el-pagination-button-width: 28px !important;
}
}
.el-select--default .el-select__wrapper {
min-height: var(--el-pagination-button-width) !important;
}
.el-pagination__jump .el-input {
height: var(--el-pagination-button-width) !important;
}
}
.el-pager li {
padding: 0 10px !important;
// border: 1px solid red !important;
}
// 优化菜单折叠展开动画(提升动画流畅度)
.el-menu.el-menu--inline {
transition: max-height 0.26s cubic-bezier(0.4, 0, 0.2, 1) !important;
}
// 优化菜单 item hover 动画(提升鼠标跟手感)
.el-sub-menu__title,
.el-menu-item {
transition: background-color 0s !important;
}
// -------------------------------- 修改 el-size=default 组件默认高度 start --------------------------------
// 修改 el-button 高度
.el-button--default {
height: var(--el-component-custom-height) !important;
}
// circle 按钮宽度优化
.el-button--default.is-circle {
width: var(--el-component-custom-height) !important;
}
// 修改 el-select 高度
.el-select--default {
.el-select__wrapper {
min-height: var(--el-component-custom-height) !important;
}
}
// 修改 el-checkbox-button 高度
.el-checkbox-button--default .el-checkbox-button__inner,
// 修改 el-radio-button 高度
.el-radio-button--default .el-radio-button__inner {
padding: 10px 15px !important;
}
// -------------------------------- 修改 el-size=default 组件默认高度 end --------------------------------
.el-pagination.is-background .btn-next,
.el-pagination.is-background .btn-prev,
.el-pagination.is-background .el-pager li {
border-radius: 6px;
}
.el-popover {
min-width: 80px;
border-radius: var(--el-border-radius-small) !important;
}
.el-dialog {
padding: 0 !important;
border: 1px solid var(--mint-border) !important;
border-radius: var(--mint-radius) !important;
overflow: hidden;
box-shadow: 0 16px 48px rgba(0, 0, 0, 0.12) !important;
}
.el-dialog__header {
padding: 16px 22px 14px !important;
border-bottom: 1px solid var(--mint-border);
background: linear-gradient(135deg, var(--mint-primary-bg) 0%, var(--mint-surface) 60%);
.el-dialog__title {
font-size: 16px;
font-weight: 600;
color: var(--mint-text);
}
}
.el-dialog__body {
padding: 18px 22px !important;
position: relative; // 为了兼容 el-pagination 样式,需要设置 relative,不然会影响 el-pagination 的样式,比如 el-pagination__jump--small 会被影响,导致 el-pagination__jump--small 按钮无法点击,详见 URL_ADDRESS.com/element-plus/element-plus/issues/5684#issuecomment-1176299275;
}
.el-dialog__footer {
padding: 12px 22px !important;
border-top: 1px solid var(--mint-border);
background: var(--mint-table-head);
}
.el-dialog.el-dialog-border {
.el-dialog__body {
// 上边框
&::before,
// 下边框
&::after {
content: '';
position: absolute;
left: -16px;
width: calc(100% + 32px);
height: 1px;
background-color: var(--art-gray-300);
}
&::before {
top: 0;
}
&::after {
bottom: 0;
}
}
}
// el-message 样式优化
.el-message {
background-color: var(--default-box-color) !important;
border: 0 !important;
box-shadow:
0 6px 16px 0 rgba(0, 0, 0, 0.08),
0 3px 6px -4px rgba(0, 0, 0, 0.12),
0 9px 28px 8px rgba(0, 0, 0, 0.05) !important;
p {
font-size: 13px;
}
}
// 修改 el-dropdown 样式
.el-dropdown-menu {
padding: 6px !important;
border-radius: 10px !important;
border: none !important;
.el-dropdown-menu__item {
padding: 6px 16px !important;
border-radius: 6px !important;
&:hover:not(.is-disabled) {
color: var(--art-gray-900) !important;
background-color: var(--art-el-active-color) !important;
}
&:focus:not(.is-disabled) {
color: var(--art-gray-900) !important;
background-color: var(--art-gray-200) !important;
}
}
}
// 隐藏 select、dropdown 的三角
.el-select__popper,
.el-dropdown__popper {
margin-top: -6px !important;
.el-popper__arrow {
display: none;
}
}
.el-dropdown-selfdefine:focus {
outline: none !important;
}
// 处理移动端组件兼容性
@media screen and (max-width: 640px) {
.el-message-box,
.el-dialog {
width: calc(100% - 24px) !important;
}
.el-date-picker.has-sidebar.has-time {
width: calc(100% - 24px);
left: 12px !important;
}
.el-picker-panel *[slot='sidebar'],
.el-picker-panel__sidebar {
display: none;
}
.el-picker-panel *[slot='sidebar'] + .el-picker-panel__body,
.el-picker-panel__sidebar + .el-picker-panel__body {
margin-left: 0;
}
}
// 修改el-button样式
.el-button {
&.el-button--text {
background-color: transparent !important;
padding: 0 !important;
span {
margin-left: 0 !important;
}
}
}
// 修改el-tag样式
.el-tag {
font-weight: 500;
transition: all 0s !important;
&.el-tag--default {
height: 26px !important;
}
}
.el-checkbox-group {
&.el-table-filter__checkbox-group label.el-checkbox {
height: 17px !important;
.el-checkbox__label {
font-weight: 400 !important;
}
}
}
.el-radio--default {
// 优化单选按钮大小
.el-radio__input {
.el-radio__inner {
width: 16px;
height: 16px;
&::after {
width: 6px;
height: 6px;
}
}
}
}
.el-checkbox {
.el-checkbox__inner {
border-radius: 2px !important;
}
}
// 优化复选框样式
.el-checkbox--default {
.el-checkbox__inner {
width: 16px !important;
height: 16px !important;
border-radius: 4px !important;
&::before {
content: '';
height: 4px !important;
top: 5px !important;
background-color: #fff !important;
transform: scale(0.6) !important;
}
}
.is-checked {
.el-checkbox__inner {
&::after {
width: 3px;
height: 8px;
margin: auto;
border: 2px solid var(--el-checkbox-checked-icon-color);
border-left: 0;
border-top: 0;
transform: translate(-45%, -60%) rotate(45deg) scale(0.86) !important;
transform-origin: center;
}
}
}
}
.el-notification .el-notification__icon {
font-size: 22px !important;
}
// 修改 el-message-box 样式
.el-message-box__headerbtn .el-message-box__close,
.el-dialog__headerbtn .el-dialog__close {
top: 7px;
right: 7px;
width: 30px;
height: 30px;
border-radius: 5px;
transition: all 0.3s;
&:hover {
background-color: var(--art-hover-color) !important;
color: var(--art-gray-900) !important;
}
}
.el-message-box {
padding: 25px 20px !important;
}
.el-message-box__title {
font-weight: 500 !important;
}
.el-table__column-filter-trigger i {
color: var(--theme-color) !important;
margin: -3px 0 0 2px;
}
// 去除 el-dropdown 鼠标放上去出现的边框
.el-tooltip__trigger:focus-visible {
outline: unset;
}
// ipad 表单右侧按钮优化
@media screen and (max-width: 1180px) {
.el-table-fixed-column--right {
padding-right: 0 !important;
}
}
.login-out-dialog {
padding: 30px 20px !important;
border-radius: 10px !important;
}
// 修改 dialog 动画
.dialog-fade-enter-active {
.el-dialog:not(.is-draggable) {
animation: dialog-open 0.3s cubic-bezier(0.32, 0.14, 0.15, 0.86);
// 修复 el-dialog 动画后宽度不自适应问题
.el-select__selected-item {
display: inline-block;
}
}
}
.dialog-fade-leave-active {
animation: fade-out 0.2s linear;
.el-dialog:not(.is-draggable) {
animation: dialog-close 0.5s;
}
}
@keyframes dialog-open {
0% {
opacity: 0;
transform: scale(0.2);
}
100% {
opacity: 1;
transform: scale(1);
}
}
@keyframes dialog-close {
0% {
opacity: 1;
transform: scale(1);
}
100% {
opacity: 0;
transform: scale(0.2);
}
}
// 遮罩层动画
@keyframes fade-out {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
// 修改 el-select 样式
.el-select__popper:not(.el-tree-select__popper) {
.el-select-dropdown__list {
padding: 5px !important;
.el-select-dropdown__item {
height: 34px !important;
line-height: 34px !important;
border-radius: 6px !important;
&.is-selected {
color: var(--art-gray-900) !important;
font-weight: 400 !important;
background-color: var(--art-el-active-color) !important;
margin-bottom: 4px !important;
}
&:hover {
background-color: var(--art-hover-color) !important;
}
}
.el-select-dropdown__item:hover ~ .is-selected,
.el-select-dropdown__item.is-selected:has(~ .el-select-dropdown__item:hover) {
background-color: transparent !important;
}
}
}
// 修改 el-tree-select 样式
.el-tree-select__popper {
.el-select-dropdown__list {
padding: 5px !important;
.el-tree-node {
.el-tree-node__content {
height: 36px !important;
border-radius: 6px !important;
&:hover {
background-color: var(--art-gray-200) !important;
}
}
}
}
}
// 实现水波纹在文字下面效果
.el-button > span {
position: relative;
z-index: 10;
display: inline-flex;
align-items: center;
gap: 6px;
}
// 优化颜色选择器圆角
.el-color-picker__color {
border-radius: 2px !important;
}
// 优化日期时间选择器底部圆角
.el-picker-panel {
.el-picker-panel__footer {
border-radius: 0 0 var(--el-border-radius-base) var(--el-border-radius-base);
}
}
// 优化树型菜单样式
.el-tree-node__content {
border-radius: 4px;
margin-bottom: 4px;
padding: 1px 0;
&:hover {
background-color: var(--art-hover-color) !important;
}
}
.dark {
.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
background-color: var(--art-gray-300) !important;
}
}
// 隐藏折叠菜单弹窗 hover 出现的边框
.menu-left-popper:focus-within,
.horizontal-menu-popper:focus-within {
box-shadow: none !important;
outline: none !important;
}
// 数字输入组件右侧按钮高度跟随自定义组件高度
.el-input-number--default.is-controls-right {
.el-input-number__decrease,
.el-input-number__increase {
height: calc((var(--el-component-size) / 2)) !important;
}
}
// 檢索欄行內表單:el-select 在 flex 下易被壓扁,導致僅剩箭頭、選中項不可見
.search-bar .el-form--inline .el-select {
min-width: 140px;
}
// -------------------------------- el-table 全局样式 start --------------------------------
// 覆盖 Element Plus 默认的 thead 专用色,与表格正文同色(inherit 自 .el-table)
body .el-table thead {
color: inherit;
}
// 表格默认占满整个宽度
.el-table {
width: 100% !important;
// 修复固定列时表格宽度问题
.el-table__inner-wrapper {
width: 100% !important;
}
}
// 表格容器样式,确保表格正确占满宽度
.page-container {
.el-table {
width: 100% !important;
}
}
// 确保固定列正确显示
.el-table__fixed,
.el-table__fixed-right {
height: 100% !important;
}
// 操作列固定在右侧时的样式优化
.el-table {
.el-table__cell.is-right:last-child {
background-color: inherit;
}
}
// 全局:操作列兜底(按钮较多时避免被截断)
// 约定:列表操作列保持 fixed="right",并通过以下规则确保按钮完整展示
.page-container .el-table td.el-table__cell:has(.btn-op-item),
.console-container .el-table td.el-table__cell:has(.btn-op-item),
.el-dialog .el-table td.el-table__cell:has(.btn-op-item),
.page-container .el-table td.el-table-fixed-column--right:has(.btn-op-item),
.console-container .el-table td.el-table-fixed-column--right:has(.btn-op-item),
.el-dialog .el-table td.el-table-fixed-column--right:has(.btn-op-item) {
min-width: 260px !important;
}
.page-container .el-table th.el-table-fixed-column--right,
.console-container .el-table th.el-table-fixed-column--right,
.el-dialog .el-table th.el-table-fixed-column--right {
min-width: 260px !important;
}
.page-container .el-table td.el-table__cell:has(.btn-op-item) > .cell,
.console-container .el-table td.el-table__cell:has(.btn-op-item) > .cell,
.el-dialog .el-table td.el-table__cell:has(.btn-op-item) > .cell,
.page-container .el-table td.el-table-fixed-column--right:has(.btn-op-item) > .cell,
.console-container .el-table td.el-table-fixed-column--right:has(.btn-op-item) > .cell,
.el-dialog .el-table td.el-table-fixed-column--right:has(.btn-op-item) > .cell {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
width: auto;
min-width: max-content;
white-space: nowrap;
overflow: visible;
text-overflow: clip;
}
// 修复固定列与滚动列之间的边框
.el-table-fixed-column--right {
border-left: 1px solid var(--el-table-border-color) !important;
}
// 表格单元格内容不换行
.el-table .el-table__cell {
.cell {
white-space: nowrap;
}
}
// 全局:列表表格内容居中展示(表头 + 单元格)
// 列上设置 align / header-align 时,Element Plus 会加 is-left、is-right,须高于默认居中
.el-table {
th.el-table__cell,
td.el-table__cell {
text-align: center;
}
th.el-table__cell.is-left,
td.el-table__cell.is-left {
text-align: left;
}
th.el-table__cell.is-right,
td.el-table__cell.is-right {
text-align: right;
}
th.el-table__cell > .cell,
td.el-table__cell > .cell {
justify-content: center;
}
th.el-table__cell.is-left > .cell,
td.el-table__cell.is-left > .cell {
justify-content: flex-start;
}
th.el-table__cell.is-right > .cell,
td.el-table__cell.is-right > .cell {
justify-content: flex-end;
}
}
// -------------------------------- el-table 全局样式 end --------------------------------
// border 模式:仅保留表头列之间的分割线以支持拖拽调整列宽
// 覆盖 Element Plus el-table--border 的所有默认边框
.page-container .el-table--border,
.console-container .el-table--border,
.el-dialog .el-table--border {
// 数据行:移除纵向边框
td.el-table__cell {
border-right: none !important;
}
// 表头:仅列之间保留淡色分割线,去掉底部边框
th.el-table__cell {
border-right: 1px solid var(--mint-border) !important;
border-top: none !important;
}
th.el-table__cell:first-child {
border-left: none !important;
}
th.el-table__cell:last-child {
border-right: none !important;
}
// 移除表格外边框(左 ::before、右 ::after)
&::after,
&::before {
content: none !important;
}
// 移除表格顶部边框
.el-table__inner-wrapper::after {
content: none !important;
}
// 移除边框补丁元素
.el-table__border-left-patch,
.el-table__border-bottom-patch,
.el-table__border-right-patch {
display: none !important;
}
}
.page-container .el-table,
.console-container .el-table,
.el-dialog .el-table {
--el-table-header-bg-color: var(--mint-table-head);
--el-table-border-color: var(--mint-border);
--el-table-row-hover-bg-color: var(--mint-row-hover);
--el-table-text-color: var(--mint-text);
--el-table-header-text-color: var(--mint-text-muted);
font-size: 14px;
}
.page-container .el-table th.el-table__cell,
.console-container .el-table th.el-table__cell,
.el-dialog .el-table th.el-table__cell {
color: var(--mint-text-muted);
font-size: 12px;
font-weight: 600;
}
.page-container .el-table td.el-table__cell,
.console-container .el-table td.el-table__cell,
.el-dialog .el-table td.el-table__cell {
color: var(--mint-text);
font-size: 14px;
font-weight: 500;
}
// 无操作列主列表:保持与含 btn-op-item 操作列相同的行高;须保留溢出省略(勿用 inline-flex)
.page-container .list-table.list-table--no-action-col td.el-table__cell > .cell,
.console-container .list-table.list-table--no-action-col td.el-table__cell > .cell,
.el-dialog .list-table.list-table--no-action-col td.el-table__cell > .cell {
min-height: 28px;
line-height: 28px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
// Fresh Mint:状态标签(映射 design spec 的浅底 + 语义色字)
.page-container .el-tag,
.console-container .el-tag,
.el-dialog .el-tag {
border: none;
border-radius: 6px;
padding: 2px 8px;
font-size: 12px;
font-weight: 600;
}
.page-container .el-tag--success,
.console-container .el-tag--success,
.el-dialog .el-tag--success {
background: #d1fae5 !important;
color: #047857 !important;
}
.page-container .el-tag--warning,
.console-container .el-tag--warning,
.el-dialog .el-tag--warning {
background: #fffbeb !important;
color: #d97706 !important;
}
.page-container .el-tag--danger,
.console-container .el-tag--danger,
.el-dialog .el-tag--danger {
background: #fef2f2 !important;
color: #dc2626 !important;
}
/* 中性 info:与 mobile 市场部方案 D 对齐(大麦黄浅底,区别于实心 warning) */
.page-container .el-tag--info,
.console-container .el-tag--info,
.el-dialog .el-tag--info {
background: #fff7e8 !important;
color: #9a7020 !important;
border-color: #f0e0b8 !important;
}
.page-container .el-tag--primary,
.console-container .el-tag--primary,
.el-dialog .el-tag--primary {
background: #e8f4ee !important;
color: #065f46 !important;
}
.page-container .el-button--primary,
.console-container .el-button--primary {
--el-button-bg-color: var(--mint-primary);
--el-button-border-color: var(--mint-primary);
--el-button-hover-bg-color: var(--mint-primary-dark);
--el-button-hover-border-color: var(--mint-primary-dark);
--el-button-active-bg-color: var(--mint-primary-dark);
--el-button-active-border-color: var(--mint-primary-dark);
}
.page-container .el-pagination,
.console-container .el-pagination {
--el-pagination-button-bg-color: var(--mint-surface);
--el-pagination-hover-color: var(--mint-primary-dark);
}
.page-container .el-input__wrapper,
.page-container .el-select__wrapper,
.page-container .el-textarea__inner,
.console-container .el-input__wrapper,
.console-container .el-select__wrapper,
.console-container .el-textarea__inner {
border-radius: 8px !important;
box-shadow: 0 0 0 1px var(--mint-border) inset !important;
}
// Fresh Mint:控件“值/已选项”正文颜色兜底(避免被 regular/secondary 误用导致偏灰)
// 只覆盖 value/selected 文案,不影响 placeholder(placeholder 在下方单独定义)
.page-container .el-input__inner,
.page-container .el-textarea__inner,
.page-container .el-select__selected-item,
.page-container .el-cascader__search-input,
.page-container .el-date-editor .el-input__inner,
.page-container .el-range-editor .el-range-input,
.page-container .el-input-number .el-input__inner,
.console-container .el-input__inner,
.console-container .el-textarea__inner,
.console-container .el-select__selected-item,
.console-container .el-cascader__search-input,
.console-container .el-date-editor .el-input__inner,
.console-container .el-range-editor .el-range-input,
.console-container .el-input-number .el-input__inner {
color: var(--mint-text) !important;
-webkit-text-fill-color: var(--mint-text) !important; // Safari / WebKit autofill 等场景
}
// Fresh Mint:placeholder 统一(设计图:更轻的 slate,字号略小)
.page-container .el-input__inner::placeholder,
.page-container .el-textarea__inner::placeholder,
.console-container .el-input__inner::placeholder,
.console-container .el-textarea__inner::placeholder {
color: #9ca3af !important;
-webkit-text-fill-color: #9ca3af !important;
font-size: 13px;
opacity: 1;
}
/* 全局兜底(避免 Teleport 到 body 的弹窗不命中 page-container 作用域) */
.el-input__inner::placeholder,
.el-textarea__inner::placeholder {
color: #9ca3af !important;
-webkit-text-fill-color: #9ca3af !important;
font-size: 13px;
opacity: 1;
}
/* 下拉框已选值回显:必须保持正文深色 */
.el-select__selected-item {
color: var(--mint-text) !important;
-webkit-text-fill-color: var(--mint-text) !important;
}
/* cascader / tree-select 已选回显同样保持正文深色 */
.el-cascader .el-input__inner,
.el-cascader .el-cascader__search-input,
.el-tree-select .el-select__selected-item {
color: var(--mint-text) !important;
-webkit-text-fill-color: var(--mint-text) !important;
}
/* select/cascader/tree-select 的 placeholder 走变量,不直接覆盖节点类,避免误伤已选值 */
.el-select__wrapper,
.el-cascader .el-input__wrapper,
.el-tree-select .el-select__wrapper,
.el-cascader__suggestion-panel,
.el-tree-select__popper {
--el-text-color-placeholder: #9ca3af !important;
--el-select-multiple-input-color: #9ca3af !important;
}
/* 已选中值(placeholder 无 is-transparent):保持正文深色 */
.page-container .el-select__placeholder:not(.is-transparent),
.console-container .el-select__placeholder:not(.is-transparent),
.el-select__placeholder:not(.is-transparent) {
color: var(--mint-text) !important;
-webkit-text-fill-color: var(--mint-text) !important;
}
/* 已选值:必须保持正文深色,确保在 page-container / console-container 作用域下也正确 */
.page-container .el-select .el-select__selected-item,
.console-container .el-select .el-select__selected-item,
.el-select .el-select__selected-item {
color: var(--mint-text) !important;
-webkit-text-fill-color: var(--mint-text) !important;
}
/* 未选中时 placeholder(is-transparent)应为灰色,区别于已选值 */
.page-container .el-select__placeholder.is-transparent,
.console-container .el-select__placeholder.is-transparent,
.el-select__placeholder.is-transparent {
color: #9ca3af !important;
-webkit-text-fill-color: #9ca3af !important;
}
// 兜底:页面内原生 input/textarea placeholder(避免自绘控件不走 Element)
.page-container input::placeholder,
.page-container textarea::placeholder,
.console-container input::placeholder,
.console-container textarea::placeholder {
color: #9ca3af;
font-size: 13px;
opacity: 1;
}
.page-container .el-input__wrapper:hover,
.page-container .el-select__wrapper:hover,
.console-container .el-input__wrapper:hover,
.console-container .el-select__wrapper:hover {
box-shadow: 0 0 0 1px #b5d4c6 inset !important;
}
.page-container .el-input__wrapper.is-focus,
.page-container .el-select__wrapper.is-focused,
.console-container .el-input__wrapper.is-focus,
.console-container .el-select__wrapper.is-focused {
box-shadow:
0 0 0 1px var(--mint-primary) inset,
0 0 0 2px rgba(4, 120, 87, 0.2) !important;
}
.page-container .btn-main.el-button,
.console-container .btn-main.el-button {
height: 36px;
padding: 0 14px;
border-radius: 8px;
font-weight: 600;
--el-button-bg-color: var(--mint-primary);
--el-button-border-color: var(--mint-primary);
--el-button-hover-bg-color: var(--mint-primary-dark);
--el-button-hover-border-color: var(--mint-primary-dark);
}
.el-dialog .btn-main.el-button {
height: 36px;
padding: 0 14px;
border-radius: 8px;
font-weight: 600;
--el-button-bg-color: var(--mint-primary);
--el-button-border-color: var(--mint-primary);
--el-button-hover-bg-color: var(--mint-primary-dark);
--el-button-hover-border-color: var(--mint-primary-dark);
}
/* 弹窗内主按钮强兜底:确保“保存/确定”是主色实心(避免被默认按钮样式稀释) */
.el-dialog .btn-main.el-button:not(.el-button--text):not(.el-button--link) {
color: #fff !important;
background: var(--mint-primary) !important;
border-color: var(--mint-primary) !important;
}
.el-dialog .btn-main.el-button:not(.el-button--text):not(.el-button--link):hover {
background: var(--mint-primary-dark) !important;
border-color: var(--mint-primary-dark) !important;
}
.el-dialog .btn-main.el-button:not(.el-button--text):not(.el-button--link):active {
background: var(--mint-primary-dark) !important;
border-color: var(--mint-primary-dark) !important;
}
.page-container .btn-ghost.el-button,
.console-container .btn-ghost.el-button {
height: 36px;
padding: 0 14px;
border-radius: 8px;
font-weight: 600;
color: var(--mint-text);
border-color: var(--mint-border);
background: var(--mint-surface);
}
.el-dialog .btn-ghost.el-button {
height: 36px;
padding: 0 14px;
border-radius: 8px;
font-weight: 600;
color: var(--mint-text);
border-color: var(--mint-border);
background: var(--mint-surface);
}
.page-container .btn-op-item.el-button,
.console-container .btn-op-item.el-button,
.el-dialog .btn-op-item.el-button {
height: 28px;
padding: 0 8px;
border-radius: 6px;
font-size: 12px;
font-weight: 600;
border-color: var(--mint-border);
}
.page-container .el-button:not(.is-circle):not(.el-button--text),
.console-container .el-button:not(.is-circle):not(.el-button--text),
.el-dialog .el-button:not(.is-circle):not(.el-button--text) {
height: 36px;
border-radius: 8px;
font-weight: 600;
}
.page-container .btn-op-item.el-button > span,
.console-container .btn-op-item.el-button > span,
.el-dialog .btn-op-item.el-button > span {
gap: 4px;
}
.page-container .el-button .el-icon,
.console-container .el-button .el-icon {
margin-right: 0;
}
.page-container
.el-button[class*='auto-icon-']:not(.is-circle):not(.el-button--text):not(.no-auto-icon):not(
:has(.el-icon)
)
> span::before,
.console-container
.el-button[class*='auto-icon-']:not(.is-circle):not(.el-button--text):not(.no-auto-icon):not(
:has(.el-icon)
)
> span::before {
content: '';
width: 14px;
height: 14px;
background-color: currentColor;
opacity: 0.72;
flex-shrink: 0;
mask: var(--auto-icon-mask) center / contain no-repeat;
-webkit-mask: var(--auto-icon-mask) center / contain no-repeat;
}
.page-container .btn-op-item.primary.el-button,
.console-container .btn-op-item.primary.el-button,
.el-dialog .btn-op-item.primary.el-button {
color: #fff;
border-color: var(--mint-primary);
background: var(--mint-primary);
}
.page-container .list-toolbar-row > .el-button:not(.el-button--text):not(.el-button--link),
.console-container .list-toolbar-row > .el-button:not(.el-button--text):not(.el-button--link),
.el-dialog .list-toolbar-row > .el-button:not(.el-button--text):not(.el-button--link),
.page-container .toolbar-right > .el-button:not(.el-button--text):not(.el-button--link),
.console-container .toolbar-right > .el-button:not(.el-button--text):not(.el-button--link),
.el-dialog .toolbar-right > .el-button:not(.el-button--text):not(.el-button--link) {
color: var(--mint-text);
border-color: var(--mint-border);
background: var(--mint-surface);
}
.page-container
.list-toolbar-row
> .el-button:not(.el-button--text):not(.el-button--link):first-of-type,
.console-container
.list-toolbar-row
> .el-button:not(.el-button--text):not(.el-button--link):first-of-type,
.el-dialog
.list-toolbar-row
> .el-button:not(.el-button--text):not(.el-button--link):first-of-type,
.page-container
.toolbar-right
> .el-button:not(.el-button--text):not(.el-button--link):first-of-type,
.console-container
.toolbar-right
> .el-button:not(.el-button--text):not(.el-button--link):first-of-type,
.el-dialog
.toolbar-right
> .el-button:not(.el-button--text):not(.el-button--link):first-of-type {
color: #fff;
border-color: var(--mint-primary);
background: var(--mint-primary);
}
.page-container .el-table__cell .btn-op-item.el-button,
.console-container .el-table__cell .btn-op-item.el-button,
.el-dialog .el-table__cell .btn-op-item.el-button {
color: var(--mint-text);
border-color: var(--mint-border);
background: var(--mint-surface);
}
/* 列表操作列第一个按钮:白底 + 主色字(与各页「查看」等首操作一致;排除 link/text 与警示类) */
.page-container
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(.op-warn),
.console-container
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(.op-warn),
.el-dialog
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(.op-warn) {
background: #fff !important;
border: 1px solid var(--mint-border) !important;
color: var(--mint-primary-dark) !important;
box-shadow: none !important;
}
.page-container
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(.op-warn)
.el-icon,
.console-container
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(.op-warn)
.el-icon,
.el-dialog
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(.op-warn)
.el-icon {
color: var(--mint-primary-dark) !important;
}
.page-container
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(
.op-warn
):hover,
.page-container
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(
.op-warn
):focus-visible,
.console-container
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(
.op-warn
):hover,
.console-container
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(
.op-warn
):focus-visible,
.el-dialog
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(
.op-warn
):hover,
.el-dialog
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(
.op-warn
):focus-visible {
background: var(--mint-primary-bg) !important;
border-color: var(--mint-primary) !important;
color: #047857 !important;
}
.page-container
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(
.op-warn
):hover
.el-icon,
.page-container
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(
.op-warn
):focus-visible
.el-icon,
.console-container
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(
.op-warn
):hover
.el-icon,
.console-container
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(
.op-warn
):focus-visible
.el-icon,
.el-dialog
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(
.op-warn
):hover
.el-icon,
.el-dialog
.el-table__cell
.btn-op-item.el-button:first-of-type:not(.el-button--link):not(.el-button--text):not(
.op-warn
):focus-visible
.el-icon {
color: #047857 !important;
}
// 列表分割线统一:每个分区只保留一条线
// 工具栏与列表之间:保留 .list-body 顶部线,去掉 .list-toolbar 底部线
.page-container .list-toolbar,
.console-container .list-toolbar,
.el-dialog .list-toolbar {
border-bottom: none !important;
}
// 列表与分页之间:保留列表底部线,去掉分页顶部线
.page-container .pagination.list-pager-bar,
.console-container .pagination.list-pager-bar,
.el-dialog .pagination.list-pager-bar {
border-top: none !important;
}
.page-container .el-button.auto-icon-plus,
.console-container .el-button.auto-icon-plus {
--auto-icon-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M12 5v14M5 12h14'/%3E%3C/svg%3E");
}
.page-container .el-button.auto-icon-delete,
.console-container .el-button.auto-icon-delete {
--auto-icon-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 6h18'/%3E%3Cpath d='M8 6V4h8v2'/%3E%3Cpath d='M19 6l-1 14H6L5 6'/%3E%3C/svg%3E");
}
.page-container .el-button.auto-icon-upload,
.console-container .el-button.auto-icon-upload {
--auto-icon-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E%3Cpath d='M12 16V4'/%3E%3Cpath d='M8 8l4-4 4 4'/%3E%3C/svg%3E");
}
.page-container .el-button.auto-icon-download,
.console-container .el-button.auto-icon-download {
--auto-icon-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E%3Cpath d='M12 4v12'/%3E%3Cpath d='M8 12l4 4 4-4'/%3E%3C/svg%3E");
}
.page-container .el-button.auto-icon-search,
.console-container .el-button.auto-icon-search {
--auto-icon-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-4-4'/%3E%3C/svg%3E");
}
.page-container .el-button.auto-icon-refresh,
.console-container .el-button.auto-icon-refresh {
--auto-icon-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 12a9 9 0 1 1-2.64-6.36'/%3E%3Cpath d='M21 3v6h-6'/%3E%3C/svg%3E");
}
.page-container .el-button.auto-icon-edit,
.console-container .el-button.auto-icon-edit {
--auto-icon-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20h9'/%3E%3Cpath d='M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z'/%3E%3C/svg%3E");
}
.page-container .el-button.auto-icon-view,
.console-container .el-button.auto-icon-view {
--auto-icon-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 12s4-7 10-7 10 7 10 7-4 7-10 7-10-7-10-7z'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/svg%3E");
}
.page-container .el-button.auto-icon-check,
.console-container .el-button.auto-icon-check {
--auto-icon-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
}
.page-container .el-dialog__footer .el-button,
.console-container .el-dialog__footer .el-button {
height: 36px;
padding: 0 14px;
border-radius: 8px;
font-weight: 600;
}
.page-container
.el-dialog__footer
.el-button:not(.el-button--primary):not(.el-button--danger):not(.el-button--success),
.console-container
.el-dialog__footer
.el-button:not(.el-button--primary):not(.el-button--danger):not(.el-button--success) {
color: var(--mint-text);
background: var(--mint-surface);
border-color: var(--mint-border);
}
.page-container .el-dialog__footer .el-button .el-icon,
.console-container .el-dialog__footer .el-button .el-icon {
margin-right: 6px;
}