Files
shanxia2.0/web-admin/src/assets/styles/core/el-ui.scss
T
2026-08-04 14:02:01 +08:00

1444 lines
42 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: #4db872 !important;
--el-color-primary-light-5: #73c892 !important;
--el-color-primary-light-7: #a8e0b8 !important;
--el-color-primary-light-8: #c8ecd4 !important;
--el-color-primary-light-9: var(--mint-primary-bg) !important;
--el-color-primary-dark-2: var(--mint-primary-dark) !important;
// 语义色:供 el-tag effect=dark 使用实心底(避免 Element 默认 info #909399)
--el-color-success: #059669 !important;
--el-color-warning: #d97706 !important;
--el-color-danger: #dc2626 !important;
--el-color-info: #1e293b !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: var(--mint-text-placeholder) !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 深色标签
.el-form--label-top .el-form-item__label {
font-size: 13px !important;
font-weight: 500 !important;
color: var(--mint-text) !important;
padding: 0 0 4px !important;
}
// 弹窗/抽屉内表单 label(含 label-right):统一 13px,避免 EP 默认 14px
:is(.el-dialog, .el-drawer) .el-form-item__label {
font-size: 13px !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;
display: flex;
flex-direction: column;
max-height: var(--dialog-max-height, calc(100vh - 40px));
margin: 0;
}
.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%);
flex-shrink: 0;
.el-dialog__title {
font-size: 16px;
font-weight: 600;
color: var(--mint-text);
}
}
.el-dialog__headerbtn {
top: 4px;
right: 4px;
}
.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;
flex: 1;
min-height: 0;
overflow-y: auto;
}
.el-dialog__footer {
padding: 12px 22px !important;
border-top: 1px solid var(--mint-border);
background: var(--mint-table-head);
flex-shrink: 0;
}
.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;
}
}
}
// 语义 Tag:深色底 + 白字(配合全局 ElTag 默认 effect=dark;覆盖 light 残留)
html body .el-tag {
border: none !important;
border-radius: 6px;
padding: 2px 8px;
font-size: 12px;
font-weight: 600;
transition: all 0s !important;
--el-tag-text-color: #ffffff;
color: #ffffff !important;
&.el-tag--default {
height: 26px !important;
}
.el-tag__close {
color: rgba(255, 255, 255, 0.85) !important;
&:hover {
background-color: rgba(255, 255, 255, 0.2) !important;
color: #ffffff !important;
}
}
&,
&.el-tag--primary,
&.el-tag--success {
--el-tag-bg-color: #059669;
--el-tag-border-color: #059669;
--el-tag-hover-color: #047857;
background: #059669 !important;
background-color: #059669 !important;
border-color: #059669 !important;
}
&.el-tag--warning {
--el-tag-bg-color: #d97706;
--el-tag-border-color: #d97706;
--el-tag-hover-color: #b45309;
background: #d97706 !important;
background-color: #d97706 !important;
border-color: #d97706 !important;
}
&.el-tag--danger {
--el-tag-bg-color: #dc2626;
--el-tag-border-color: #dc2626;
--el-tag-hover-color: #b91c1c;
background: #dc2626 !important;
background-color: #dc2626 !important;
border-color: #dc2626 !important;
}
// 中性 info:无背景,正文标准色(与彩色语义 Tag 区分)
// 多选 el-select 默认 tagType=info:关闭图标须用深色,否则白字关标在透明底上不可见
&.el-tag--info {
--el-tag-bg-color: transparent;
--el-tag-border-color: transparent;
--el-tag-text-color: var(--mint-text);
--el-tag-hover-color: var(--mint-text);
background: transparent !important;
background-color: transparent !important;
border-color: transparent !important;
color: var(--mint-text) !important;
.el-tag__close {
color: var(--mint-text-muted) !important;
&:hover {
background-color: rgba(30, 41, 59, 0.1) !important;
color: var(--mint-text) !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: 0;
right: 0;
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;
max-width: 100%;
// 占满容器,但不禁止内部 table 按列宽超出(横向滚动由 body-wrapper/scrollbar 承担)
.el-table__inner-wrapper {
width: 100%;
min-width: 100%;
max-width: 100%;
}
}
// 表格容器样式,确保表格正确占满宽度
.page-container {
.el-table {
width: 100% !important;
max-width: 100%;
}
}
// 确保固定列正确显示
.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),
.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) {
min-width: 260px !important;
}
.page-container .el-table th.el-table-fixed-column--right,
.console-container .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,
.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 {
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;
}
// 表格单元格内容不换行;溢出直接截断,不显示省略号「…」(show-overflow-tooltip 悬停仍可看全文)
.el-table .el-table__cell {
text-overflow: clip;
.cell {
white-space: nowrap;
text-overflow: clip;
}
.cell.el-tooltip {
text-overflow: clip;
}
}
// 名称列(客户/产品/合同等):Excel 式自动换行 + 左对齐,覆盖全局 nowrap/居中
// 用法:el-table-column 增加 class-name="col-name-wrap" label-class-name="col-name-wrap",
// 并设 align="left" header-align="left",去掉 show-overflow-tooltip
.el-table {
th.el-table__cell.col-name-wrap,
td.el-table__cell.col-name-wrap {
vertical-align: middle;
height: auto;
text-align: left !important;
> .cell {
white-space: normal !important;
word-break: break-word;
overflow-wrap: anywhere;
line-height: 1.45;
text-overflow: unset;
overflow: visible;
height: auto;
text-align: left !important;
justify-content: flex-start !important;
}
}
td.el-table__cell.col-name-wrap {
.el-link,
.el-link > span {
white-space: normal;
word-break: break-word;
overflow-wrap: anywhere;
display: inline;
vertical-align: baseline;
height: auto;
line-height: 1.45;
text-align: left;
}
}
}
// 全局:列表表格内容居中展示(表头 + 单元格)
// 列上设置 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-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 .list-table.el-table:has(.el-table-column--selection) tbody tr.el-table__row,
.console-container .list-table.el-table:has(.el-table-column--selection) tbody tr.el-table__row {
cursor: pointer;
}
// 主列表:无顶/底外框;左右外缘 + 列间竖线 + 行间横线
// 含 el-table--border(ListTable 为列宽拖拽开启):覆盖上方「border 模式去竖线」规则,保持 list-table 网格
.page-container .list-table.el-table,
.console-container .list-table.el-table,
.el-dialog .list-table.el-table,
.system-view-dialog .list-table.el-table {
border: none !important;
&::before,
&::after {
display: none !important;
}
.el-table__inner-wrapper::before,
.el-table__inner-wrapper::after {
display: none !important;
}
.el-table__border-left-patch,
.el-table__border-right-patch,
.el-table__border-bottom-patch {
display: none !important;
}
th.el-table__cell,
td.el-table__cell {
border-right: 1px solid var(--mint-border) !important;
border-bottom: 1px solid var(--mint-border) !important;
border-left: none !important;
border-top: none !important;
}
th.el-table__cell:first-child,
td.el-table__cell:first-child {
border-left: 1px solid var(--mint-border) !important;
}
.el-table__fixed-right {
th.el-table__cell:last-child,
td.el-table__cell:last-child {
border-right: 1px solid var(--mint-border) !important;
}
}
// 列宽拖拽代理线(Element Plus border 模式)
.el-table__column-resize-proxy {
border-left: 1px dashed var(--mint-primary, #10b981) !important;
}
}
.page-container .el-table th.el-table__cell,
.console-container .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 {
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,
.system-view-dialog .list-table.list-table--no-action-col td.el-table__cell > .cell {
min-height: 28px;
line-height: 28px;
overflow: hidden;
text-overflow: clip;
white-space: nowrap;
}
.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,
.page-container .el-range-input::placeholder,
.console-container .el-input__inner::placeholder,
.console-container .el-textarea__inner::placeholder,
.console-container .el-range-input::placeholder {
color: var(--mint-text-placeholder) !important;
-webkit-text-fill-color: var(--mint-text-placeholder) !important;
font-size: 13px;
opacity: 1;
}
/* 全局兜底(避免 Teleport 到 body 的弹窗不命中 page-container 作用域) */
.el-input__inner::placeholder,
.el-textarea__inner::placeholder,
.el-range-input::placeholder,
input::placeholder,
textarea::placeholder {
color: var(--mint-text-placeholder) !important;
-webkit-text-fill-color: var(--mint-text-placeholder) !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: var(--mint-text-placeholder) !important;
--el-select-multiple-input-color: var(--mint-text) !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: var(--mint-text-placeholder) !important;
-webkit-text-fill-color: var(--mint-text-placeholder) !important;
}
.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 #b8dccc 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(28, 168, 81, 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 {
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) {
height: 36px;
border-radius: 8px;
font-weight: 600;
}
.page-container .btn-op-item.el-button > span,
.console-container .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(:has(.el-icon))
> span::before,
.console-container
.el-button[class*='auto-icon-']:not(.is-circle):not(.el-button--text):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 {
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),
.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) {
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,
.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 {
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 {
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: #147a3c !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: #147a3c !important;
}
// 列表分割线统一:工具栏与列表之间保留 list-body 顶部分隔线
.page-container .list-toolbar,
.console-container .list-toolbar,
.el-dialog .list-toolbar {
border-bottom: none !important;
background: var(--mint-table-head) !important;
}
.page-container .list-toolbar-row,
.console-container .list-toolbar-row,
.el-dialog .list-toolbar-row {
background: var(--mint-table-head);
}
.page-container .list-body,
.console-container .list-body,
.el-dialog .list-body {
border-top: 1px solid var(--mint-border);
}
// 列表与分页之间:保留列表底部线,去掉分页顶部线;分页控件右对齐(§7.9)
.page-container .pagination.list-pager-bar,
.console-container .pagination.list-pager-bar,
.el-dialog .pagination.list-pager-bar {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: flex-end;
gap: 8px 12px;
border-top: none !important;
}
.page-container .pagination.list-pager-bar .list-range,
.page-container .pagination.list-pager-bar .total-count,
.console-container .pagination.list-pager-bar .list-range,
.console-container .pagination.list-pager-bar .total-count,
.el-dialog .pagination.list-pager-bar .list-range,
.el-dialog .pagination.list-pager-bar .total-count {
margin-right: auto;
}
.page-container .pagination.list-pager-bar:not(:has(.list-range)):not(:has(.total-count)) .list-pager-selected,
.console-container .pagination.list-pager-bar:not(:has(.list-range)):not(:has(.total-count)) .list-pager-selected,
.el-dialog .pagination.list-pager-bar:not(:has(.list-range)):not(:has(.total-count)) .list-pager-selected {
margin-right: auto;
}
.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;
}