CRMEB/frontend/admin/src/theme/element.scss

604 lines
17 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.

/* 防止页面切换时,滚动条高度不变的问题(滚动条高度非滚动条滚动高度)
------------------------------- */
.el-scrollbar {
overflow: hidden;
position: relative;
height: 100%;
}
.el-scrollbar__wrap {
overflow: auto !important;
overflow-x: hidden !important;
max-height: 100%;
/*防止页面切换时,滚动条高度不变的问题(滚动条高度非滚动条滚动高度)*/
}
.el-select-dropdown .el-scrollbar__wrap {
overflow-x: scroll !important;
}
.el-select-dropdown__wrap {
max-height: 274px !important;
/*修复Select 选择器高度问题*/
}
.el-select__wrapper {
font-size: 12px !important;
}
.el-autocomplete-suggestion__wrap {
max-height: 280px !important;
}
/* Button 按钮
------------------------------- */
.el-button {
font-weight: 400 !important;
font-size: 12px !important;
padding: 9px 15px !important;
border-radius: 4px;
}
.el-button.is-loading {
}
.el-button + .el-button {
margin-left: 14px !important;
}
// 第三方字体图标大小
.el-button i.iconfont,
.el-button i.fa {
font-size: 14px !important;
margin-right: 5px;
}
.el-button i.iconfont,
.el-button i.fa {
font-size: 14px !important;
margin-right: 5px;
}
.el-button--small i.iconfont,
.el-button--small i.fa {
font-size: 12px !important;
margin-right: 5px;
}
.el-button--small i.iconfont,
.el-button--small i.fa {
font-size: 12px !important;
margin-right: 5px;
}
/* Dialog 对话框
------------------------------- */
.el-dialog__body {
overflow-y: auto;
overflow-x: hidden;
max-height: 720px;
padding: 15px 15px 15px 15px !important;
}
.el-dialog {
/* EP2.9 起根元素自带 16px 内边距,会与 header/body 的 15px 叠成双重边距 */
padding: 0 !important;
box-shadow: unset !important;
border-radius: 6px !important;
// left: 50%;
// top: 50%;
// transform: translate(-50%);
}
.el-dialog__header {
border-bottom: 1px solid var(--prev-border-color-lighter);
padding: 15px !important;
display: flex;
align-items: center;
justify-content: space-between;
}
.el-dialog__title {
font-size: 14px !important;
font-weight: 500;
color: var(--prev-color-text-regular);
line-height: 14px !important;
}
.el-dialog__headerbtn {
position: initial !important;
/* EP 默认 48px,流内布局时会撑高标题栏 */
height: auto !important;
width: auto !important;
display: flex;
align-items: center;
}
.el-dialog__footer {
/* 根内边距归零后,底部留白由 footer 自身补足 */
padding: 10px 15px 15px !important;
}
.el-dialog__body > img {
// max-width: 600px;
max-height: 600px;
}
/* Alert 警告
------------------------------- */
.el-alert--warning.is-light {
// border: 1px solid rgba(230, 162, 60, 0.3) !important;
}
.el-alert--success.is-light {
// border: 1px solid rgba(103, 194, 58, 0.3) !important;
}
// .el-alert--info.is-light {
// color: #f7ba1e;
// background-color: #fef8e8;
// // border: 1px solid rgba(144, 147, 153, 0.3) !important;
// }
.el-alert--error.is-light {
// border: 1px solid rgba(245, 108, 108, 0.3) !important;
}
/* Table 表格
------------------------------- */
.el-table-column--selection {
.el-checkbox {
margin-right: unset !important;
}
}
.el-table::before,
.el-table--group::after,
.el-table--border::after {
z-index: 1 !important;
}
/* 下拉选择器/时间选择器滚动条
------------------------------- */
.el-table__body tr.current-row > td.el-table__cell,
.vxe-table--render-default .vxe-body--row.row--current {
background-color: var(--prev-bg-color) !important;
}
.hover-row .el-select-dropdown .el-scrollbar__wrap,
.el-picker-panel .el-scrollbar__wrap {
overflow-x: scroll !important;
}
.el-table--enable-row-transition .el-table__body td {
// display: flex;
// align-items: center;
height: 50px;
}
.vxe-table--body-wrapper .vxe-cell {
min-height: 24px;
}
/* Tabs 标签页
------------------------------- */
.el-tabs {
/* 页面页签高度 54px(2026-09-23 用户以「实物订单」页效果重新裁定,文档 4.4 同步) */
--el-tabs-header-height: 54px;
}
.el-tabs__item {
font-size: 14px;
}
.el-tabs__item.is-active {
font-weight: 500;
}
.el-tabs__active-bar {
height: 3px;
}
/* 弹窗/抽屉内页签维持紧凑规格 */
.el-dialog .el-tabs,
.el-drawer .el-tabs {
--el-tabs-header-height: 40px;
}
.el-dialog .el-tabs__item,
.el-drawer .el-tabs__item {
font-size: 13px;
}
/* NavMenu 导航菜单
------------------------------- */
// 默认样式修改
.el-menu {
border-right: none !important;
}
.el-menu-item,
.el-sub-menu__title {
height: 50px !important;
line-height: 50px !important;
color: var(--prev-bg-menuBarColor) !important;
transition: none !important;
}
// horizontal 水平方向时
.el-menu--horizontal > .el-menu-item.is-active,
.el-menu--horizontal > .el-sub-menu.is-active .el-sub-menu__title {
border-bottom: 3px solid !important;
border-bottom-color: var(--prev-color-primary) !important;
// color: var(--prev-color-primary) !important;
}
// 横向顶栏一级叶子菜单选中时:文字保持顶栏文字色,选中态由主题色下划线标识。
// EP 默认激活色(--el-menu-active-color = 主题色)优先级更高,会把选中文字染成主题色,
// 在深色顶栏或浅色选中底上与背景同色系导致看不清
.el-menu--horizontal > .el-menu-item.is-active {
color: var(--prev-bg-topBarColor) !important;
}
.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,
.el-menu--horizontal .el-menu-item:not(.is-disabled):hover,
.el-menu--horizontal > .el-sub-menu:focus .el-sub-menu__title,
.el-menu--horizontal > .el-sub-menu:hover .el-sub-menu__title,
.el-menu--horizontal .el-menu .el-menu-item.is-active,
.el-menu--horizontal .el-menu .el-sub-menu.is-active > .el-sub-menu__title {
color: var(--prev-MenuActiveColor) !important;
}
.el-menu.el-menu--horizontal {
border-bottom: none !important;
}
.el-menu--horizontal > .el-menu-item,
.el-menu--horizontal > .el-sub-menu .el-sub-menu__title {
padding: 0 14px;
color: var(--prev-bg-topBarColor) !important;
}
// 横向顶栏一级子菜单标题:重新给展开箭头预留右侧空间。
// 上方的 padding: 0 14px 覆盖了 EP 为箭头预留的 padding-right,
// 而箭头是绝对定位(right: --el-menu-base-level-padding),会压在菜单名称上
.el-menu--horizontal > .el-sub-menu .el-sub-menu__title {
padding-right: 32px;
}
.el-menu--horizontal > .el-sub-menu .el-sub-menu__title .el-sub-menu__icon-arrow {
right: 14px;
}
// 外部链接时
.el-menu-item a,
.el-menu-item a:hover,
.el-menu-item i,
.el-sub-menu__title i {
color: var(--prev-bg-menuBarColor) !important;
text-decoration: none;
margin-right: 8px;
margin-left: 5px;
}
.el-menu-item a {
width: 86%;
display: inline-block;
}
// 默认 hover 时:中性半透明底色、文字颜色不变,避免与选中态主题色混淆
.el-menu-item:hover,
.el-sub-menu__title:hover {
background-color: color-mix(in srgb, var(--prev-bg-menuBarColor) 10%, transparent) !important;
}
// 鼠标 hover 时颜色
.el-menu-hover-bg-color {
background-color: var(--prev-bg-menu-hover-ba-color) !important;
}
// 高亮(选中)时:仅叶子菜单项保留主题色背景,父级菜单不做任何选中标识
.el-menu-item.is-active {
color: var(--prev-MenuActiveColor) !important;
@extend .el-menu-hover-bg-color;
// background-color: var(--prev-bg-menu-hover-ba-color) !important;
.el-sub-menu__title i {
color: var(--prev-MenuActiveColor) !important;
}
}
.el-active-extend {
color: #ffffff !important;
// background-color: var(--prev-color-primary) !important;
// background-color: var(--prev-bg-menu-hover-ba-color) !important;
i {
color: #ffffff !important;
}
}
.columns-round {
.el-menu-item {
margin: 5px 5px 0px 5px;
border-radius: 5px;
}
.el-sub-menu {
border-radius: 5px;
.el-sub-menu__title {
margin: 5px 5px;
}
.el-sub-menu__title:hover {
border-radius: 5px;
}
}
.el-sub-menu .el-menu-item {
min-width: min-content !important;
width: 94%;
}
}
// 菜单层级对齐:带图标嵌套项(二级菜单/子分组)回到 EP 原生级差缩进(padding-left 40px,
// 图标起点 45px,与一级图标起点 25px 拉开层级差,避免图标同轴分不清级数);
// 无图标叶子项(三级页面)文字对齐直接上级带图标项的文字起点(padding + 图标 16px + 间距 10px):
// 一层嵌套(分栏第二列,上级 padding 20px)→ 46px;两层嵌套(默认/经典侧栏,上级 padding 40px)→ 66px。
// EP 原生按级数递增缩进且不区分有无图标,此处统一覆盖。
// 注意:规则全部限定在侧栏容器 .layout-aside 内——弹出层(el-menu--popup-container,
// 含横向顶栏「···」ellipsis 收纳层、侧栏收起悬停层)由 EP 原生样式管理,弹层内各项
// 原生统一 padding 20px 天然对齐,若被内联规则命中会出现 title 与叶子错位。
.layout-aside .el-menu .el-sub-menu .el-menu-item {
padding-left: 40px !important;
}
// 顶层分组标题(根菜单直接子级,如布局一「设置」、布局二第二列「管理权限」):
// 与顶层叶子菜单同轴(padding 20px,图标起点 25px)
.layout-aside .el-menu > .el-sub-menu > .el-sub-menu__title {
padding-left: 20px !important;
}
// 深层分组标题(有父级分组的组菜单,即二级分组):与二级叶子同缩进(40px)
.layout-aside .el-menu .el-sub-menu .el-sub-menu > .el-sub-menu__title {
padding-left: 40px !important;
}
// 无图标叶子:模板中不含任何 <i> 图标元素,用 :has() 与带图标项区分
.layout-aside .el-menu .el-sub-menu .el-menu-item:not(:has(i)) {
padding-left: 46px !important;
}
.layout-aside .el-menu .el-sub-menu .el-sub-menu .el-menu-item:not(:has(i)) {
padding-left: 66px !important;
}
// 菜单收起(默认/经典布局 64px 窄条):一级图标水平居中。
// EP 原生收起态居中只命中 class 以 el-icon 开头的图标(.el-menu--collapse>… [class^=el-icon],
// 给 24px 图标位 + margin 清零),项目 iconfont 图标(.crmeb-icon.menu-icon)与旧版 .ivu-icon
// 前缀类匹配不上,沿用展开态 width:1em + margin-right:5px,图标偏左约 4px;此处补齐同样式。
// 同上限定在 .layout-aside 内,不影响收起悬停弹层(EP 原生展开态对齐)。
.layout-aside .el-menu--collapse > .el-menu-item .menu-icon,
.layout-aside .el-menu--collapse > .el-menu-item .ivu-icon,
.layout-aside .el-menu--collapse > .el-sub-menu > .el-sub-menu__title .menu-icon,
.layout-aside .el-menu--collapse > .el-sub-menu > .el-sub-menu__title .ivu-icon {
width: var(--el-menu-icon-width, 24px);
margin: 0;
text-align: center;
}
// 收起 + 分栏圆角/卡片风格(columns-round/columns-card 给菜单项左右各 5px 外边距,项宽 64→54px):
// 图标位仍按 64px 项的 padding-left 20px 排布,24px 图标整体右偏 5px(实测 iconCenterX=+5)。
// 收起态文字已隐藏(EP visibility:hidden + width:0)、箭头 display:none;两侧内边距一并清零后
// 内容居中即可自适应项宽。叶子项图标外还有一层 tooltip trigger 包装 div(块级、占满内容盒),
// 需让其内部也居中,否则图标贴在 padding 起点。
.layout-aside .el-menu--collapse.columns-round > .el-menu-item,
.layout-aside .el-menu--collapse.columns-round > .el-sub-menu > .el-sub-menu__title,
.layout-aside .el-menu--collapse.columns-card > .el-menu-item,
.layout-aside .el-menu--collapse.columns-card > .el-sub-menu > .el-sub-menu__title {
justify-content: center;
padding-left: 0 !important;
padding-right: 0 !important;
}
.layout-aside .el-menu--collapse.columns-round > .el-menu-item > div,
.layout-aside .el-menu--collapse.columns-card > .el-menu-item > div {
display: flex;
justify-content: center;
}
// 收起态选中二/三级页面(路由落在分组内)时,所属一级分组与叶子项一样高亮:
// EP 会把 is-active 向上传播到 rail 的一级 sub-menu,但原生只有文字变色(无底色),
// 窄条上辨识不出当前所在模块。叶子项高亮同样式(背景/文字变量一致,深色模式随变量自动适配);
// 展开态父级维持原设计不做选中标识,故限定收起态。
.layout-aside .el-menu--collapse > .el-sub-menu.is-active > .el-sub-menu__title {
color: var(--prev-MenuActiveColor) !important;
background-color: var(--prev-bg-menu-hover-ba-color) !important;
}
// 圆角风格下补内缩圆角:叶子项的圆角由 .columns-round 自带,分组标题只有 margin
.layout-aside .el-menu--collapse.columns-round > .el-sub-menu.is-active > .el-sub-menu__title {
border-radius: 5px;
}
// 小屏侧栏抽屉(layout/aside.vue):清零全局抽屉 body 的 20px 35px 内边距——
// 该内边距面向详情/编辑抽屉内容;侧栏菜单需占满抽屉宽度,
// 否则 180px 抽屉被左右各吃 35px 后仅剩 110px,二级菜单(缩进 40 + 图标 + 文字)被截断
.layout-aside-drawer .el-drawer__body {
padding: 0;
}
#add-is-active {
// @extend .el-active-extend;
// &:hover {
// @extend .el-active-extend;
// }
}
// 菜单收起时且是a链接
.is-dark a {
color: #ffffff !important;
text-decoration: none;
}
// 二级菜单展开抖动修复:EP 的 ElCollapseTransition 动画在 overflow visible/hidden 间切换,
// .columns-round 给菜单项加的 margin 在 visible 时向外塌陷、hidden 时被包含,导致 scrollHeight
// 测量值与实际内容高度不一致,动画起止瞬间高度突变(肉眼可见的上跳)。
// flow-root 让内联子菜单始终成为 BFC,margin 全程被包含,三者高度一致;间隙视觉不变。
.layout-aside .el-menu .el-menu--inline {
display: flow-root;
}
// 菜单收起时鼠标经过背景颜色/字体颜色
.el-menu--vertical {
background: var(--prev-bg-menuBar) !important;
}
.el-menu--horizontal {
.el-menu {
background: var(--prev-bg-topBar) !important;
}
.el-menu-item,
.el-sub-menu__title {
color: var(--prev-bg-topBarColor) !important;
}
}
// 第三方图标字体间距/大小设置
.el-menu-item .iconfont,
.el-sub-menu .iconfont,
.el-menu-item .fa,
.el-sub-menu__title .fa {
font-size: 14px !important;
display: inline-block;
vertical-align: middle;
margin-right: 5px;
width: 24px;
text-align: center;
}
// element plus 本身字体图标
.el-sub-menu [class^='el-icon-'],
.el-menu-item [class^='el-icon-'] {
font-size: 14px !important;
}
// 去掉离开浏览器时,菜单的默认高亮
.el-menu-item:focus {
// background-color: transparent !important;
}
/* Alert 警告
------------------------------- */
.el-alert__title {
word-break: break-all;
}
// tooltip(边框/箭头同色,用令牌:深色下自动变暗)
.el-popper.is-light {
border-color: var(--prev-border-color-light) !important;
}
.el-popper .el-popper__arrow,
.el-popper .el-popper__arrow::after {
color: var(--prev-border-color-light) !important;
}
.el-popper .el-popper__arrow {
border-bottom-color: var(--prev-border-color-light) !important;
}
// 下拉菜单
.el-dropdown {
font-size: 12px !important;
line-height: inherit;
}
.el-dropdown-link {
cursor: pointer;
color: var(--prev-color-primary);
}
.el-icon-arrow-down {
font-size: 12px;
}
.el-message {
min-width: 100px !important;
padding-right: 25px !important;
}
.el-message-box {
position: absolute;
top: 20%;
left: 50%;
-webkit-transform: translate(-50%);
transform: translate(-50%);
}
.el-message-box__wrapper {
overflow-y: auto;
}
.el-notification__content {
color: var(--prev-color-text-regular);
p {
word-break: break-all;
}
}
// input
// 取消input的上下箭头
input::-webkit-inner-spin-button {
-webkit-appearance: none !important;
}
input::-webkit-outer-spin-button {
-webkit-appearance: none !important;
}
.el-radio__input.is-checked .el-radio__inner {
background-color: var(--prev-color-primary) !important;
border-color: var(--prev-color-primary) !important;
}
// primary
.el-button--primary {
color: var(--prev-color-text-white) !important;
background: var(--prev-color-primary) !important;
border-color: var(--prev-color-primary) !important;
&:hover,
&:focus {
color: var(--prev-color-text-white);
background: var(--prev-color-primary-light-3) !important;
border-color: var(--prev-color-primary-light-3) !important;
}
}
// loading
.vxe-loading > .vxe-loading--chunk {
color: var(--prev-color-primary) !important;
}
.el-form-item--small .el-form-item__label {
word-break: break-word;
}
/* 表单行内的日期/时间范围选择器不被 flex 拉伸:EP 的 .el-range-editor 复用 .el-input__wrapper
自带 flex-grow: 1,在 .el-form-item__content(flex 容器)内即使写了 width 也会占满整行剩余空间;
置 0 后写了宽度按宽度显示,未写的回落 EP 默认(daterange 350px / datetimerange 640px),
width: 100% 的场景不受影响 */
.el-form-item__content .el-range-editor {
flex-grow: 0;
}
/* 数字输入框统一默认宽 180px:EP 默认 150px(small 120px)放不下带单位后缀的数字,
页面显式宽度类(scoped)与 form-create 的 100% 仍正常覆盖 */
.el-input-number {
width: 180px;
}