This commit is contained in:
2026-05-31 12:09:14 +08:00
commit e4f9eedb80
1121 changed files with 209380 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
/**
* Ant Design Vue 4 Dark 主题 Less 变量兼容层
* AntDv4 移除了 Less 主题文件,此文件提供 ele-admin-pro 所需的暗色模式变量。
*/
@import './default.less';
// ========== 暗色覆盖 ==========
@primary-color: #1668dc;
@component-background: #141414;
@background-color-light: #1d1d1d;
@background-color-base: #1f1f1f;
@heading-color: rgba(255, 255, 255, 0.88);
@text-color: rgba(255, 255, 255, 0.85);
@text-color-secondary: rgba(255, 255, 255, 0.65);
@border-color-base: #424242;
@border-color-split: #303030;
@item-active-bg: #111b26;
@item-hover-bg: #262626;
// ========== Menu Dark ==========
@menu-bg: #1f1f1f;
@menu-item-color: rgba(255, 255, 255, 0.65);
@menu-highlight-color: @primary-color;
@menu-dark-item-selected-bg: @primary-color;
@menu-dark-item-color: rgba(255, 255, 255, 0.65);
@menu-dark-selected-item-text-color: #fff;
// ========== Layout Dark ==========
@layout-body-background: #000000;
@layout-header-background: #1f1f1f;
@layout-sider-background: #1f1f1f;
// ========== Modal Dark ==========
@modal-content-bg: #1f1f1f;
@modal-heading-color: rgba(255, 255, 255, 0.88);
@modal-close-color: rgba(255, 255, 255, 0.45);
// ========== 其他 ==========
@disabled-color: rgba(255, 255, 255, 0.25);

View File

@@ -0,0 +1,915 @@
/**
* Ant Design Vue 4 Less 变量兼容层
* 基于 AntDv3 default.less 的完整变量存根
* 所有 colorPalette() 调用已替换为 AntDv4 实际色值
*/
// ========== 主题配置 ==========
@theme: default;
@ant-prefix: ant;
@html-selector: html;
// ========== 颜色 - 主色系 ==========
@primary-color: #1677ff;
@primary-1: #e6f4ff;
@primary-2: #bae0ff;
@primary-3: #91caff;
@primary-4: #69b1ff;
@primary-5: #4096ff;
@primary-6: @primary-color;
@primary-7: #0958d9;
@primary-8: #003eb3;
@primary-9: #002c8c;
@primary-10: #001d66;
@primary-color-hover: #4096ff;
@primary-color-active: #0958d9;
@primary-color-outline: rgba(22, 119, 255, 0.2);
// ========== 颜色 - 信息 ==========
@info-color: @primary-color;
@info-color-deprecated-bg: #e6f4ff;
@info-color-deprecated-border: #91caff;
// ========== 颜色 - 成功 ==========
@success-color: #52c41a;
@success-color-hover: #73d13d;
@success-color-active: #49aa19;
@success-color-outline: rgba(82, 196, 26, 0.2);
@success-color-deprecated-bg: #f6ffed;
@success-color-deprecated-border: #b7eb8f;
// ========== 颜色 - 警告 ==========
@warning-color: #faad14;
@warning-color-hover: #ffc53d;
@warning-color-active: #d48806;
@warning-color-outline: rgba(250, 173, 20, 0.2);
@warning-color-deprecated-bg: #fffbe6;
@warning-color-deprecated-border: #ffe58f;
// ========== 颜色 - 错误 ==========
@error-color: #ff4d4f;
@error-color-hover: #ff7875;
@error-color-active: #d9363e;
@error-color-outline: rgba(255, 77, 79, 0.2);
@error-color-deprecated-bg: #fff2f0;
@error-color-deprecated-border: #ffccc7;
// ========== 颜色 - 其他 ==========
@highlight-color: @error-color;
@normal-color: #d9d9d9;
@white: #fff;
@black: #000;
// ========== 基础样式 ==========
@body-background: #f0f2f5;
@component-background: #ffffff;
@popover-background: @component-background;
@font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
@code-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
@text-color: rgba(0, 0, 0, 0.88);
@text-color-secondary: rgba(0, 0, 0, 0.65);
@text-color-dark: rgba(255, 255, 255, 0.65);
@text-color-inverse: @white;
@icon-color: inherit;
@icon-color-hover: #4096ff;
@heading-color: rgba(0, 0, 0, 0.88);
@text-selection-bg: @primary-color;
@font-variant-base: tabular-nums;
@font-feature-settings-base: 'tnum';
@font-size-base: 14px;
@font-size-lg: 16px;
@font-size-sm: 12px;
@heading-1-size: 38px;
@heading-2-size: 30px;
@heading-3-size: 24px;
@heading-4-size: 20px;
@heading-5-size: 16px;
@line-height-base: 1.5715;
@border-radius-base: 6px;
@border-radius-sm: 4px;
@padding-lg: 24px;
@padding-md: 16px;
@padding-sm: 12px;
@padding-xs: 8px;
@padding-xss: 4px;
@control-padding-horizontal: @padding-sm;
@control-padding-horizontal-sm: @padding-xs;
@margin-lg: 24px;
@margin-md: 16px;
@margin-sm: 12px;
@margin-xs: 8px;
@margin-xss: 4px;
@height-base: 32px;
@height-lg: 40px;
@height-sm: 24px;
@item-active-bg: #e6f4ff;
@item-hover-bg: #f5f5f5;
// ========== 图标 ==========
@iconfont-css-prefix: anticon;
// ========== 链接 ==========
@link-color: @primary-color;
@link-hover-color: #4096ff;
@link-active-color: #0958d9;
@link-decoration: none;
@link-hover-decoration: none;
@link-focus-decoration: none;
@link-focus-outline: 0;
// ========== 动画/缓动 ==========
@ease-base-out: cubic-bezier(0.7, 0.3, 0.1, 1);
@ease-base-in: cubic-bezier(0.9, 0, 0.3, 0.7);
@ease-out: cubic-bezier(0.215, 0.61, 0.355, 1);
@ease-in: cubic-bezier(0.55, 0.055, 0.675, 0.19);
@ease-in-out: cubic-bezier(0.645, 0.045, 0.355, 1);
@ease-out-back: cubic-bezier(0.12, 0.4, 0.29, 1.46);
@ease-in-back: cubic-bezier(0.71, -0.46, 0.88, 0.6);
@ease-in-out-back: cubic-bezier(0.71, -0.46, 0.29, 1.46);
@ease-out-circ: cubic-bezier(0.08, 0.82, 0.17, 1);
@ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.34);
@ease-in-out-circ: cubic-bezier(0.78, 0.14, 0.15, 0.86);
@ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);
@ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);
@ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);
@duration-base: 0.3s;
// ========== 边框 ==========
@border-color-base: #d9d9d9;
@border-color-split: #f0f0f0;
@border-color-inverse: @white;
@border-width-base: 1px;
@border-style-base: solid;
// ========== Outline ==========
@outline-blur-size: 0;
@outline-width: 2px;
@outline-color: @primary-color;
@outline-fade: 20%;
// ========== 背景 ==========
@background-color-light: #fafafa;
@background-color-base: #f5f5f5;
// ========== 禁用状态 ==========
@disabled-color: rgba(0, 0, 0, 0.25);
@disabled-bg: #f5f5f5;
@disabled-active-bg: #f5f5f5;
// ========== 阴影 ==========
@shadow-color: rgba(0, 0, 0, 0.15);
@shadow-color-inverse: @component-background;
@box-shadow-base: 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);
@shadow-1-up: 0 -6px 16px -8px rgba(0, 0, 0, 0.08), 0 -9px 28px 0 rgba(0, 0, 0, 0.05), 0 -12px 48px 16px rgba(0, 0, 0, 0.03);
@shadow-1-down: 0 6px 16px -8px rgba(0, 0, 0, 0.08), 0 9px 28px 0 rgba(0, 0, 0, 0.05), 0 12px 48px 16px rgba(0, 0, 0, 0.03);
@shadow-1-left: -6px 0 16px -8px rgba(0, 0, 0, 0.08), -9px 0 28px 0 rgba(0, 0, 0, 0.05), -12px 0 48px 16px rgba(0, 0, 0, 0.03);
@shadow-1-right: 6px 0 16px -8px rgba(0, 0, 0, 0.08), 9px 0 28px 0 rgba(0, 0, 0, 0.05), 12px 0 48px 16px rgba(0, 0, 0, 0.03);
@shadow-2: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
// ========== 按钮 ==========
@btn-font-weight: 400;
@btn-border-radius-base: @border-radius-base;
@btn-border-radius-sm: @border-radius-base;
@btn-border-width: @border-width-base;
@btn-border-style: @border-style-base;
@btn-shadow: 0 2px 0 rgba(0, 0, 0, 0.015);
@btn-primary-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);
@btn-text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);
@btn-primary-color: #fff;
@btn-primary-bg: @primary-color;
@btn-default-color: @text-color;
@btn-default-bg: @component-background;
@btn-default-border: @border-color-base;
@btn-danger-color: #fff;
@btn-danger-bg: @error-color;
@btn-danger-border: @error-color;
@btn-disable-color: @disabled-color;
@btn-disable-bg: @disabled-bg;
@btn-disable-border: @border-color-base;
@btn-default-ghost-color: @component-background;
@btn-default-ghost-bg: transparent;
@btn-default-ghost-border: @component-background;
@btn-font-size-lg: @font-size-lg;
@btn-font-size-sm: @font-size-base;
@btn-padding-horizontal-base: 15px;
@btn-padding-horizontal-lg: @btn-padding-horizontal-base;
@btn-padding-horizontal-sm: 7px;
@btn-height-base: @height-base;
@btn-height-lg: @height-lg;
@btn-height-sm: @height-sm;
@btn-line-height: @line-height-base;
@btn-circle-size: @btn-height-base;
@btn-circle-size-lg: @btn-height-lg;
@btn-circle-size-sm: @btn-height-sm;
@btn-square-size: @btn-height-base;
@btn-square-size-lg: @btn-height-lg;
@btn-square-size-sm: @btn-height-sm;
@btn-square-only-icon-size: 16px;
@btn-square-only-icon-size-sm: @font-size-base;
@btn-square-only-icon-size-lg: 18px;
@btn-group-border: #4096ff;
@btn-link-hover-bg: transparent;
@btn-text-hover-bg: rgba(0, 0, 0, 0.018);
// ========== 多选框 ==========
@checkbox-size: 16px;
@checkbox-color: @primary-color;
@checkbox-check-color: #fff;
@checkbox-check-bg: @checkbox-check-color;
@checkbox-border-width: @border-width-base;
@checkbox-border-radius: @border-radius-base;
@checkbox-group-item-margin-right: 8px;
// ========== 描述列表 ==========
@descriptions-bg: #fafafa;
@descriptions-title-margin-bottom: 20px;
@descriptions-default-padding: @padding-md @padding-lg;
@descriptions-middle-padding: @padding-sm @padding-lg;
@descriptions-small-padding: @padding-xs @padding-md;
@descriptions-item-padding-bottom: @padding-md;
@descriptions-item-trailing-colon: true;
@descriptions-item-label-colon-margin-right: 8px;
@descriptions-item-label-colon-margin-left: 2px;
@descriptions-extra-color: @text-color;
// ========== 分割线 ==========
@divider-text-padding: 1em;
@divider-orientation-margin: 5%;
@divider-color: rgba(0, 0, 0, 0.06);
@divider-vertical-gutter: 8px;
// ========== 下拉菜单 ==========
@dropdown-selected-color: @primary-color;
@dropdown-menu-submenu-disabled-bg: @component-background;
@dropdown-selected-bg: @item-active-bg;
@dropdown-menu-bg: @component-background;
@dropdown-vertical-padding: 5px;
@dropdown-edge-child-vertical-padding: 4px;
@dropdown-font-size: @font-size-base;
@dropdown-line-height: 22px;
// ========== 空白 ==========
@empty-font-size: @font-size-base;
// ========== 单选框 ==========
@radio-size: 16px;
@radio-top: 0.2em;
@radio-border-width: 1px;
@radio-dot-size: 8px;
@radio-dot-color: @primary-color;
@radio-dot-disabled-color: rgba(0, 0, 0, 0.2);
@radio-solid-checked-color: @component-background;
@radio-button-bg: @btn-default-bg;
@radio-button-checked-bg: @btn-default-bg;
@radio-button-color: @btn-default-color;
@radio-button-hover-color: #4096ff;
@radio-button-active-color: #0958d9;
@radio-button-padding-horizontal: 15px;
@radio-disabled-button-checked-bg: @disabled-active-bg;
@radio-disabled-button-checked-color: @disabled-color;
@radio-wrapper-margin-right: 8px;
// ========== 媒体查询/断点 ==========
@screen-xs: 480px;
@screen-xs-min: @screen-xs;
@screen-xs-max: (@screen-sm-min - 1px);
@screen-sm: 576px;
@screen-sm-min: @screen-sm;
@screen-sm-max: (@screen-md-min - 1px);
@screen-md: 768px;
@screen-md-min: @screen-md;
@screen-md-max: (@screen-lg-min - 1px);
@screen-lg: 992px;
@screen-lg-min: @screen-lg;
@screen-lg-max: (@screen-xl-min - 1px);
@screen-xl: 1200px;
@screen-xl-min: @screen-xl;
@screen-xl-max: (@screen-xxl-min - 1px);
@screen-xxl: 1600px;
@screen-xxl-min: @screen-xxl;
@screen-xxl-max: 1919px;
@screen-xxxl: 2000px;
@screen-xxxl-min: @screen-xxxl;
// ========== 网格 ==========
@grid-columns: 24;
// ========== 布局 ==========
@layout-body-background: #f0f2f5;
@layout-header-background: #001529;
@layout-header-height: 64px;
@layout-header-padding: 0 50px;
@layout-header-color: @text-color;
@layout-footer-padding: 24px 50px;
@layout-footer-background: @layout-body-background;
@layout-sider-background: @layout-header-background;
@layout-trigger-height: 48px;
@layout-trigger-background: #002140;
@layout-trigger-color: #fff;
@layout-zero-trigger-width: 36px;
@layout-zero-trigger-height: 42px;
@layout-sider-background-light: #fff;
@layout-trigger-background-light: #fff;
@layout-trigger-color-light: @text-color;
// ========== z-index ==========
@zindex-badge: auto;
@zindex-table-fixed: 2;
@zindex-affix: 10;
@zindex-back-top: 10;
@zindex-picker-panel: 10;
@zindex-popup-close: 10;
@zindex-modal: 1000;
@zindex-modal-mask: 1000;
@zindex-message: 1010;
@zindex-notification: 1010;
@zindex-popover: 1030;
@zindex-dropdown: 1050;
@zindex-picker: 1050;
@zindex-popconfirm: 1060;
@zindex-tooltip: 1070;
@zindex-image: 1080;
// ========== 动画持续时间 ==========
@animation-duration-slow: 0.3s;
@animation-duration-base: 0.2s;
@animation-duration-fast: 0.1s;
// ========== 折叠面板 ==========
@collapse-panel-border-radius: @border-radius-base;
// ========== 表单 ==========
@label-required-color: @highlight-color;
@label-color: @heading-color;
@form-warning-input-bg: @input-bg;
@form-item-margin-bottom: 24px;
@form-item-trailing-colon: true;
@form-vertical-label-padding: 0 0 8px;
@form-vertical-label-margin: 0;
@form-item-label-font-size: @font-size-base;
@form-item-label-height: @input-height-base;
@form-item-label-colon-margin-right: 8px;
@form-item-label-colon-margin-left: 2px;
@form-error-input-bg: @input-bg;
// ========== 输入框 ==========
@input-height-base: @height-base;
@input-height-lg: @height-lg;
@input-height-sm: @height-sm;
@input-padding-horizontal: 11px;
@input-padding-horizontal-base: @input-padding-horizontal;
@input-padding-horizontal-sm: 7px;
@input-padding-horizontal-lg: @input-padding-horizontal;
@input-padding-vertical-base: 4px;
@input-padding-vertical-sm: 0px;
@input-padding-vertical-lg: 8px;
@input-placeholder-color: rgba(0, 0, 0, 0.25);
@input-color: @text-color;
@input-icon-color: @input-color;
@input-border-color: @border-color-base;
@input-bg: @component-background;
@input-number-hover-border-color: #4096ff;
@input-number-handler-bg: @component-background;
@input-number-handler-border-color: @border-color-base;
@input-addon-bg: @background-color-light;
@input-hover-border-color: #4096ff;
@input-disabled-bg: @disabled-bg;
@input-outline-offset: 0 0;
@input-icon-hover-color: rgba(0, 0, 0, 0.85);
@input-disabled-color: @disabled-color;
// ========== Mentions ==========
@mentions-dropdown-bg: @component-background;
@mentions-dropdown-menu-item-hover-bg: @mentions-dropdown-bg;
// ========== 选择器 ==========
@select-border-color: @border-color-base;
@select-item-selected-color: @text-color;
@select-item-selected-font-weight: 600;
@select-dropdown-bg: @component-background;
@select-item-selected-bg: @primary-1;
@select-item-active-bg: @item-hover-bg;
@select-dropdown-vertical-padding: @dropdown-vertical-padding;
@select-dropdown-font-size: @dropdown-font-size;
@select-dropdown-line-height: @dropdown-line-height;
@select-dropdown-height: 32px;
@select-background: @component-background;
@select-clear-background: @select-background;
@select-selection-item-bg: #f5f5f5;
@select-selection-item-border-color: #f0f0f0;
@select-single-item-height-lg: 40px;
@select-multiple-item-height: 24px;
@select-multiple-item-height-lg: 32px;
@select-multiple-item-spacing-half: 4px;
@select-multiple-disabled-background: @input-disabled-bg;
@select-multiple-item-disabled-color: #bfbfbf;
@select-multiple-item-disabled-border-color: @select-border-color;
@select-clear-width: 20px;
// ========== 级联选择 ==========
@cascader-bg: @component-background;
@cascader-item-selected-bg: @primary-1;
@cascader-menu-bg: @component-background;
@cascader-menu-border-color-split: @border-color-split;
@cascader-dropdown-vertical-padding: @dropdown-vertical-padding;
@cascader-dropdown-edge-child-vertical-padding: @dropdown-edge-child-vertical-padding;
@cascader-dropdown-font-size: @dropdown-font-size;
@cascader-dropdown-line-height: @dropdown-line-height;
// ========== 锚点 ==========
@anchor-bg: transparent;
@anchor-border-color: @border-color-split;
@anchor-link-top: 7px;
@anchor-link-left: 16px;
@anchor-link-padding: @anchor-link-top 0 @anchor-link-top @anchor-link-left;
// ========== 工具提示 ==========
@tooltip-max-width: 250px;
@tooltip-color: #fff;
@tooltip-bg: rgba(0, 0, 0, 0.75);
@tooltip-arrow-width: 5px;
@tooltip-distance: 8px;
@tooltip-arrow-color: @tooltip-bg;
// ========== 气泡卡片 ==========
@popover-bg: @component-background;
@popover-color: @text-color;
@popover-min-width: 177px;
@popover-min-height: 32px;
@popover-arrow-width: 6px;
@popover-arrow-color: @popover-bg;
@popover-arrow-outer-color: @popover-bg;
@popover-distance: 10px;
@popover-padding-horizontal: @padding-md;
// ========== 模态框 ==========
@modal-header-padding-vertical: @padding-md;
@modal-header-padding-horizontal: @padding-lg;
@modal-body-padding: @padding-lg;
@modal-header-bg: @component-background;
@modal-header-padding: @modal-header-padding-vertical @modal-header-padding-horizontal;
@modal-header-border-width: @border-width-base;
@modal-header-border-style: @border-style-base;
@modal-header-title-line-height: 22px;
@modal-header-title-font-size: @font-size-lg;
@modal-header-border-color-split: @border-color-split;
@modal-header-close-size: 56px;
@modal-content-bg: @component-background;
@modal-heading-color: @heading-color;
@modal-close-color: @text-color-secondary;
@modal-footer-bg: transparent;
@modal-footer-border-color-split: @border-color-split;
@modal-footer-border-style: @border-style-base;
@modal-footer-padding-vertical: 10px;
@modal-footer-padding-horizontal: 16px;
@modal-footer-border-width: @border-width-base;
@modal-mask-bg: rgba(0, 0, 0, 0.45);
@modal-confirm-body-padding: 32px 32px 24px;
@modal-confirm-title-font-size: @font-size-lg;
// ========== 进度条 ==========
@progress-default-color: @primary-color;
@progress-remaining-color: @background-color-base;
@progress-info-text-color: @progress-text-color;
@progress-radius: 100px;
@progress-steps-item-bg: #f3f3f3;
@progress-text-font-size: 1em;
@progress-text-color: @text-color;
@progress-circle-text-font-size: 1em;
// ========== 菜单 ==========
@menu-inline-toplevel-item-height: 40px;
@menu-item-height: 40px;
@menu-item-group-height: @line-height-base;
@menu-collapsed-width: 80px;
@menu-bg: @component-background;
@menu-popup-bg: @component-background;
@menu-item-color: @text-color;
@menu-inline-submenu-bg: @background-color-light;
@menu-highlight-color: @primary-color;
@menu-highlight-danger-color: @error-color;
@menu-item-active-bg: @primary-1;
@menu-item-active-danger-bg: #fff2f0;
@menu-item-active-border-width: 3px;
@menu-item-group-title-color: @text-color-secondary;
@menu-item-vertical-margin: 4px;
@menu-item-font-size: @font-size-base;
@menu-item-boundary-margin: 8px;
@menu-item-padding-horizontal: 20px;
@menu-item-padding: 0 @menu-item-padding-horizontal;
@menu-horizontal-line-height: 46px;
@menu-icon-margin-right: 10px;
@menu-icon-size: @menu-item-font-size;
@menu-icon-size-lg: @font-size-lg;
@menu-dark-color: rgba(255, 255, 255, 0.65);
@menu-dark-danger-color: @error-color;
@menu-dark-bg: @layout-header-background;
@menu-dark-arrow-color: #fff;
@menu-dark-inline-submenu-bg: #000c17;
@menu-dark-highlight-color: #fff;
@menu-dark-item-active-bg: @primary-color;
@menu-dark-item-active-danger-bg: @error-color;
@menu-dark-selected-item-icon-color: @white;
@menu-dark-selected-item-text-color: @white;
// ========== 加载动画 ==========
@spin-dot-size-sm: 14px;
@spin-dot-size: 20px;
@spin-dot-size-lg: 32px;
// ========== 表格 ==========
@table-bg: @component-background;
@table-header-bg: @background-color-light;
@table-header-color: @heading-color;
@table-header-sort-bg: @background-color-base;
@table-body-sort-bg: #fafafa;
@table-row-hover-bg: @background-color-light;
@table-selected-row-color: inherit;
@table-selected-row-bg: @primary-1;
@table-body-selected-sort-bg: @table-selected-row-bg;
@table-selected-row-hover-bg: #e6f4ff;
@table-expanded-row-bg: #fbfbfb;
@table-padding-vertical: 16px;
@table-padding-horizontal: 16px;
@table-padding-vertical-md: 12px;
@table-padding-horizontal-md: 8px;
@table-padding-vertical-sm: 8px;
@table-padding-horizontal-sm: 8px;
@table-border-color: #f0f0f0;
@table-border-radius-base: @border-radius-base;
@table-footer-bg: @background-color-light;
@table-footer-color: @heading-color;
@table-header-bg-sm: @table-header-bg;
@table-font-size: @font-size-base;
@table-font-size-md: @table-font-size;
@table-font-size-sm: @table-font-size;
@table-header-cell-split-color: rgba(0, 0, 0, 0.06);
@table-header-sort-active-bg: rgba(0, 0, 0, 0.04);
@table-fixed-header-sort-active-bg: #f0f0f0;
@table-header-filter-active-bg: rgba(0, 0, 0, 0.04);
@table-filter-btns-bg: inherit;
@table-filter-dropdown-bg: @component-background;
@table-expand-icon-bg: @component-background;
@table-selection-column-width: 32px;
@table-sticky-scroll-bar-bg: rgba(0, 0, 0, 0.35);
@table-sticky-scroll-bar-radius: 4px;
// ========== 标签 ==========
@tag-default-bg: @background-color-light;
@tag-default-color: @text-color;
@tag-font-size: @font-size-sm;
@tag-line-height: 20px;
// ========== 选择器/时间选择器 ==========
@picker-bg: @component-background;
@picker-basic-cell-hover-color: @item-hover-bg;
@picker-basic-cell-active-with-range-color: @primary-1;
@picker-basic-cell-hover-with-range-color: #69b1ff;
@picker-basic-cell-disabled-bg: rgba(0, 0, 0, 0.04);
@picker-border-color: @border-color-split;
@picker-date-hover-range-border-color: #69b1ff;
@picker-date-hover-range-color: @picker-basic-cell-hover-with-range-color;
@picker-time-panel-column-width: 56px;
@picker-time-panel-column-height: 224px;
@picker-time-panel-cell-height: 28px;
@picker-panel-cell-height: 24px;
@picker-panel-cell-width: 36px;
@picker-text-height: 40px;
@picker-panel-without-time-cell-height: 66px;
// ========== 日历 ==========
@calendar-bg: @component-background;
@calendar-input-bg: @input-bg;
@calendar-border-color: @border-color-inverse;
@calendar-item-active-bg: @item-active-bg;
@calendar-column-active-bg: rgba(230, 244, 255, 0.2);
@calendar-full-bg: @calendar-bg;
@calendar-full-panel-bg: @calendar-full-bg;
// ========== 轮播 ==========
@carousel-dot-width: 16px;
@carousel-dot-height: 3px;
@carousel-dot-active-width: 24px;
// ========== 徽章 ==========
@badge-height: 20px;
@badge-height-sm: 14px;
@badge-dot-size: 6px;
@badge-font-size: @font-size-sm;
@badge-font-size-sm: @font-size-sm;
@badge-font-weight: normal;
@badge-status-size: 6px;
@badge-text-color: @component-background;
@badge-color: @highlight-color;
// ========== 评分 ==========
@rate-star-color: #fadb14;
@rate-star-bg: @border-color-split;
@rate-star-size: 20px;
@rate-star-hover-scale: scale(1.1);
// ========== 卡片 ==========
@card-head-color: @heading-color;
@card-head-background: transparent;
@card-head-font-size: @font-size-lg;
@card-head-font-size-sm: @font-size-base;
@card-head-padding: 16px;
@card-head-padding-sm: 8px;
@card-head-height: 48px;
@card-head-height-sm: 36px;
@card-inner-head-padding: 12px;
@card-padding-base: 24px;
@card-padding-base-sm: 12px;
@card-actions-background: @component-background;
@card-actions-li-margin: 12px 0;
@card-skeleton-bg: #cfd8dc;
@card-background: @component-background;
@card-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);
@card-radius: @border-radius-base;
@card-head-tabs-margin-bottom: -17px;
@card-head-extra-color: @text-color;
// ========== 评论 ==========
@comment-bg: inherit;
@comment-padding-base: @padding-md 0;
@comment-nest-indent: 44px;
@comment-font-size-base: @font-size-base;
@comment-font-size-sm: @font-size-sm;
@comment-author-name-color: @text-color-secondary;
@comment-author-time-color: #ccc;
@comment-action-color: @text-color-secondary;
@comment-action-hover-color: #595959;
@comment-actions-margin-bottom: inherit;
@comment-actions-margin-top: @margin-sm;
@comment-content-detail-margin-bottom: inherit;
// ========== 标签页 ==========
@tabs-card-head-background: @background-color-light;
@tabs-card-height: 40px;
@tabs-card-active-color: @primary-color;
@tabs-card-horizontal-padding: 16px 20px;
@tabs-card-horizontal-padding-sm: 6px @padding-md;
@tabs-card-horizontal-padding-lg: 7px @padding-md 6px;
@tabs-title-font-size: @font-size-base;
@tabs-title-font-size-lg: @font-size-lg;
@tabs-title-font-size-sm: @font-size-base;
@tabs-ink-bar-color: @primary-color;
@tabs-bar-margin: 0 0 @margin-md 0;
@tabs-horizontal-gutter: 32px;
@tabs-horizontal-margin: 0 0 0 @tabs-horizontal-gutter;
@tabs-horizontal-padding: @padding-sm 0;
@tabs-horizontal-padding-lg: @padding-md 0;
@tabs-horizontal-padding-sm: @padding-xs 0;
@tabs-vertical-padding: @padding-xs @padding-lg;
@tabs-vertical-margin: @margin-md 0 0 0;
@tabs-scrolling-size: 32px;
@tabs-highlight-color: @primary-color;
@tabs-hover-color: #4096ff;
@tabs-active-color: #0958d9;
@tabs-card-gutter: 2px;
@tabs-card-tab-active-border-top: 2px solid transparent;
// ========== 回到顶部 ==========
@back-top-color: #fff;
@back-top-bg: rgba(0, 0, 0, 0.45);
@back-top-hover-bg: @text-color;
// ========== 头像 ==========
@avatar-size-base: 32px;
@avatar-size-lg: 40px;
@avatar-size-sm: 24px;
@avatar-font-size-base: 18px;
@avatar-font-size-lg: 24px;
@avatar-font-size-sm: 14px;
@avatar-bg: #ccc;
@avatar-color: #fff;
@avatar-border-radius: @border-radius-base;
@avatar-group-overlapping: -8px;
@avatar-group-space: 3px;
@avatar-group-border-color: #fff;
// ========== 开关 ==========
@switch-height: 22px;
@switch-sm-height: 16px;
@switch-min-width: 44px;
@switch-sm-min-width: 28px;
@switch-disabled-opacity: 0.4;
@switch-color: @primary-color;
@switch-bg: @component-background;
@switch-shadow-color: rgba(0, 35, 11, 0.2);
@switch-padding: 2px;
@switch-inner-margin-min: 7px;
@switch-inner-margin-max: 26px;
@switch-inner-sm-margin-min: 5px;
@switch-inner-sm-margin-max: 20px;
// ========== 分页 ==========
@pagination-item-bg: @component-background;
@pagination-item-size: @height-base;
@pagination-item-size-sm: 24px;
@pagination-font-family: @font-family;
@pagination-font-weight-active: 500;
@pagination-item-bg-active: @component-background;
@pagination-item-link-bg: @component-background;
@pagination-item-disabled-color-active: @disabled-color;
@pagination-item-disabled-bg-active: @disabled-active-bg;
@pagination-item-input-bg: @component-background;
@pagination-mini-options-size-changer-top: 0px;
// ========== 页面头部 ==========
@page-header-padding: @padding-lg;
@page-header-padding-vertical: @padding-md;
@page-header-padding-breadcrumb: @padding-sm;
@page-header-content-padding-vertical: @padding-sm;
@page-header-back-color: #000;
@page-header-ghost-bg: inherit;
@page-header-heading-title: @heading-4-size;
@page-header-heading-sub-title: 14px;
@page-header-tabs-tab-font-size: 16px;
// ========== 面包屑 ==========
@breadcrumb-base-color: @text-color-secondary;
@breadcrumb-last-item-color: @text-color;
@breadcrumb-font-size: @font-size-base;
@breadcrumb-icon-font-size: @font-size-base;
@breadcrumb-link-color: @text-color-secondary;
@breadcrumb-link-color-hover: #4096ff;
@breadcrumb-separator-color: @text-color-secondary;
@breadcrumb-separator-margin: 0 @padding-xs;
// ========== 滑块 ==========
@slider-margin: 10px 6px 10px;
@slider-rail-background-color: @background-color-base;
@slider-rail-background-color-hover: #e1e1e1;
@slider-track-background-color: #91caff;
@slider-track-background-color-hover: #69b1ff;
@slider-handle-border-width: 2px;
@slider-handle-background-color: @component-background;
@slider-handle-color: #91caff;
@slider-handle-color-hover: #69b1ff;
@slider-handle-color-focus: rgba(22, 119, 255, 0.2);
@slider-handle-color-focus-shadow: rgba(22, 119, 255, 0.12);
@slider-handle-color-tooltip-open: @primary-color;
@slider-handle-size: 14px;
@slider-handle-margin-top: -5px;
@slider-handle-shadow: 0;
@slider-dot-border-color: @border-color-split;
@slider-dot-border-color-active: rgba(22, 119, 255, 0.5);
@slider-disabled-color: @disabled-color;
@slider-disabled-background-color: @component-background;
// ========== 树 ==========
@tree-bg: @component-background;
@tree-title-height: 24px;
@tree-child-padding: 18px;
@tree-directory-selected-color: #fff;
@tree-directory-selected-bg: @primary-color;
@tree-node-hover-bg: @item-hover-bg;
@tree-node-selected-bg: #bae0ff;
// ========== 折叠 ==========
@collapse-header-padding: @padding-sm @padding-md;
@collapse-header-padding-extra: 40px;
@collapse-header-bg: @background-color-light;
@collapse-content-padding: @padding-md;
@collapse-content-bg: @component-background;
@collapse-header-arrow-left: 16px;
// ========== 骨架屏 ==========
@skeleton-color: #f0f0f0;
@skeleton-to-color: #e8e8e8;
@skeleton-paragraph-margin-top: 28px;
@skeleton-paragraph-li-margin-top: @margin-md;
@skeleton-paragraph-li-height: 16px;
@skeleton-title-height: 16px;
@skeleton-title-paragraph-margin-top: @margin-lg;
// ========== 穿梭框 ==========
@transfer-header-height: 40px;
@transfer-item-height: @height-base;
@transfer-disabled-bg: @disabled-bg;
@transfer-list-height: 200px;
@transfer-item-hover-bg: @item-hover-bg;
@transfer-item-selected-hover-bg: #e6f4ff;
@transfer-item-padding-vertical: 6px;
@transfer-list-search-icon-top: 12px;
// ========== 消息 ==========
@message-notice-content-padding: 10px 16px;
@message-notice-content-bg: @component-background;
// ========== 动画 ==========
@wave-animation-width: 6px;
// ========== 警告提示 ==========
@alert-success-border-color: #b7eb8f;
@alert-success-bg-color: #f6ffed;
@alert-success-icon-color: @success-color;
@alert-info-border-color: #91caff;
@alert-info-bg-color: #e6f4ff;
@alert-info-icon-color: @info-color;
@alert-warning-border-color: #ffe58f;
@alert-warning-bg-color: #fffbe6;
@alert-warning-icon-color: @warning-color;
@alert-error-border-color: #ffccc7;
@alert-error-bg-color: #fff2f0;
@alert-error-icon-color: @error-color;
@alert-message-color: @heading-color;
@alert-text-color: @text-color;
@alert-close-color: @text-color-secondary;
@alert-close-hover-color: @icon-color-hover;
@alert-no-icon-padding-vertical: @padding-xs;
@alert-with-description-no-icon-padding-vertical: @padding-md;
@alert-with-description-padding-vertical: @padding-md;
@alert-with-description-padding: @alert-with-description-padding-vertical 15px @alert-with-description-no-icon-padding-vertical @alert-with-description-icon-size;
@alert-icon-top: 8px;
@alert-with-description-icon-size: 24px;
// ========== 列表 ==========
@list-header-background: transparent;
@list-footer-background: transparent;
@list-empty-text-padding: @padding-md;
@list-item-padding: @padding-sm 0;
@list-item-padding-sm: @padding-xs @padding-md;
@list-item-padding-lg: 16px 24px;
@list-item-meta-margin-bottom: @padding-md;
@list-item-meta-avatar-margin-right: @padding-md;
@list-item-meta-title-margin-bottom: @padding-sm;
@list-customize-card-bg: @component-background;
@list-item-meta-description-font-size: @font-size-base;
// ========== 统计 ==========
@statistic-title-font-size: @font-size-base;
@statistic-content-font-size: 24px;
@statistic-unit-font-size: 24px;
@statistic-font-family: @font-family;
// ========== 抽屉 ==========
@drawer-header-padding: @padding-md @padding-lg;
@drawer-body-padding: @padding-lg;
@drawer-bg: @component-background;
@drawer-footer-padding-vertical: @modal-footer-padding-vertical;
@drawer-footer-padding-horizontal: @modal-footer-padding-horizontal;
@drawer-header-close-size: 56px;
@drawer-title-font-size: @font-size-lg;
@drawer-title-line-height: 22px;
// ========== 时间轴 ==========
@timeline-width: 2px;
@timeline-color: @border-color-split;
@timeline-dot-border-width: 2px;
@timeline-dot-color: @primary-color;
@timeline-dot-bg: @component-background;
@timeline-item-padding-bottom: 20px;
// ========== 排版 ==========
@typography-title-font-weight: 600;
@typography-title-margin-top: 1.2em;
@typography-title-margin-bottom: 0.5em;
// ========== 上传 ==========
@upload-actions-color: @text-color-secondary;
// ========== 步骤 ==========
@process-tail-color: @border-color-split;
@steps-nav-arrow-color: rgba(0, 0, 0, 0.25);
@steps-background: @component-background;
@steps-icon-size: 32px;
@steps-icon-custom-size: @steps-icon-size;
@steps-icon-custom-top: 0px;
@steps-icon-custom-font-size: 24px;
@steps-icon-top: -0.5px;
@steps-icon-font-size: @font-size-lg;
@steps-icon-margin: 0 8px 0 0;
@steps-title-line-height: @height-base;
@steps-small-icon-size: 24px;
@steps-small-icon-margin: 0 8px 0 0;
@steps-dot-size: 8px;
@steps-dot-top: 2px;
@steps-current-dot-size: 10px;
@steps-description-max-width: 140px;
@steps-nav-content-max-width: auto;
@steps-vertical-icon-width: 16px;
@steps-vertical-tail-width: 16px;
@steps-vertical-tail-width-sm: 12px;
// ========== 通知 ==========
@notification-bg: @component-background;
@notification-padding-vertical: 16px;
@notification-padding-horizontal: 24px;
// ========== 结果 ==========
@result-title-font-size: 24px;
@result-subtitle-font-size: @font-size-base;
@result-icon-font-size: 72px;
@result-extra-margin: 24px 0 0 0;
// ========== 图片 ==========
@image-size-base: 48px;
@image-font-size-base: 24px;
@image-bg: #f5f5f5;
@image-color: #fff;
@image-mask-font-size: 16px;
@image-preview-operation-size: 18px;
@image-preview-operation-color: @text-color-dark;
@image-preview-operation-disabled-color: rgba(255, 255, 255, 0.25);

View File

@@ -0,0 +1,4 @@
// AntDv4 兼容:空模块
// AntDv4 使用 CSS-in-JS不再需要单独的样式导入
// 此文件用于吸收 ele-admin-pro 中的 ant-design-vue/es/xxx/style 引用
export default {};

View File

@@ -0,0 +1,4 @@
/** 按需引入 */
@import 'ele-admin-pro/es/style/nprogress.less';
@import 'ele-admin-pro/es/style/display.less';
@import 'ele-admin-pro/es/style/common.less';

87
src/styles/component.less Normal file
View File

@@ -0,0 +1,87 @@
/** 组件样式 */
//@input-item: 300px;
/* ele-pro-table 全局美化样式 */
.ele-pro-table {
// 表头样式 - 更现代的渐变效果
.ant-table-thead > tr > th {
border-bottom: 2px solid #e8e8e8;
background: linear-gradient(180deg, #fafbfc 0%, #f5f7fa 100%);
font-weight: 600;
color: #374151;
font-size: 13px;
letter-spacing: 0.02em;
&::before {
display: none;
}
}
// 表格行样式 - 添加斑马纹
.ant-table-tbody > tr {
transition: all 0.2s ease;
&:nth-child(even) {
background-color: #fafbfc;
}
> td {
border-bottom: 1px solid #f0f0f0;
padding: 14px 16px;
}
// 悬停效果
&:hover {
background-color: #f0f7ff !important;
> td {
background-color: transparent;
}
}
// 选中效果
&.ant-table-row-selected {
background-color: #e6f4ff;
&:hover {
background-color: #bae0ff !important;
}
}
}
// 圆角卡片效果
.ant-table {
border-radius: 12px;
overflow: hidden;
}
// 滚动条美化
.ant-table-body {
&::-webkit-scrollbar {
width: 8px;
height: 8px;
}
&::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 4px;
}
&::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 4px;
&:hover {
background: #a8a8a8;
}
}
}
// 分页器样式
.ant-pagination {
margin-top: 16px;
padding: 12px 16px;
background: #fafbfc;
border-radius: 0 0 12px 12px;
}
}

3
src/styles/global-import.less vendored Normal file
View File

@@ -0,0 +1,3 @@
/** 全局引入 */
@import 'cropperjs/dist/cropper.css';
@import 'ele-admin-pro/es/style/index.less';

77
src/styles/index.less Normal file
View File

@@ -0,0 +1,77 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
/* 重置浏览器默认 margin/padding */
html,
body {
margin: 0;
padding: 0;
}
/** 全局样式 */
@style-entry-file: as-needed;
@import './@{style-entry-file}.less';
@import './transition/index.less';
@import "./component.less";
// 侧边栏菜单高亮颜色(深红棕色)
@menu-dark-item-active-bg: #6b2d2d;
@menu-dark-selected-item-text-color: #fff;
// 主题AntDv4 使用 CSS-in-JS token 体系,不再需要 Less 动态主题)
// 覆盖 ant-design-vue 深色菜单选中高亮样式
// 使用更柔和的半透明背景 + 圆角
:where(.ele-admin-layout) {
// 侧边栏深色菜单选中样式
.ant-menu-dark.ant-menu-root {
// 选中项:半透明深红棕背景 + 8px圆角 + 宽度减少5px
.ant-menu-item-selected,
.ant-menu-item-active {
background-color: rgba(107, 45, 45, 0.5) !important;
border-radius: 8px;
color: rgba(255, 255, 255, 0.9) !important;
}
// 悬停效果
.ant-menu-item:hover {
background-color: rgba(107, 45, 45, 0.3) !important;
border-radius: 8px;
}
// 子菜单选中项
.ant-menu-submenu-selected > .ant-menu-submenu-title {
background-color: rgba(107, 45, 45, 0.5) !important;
border-radius: 8px;
color: rgba(255, 255, 255, 0.9) !important;
}
}
}
:root {
// 灰色主题
--grey-1: #1b1b1b;
--grey-2: #363636;
--grey-3: #4d4d4d;
--grey-4: #737373;
--grey-5: #a6a6a6;
--grey-6: #d9d9d9;
--grey-7: #e6e6e6;
--grey-8: #f2f2f2;
--grey-9: #f7f7f7;
--grey-10: #fafafa;
}
.ele-admin-theme-dark {
// 灰色主题
--grey-1: #fafafa;
--grey-2: #f7f7f7;
--grey-3: #f2f2f2;
--grey-4: #e6e6e6;
--grey-5: #d9d9d9;
--grey-6: #a6a6a6;
--grey-7: #737373;
--grey-8: #4d4d4d;
--grey-9: #363636;
--grey-10: #1b1b1b;
}

View File

@@ -0,0 +1,10 @@
/* 渐变 */
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.2s ease-in-out;
}
.fade-enter-from,
.fade-leave-to {
opacity: 0;
}

View File

@@ -0,0 +1,4 @@
/** 路由切换动画 */
@import './fade.less';
@import './slide.less';
@import './zoom.less';

View File

@@ -0,0 +1,31 @@
/* 底部消退 */
.slide-bottom-enter-active,
.slide-bottom-leave-active {
transition: opacity 0.2s ease-out, transform 0.25s ease-out;
}
.slide-bottom-enter-from {
opacity: 0;
transform: translateY(-10%);
}
.slide-bottom-leave-to {
opacity: 0;
transform: translateY(10%);
}
/* 右侧消退 */
.slide-right-leave-active,
.slide-right-enter-active {
transition: opacity 0.2s ease-out, transform 0.25s ease-out;
}
.slide-right-enter-from {
opacity: 0;
transform: translateX(-60px);
}
.slide-right-leave-to {
opacity: 0;
transform: translateX(60px);
}

View File

@@ -0,0 +1,31 @@
/* 放大渐变 */
.zoom-in-enter-active,
.zoom-in-leave-active {
transition: opacity 0.2s ease-out, transform 0.25s ease-out;
}
.zoom-in-enter-from {
opacity: 0;
transform: scale(0.9);
}
.zoom-in-leave-to {
opacity: 0;
transform: scale(1.1);
}
/* 缩小渐变 */
.zoom-out-leave-active,
.zoom-out-enter-active {
transition: opacity 0.2s ease-out, transform 0.25s ease-out;
}
.zoom-out-enter-from {
opacity: 0;
transform: scale(1.2);
}
.zoom-out-leave-to {
opacity: 0;
transform: scale(0.8);
}