diff --git a/doc/京东风格改造计划.md b/doc/京东风格改造计划.md
new file mode 100644
index 00000000..dec669b5
--- /dev/null
+++ b/doc/京东风格改造计划.md
@@ -0,0 +1,347 @@
+# 京东风格前端改造计划
+
+## 一、设计目标
+将现有系统改造为京东订单中心风格,采用红白灰配色,提升专业感和用户体验。
+
+## 二、配色方案
+
+| 颜色名称 | 色值 | 用途 |
+|---------|------|------|
+| 京东红 | `#e4393c` | 主按钮、选中态、强调色 |
+| 深红 | `#c81623` | 悬停状态 |
+| 背景灰 | `#f5f5f5` | 页面背景、表头背景 |
+| 边框灰 | `#e5e5e5` | 分割线、边框 |
+| 文字深 | `#333333` | 主标题文字 |
+| 文字中 | `#666666` | 正文、表头文字 |
+| 文字浅 | `#999999` | 辅助文字 |
+| 白色 | `#ffffff` | 卡片背景、内容区 |
+| 链接蓝 | `#005ea7` | 可点击链接 |
+
+## 三、改造范围
+
+### 3.1 全局样式(影响所有页面)
+- [ ] 顶部导航栏(蓝色 → 京东红)
+- [ ] 左侧菜单(深色 → 白色)
+- [ ] 页面背景(白色 → 灰色)
+- [ ] 按钮样式(Element默认 → 京东风格)
+- [ ] 表格样式(标准 → 京东订单风格)
+- [ ] 分页器样式
+
+### 3.2 订单模块页面(重点改造)
+- [ ] 待发订单页面
+- [ ] 在途订单页面
+- [ ] 历史订单页面
+- [ ] 结单时间管理页面
+
+### 3.3 其他业务页面(同步调整)
+- [ ] 物料管理页面
+- [ ] 甲方报价页面
+- [ ] 供应商报价页面
+- [ ] 客户管理页面
+
+## 四、详细改造清单
+
+### 第一阶段:全局基础样式(1-2天)
+
+#### 4.1.1 创建主题变量文件
+**文件**: `ruoyi-ui/src/styles/jd-variables.scss`
+
+```scss
+// 京东配色
+$jd-red: #e4393c;
+$jd-red-dark: #c81623;
+$jd-red-light: #fff5f5;
+$bg-gray: #f5f5f5;
+$border-gray: #e5e5e5;
+$border-light: #f0f0f0;
+$text-dark: #333333;
+$text-medium: #666666;
+$text-light: #999999;
+$link-blue: #005ea7;
+
+// 覆盖Element变量
+$--color-primary: $jd-red;
+$--color-primary-light-1: $jd-red-light;
+$--color-primary-light-9: $jd-red-light;
+$--background-color-base: $bg-gray;
+$--color-text-primary: $text-dark;
+$--color-text-regular: $text-medium;
+$--color-text-secondary: $text-light;
+$--border-color-base: $border-gray;
+$--border-color-light: $border-light;
+```
+
+#### 4.1.2 顶部导航栏改造
+**文件**: `ruoyi-ui/src/layout/components/Navbar.vue` 或全局样式
+
+**改造点**:
+- 背景色: `#e4393c` (京东红)
+- 高度: 50px
+- Logo区域: 白色文字,加粗
+- 导航菜单: 白色文字,透明背景
+- 选中/悬停: 深色背景 `rgba(0,0,0,0.1)`
+- 右侧工具栏: 白色图标
+
+#### 4.1.3 左侧菜单改造
+**文件**: `ruoyi-ui/src/layout/components/Sidebar/index.vue` 或全局样式
+
+**改造点**:
+- 背景: 白色 `#ffffff`
+- 宽度: 160px (紧凑)
+- 一级菜单:
+ - 高度: 40px
+ - 文字: `#666666`
+ - 悬停: 文字变红 `#e4393c`,背景 `#fff5f5`
+ - 选中: 文字红色,左边框3px红色
+- 二级菜单:
+ - 高度: 32px
+ - 缩进: 35px
+ - 字号: 13px
+
+#### 4.1.4 页面内容区改造
+**文件**: 全局样式
+
+**改造点**:
+- 背景: `#f5f5f5` (灰色)
+- 内边距: 15px
+- 卡片容器: 白色背景,1px边框 `#e5e5e5`
+
+#### 4.1.5 按钮样式覆盖
+**文件**: 全局样式
+
+**改造点**:
+- 主按钮:
+ - 背景: `#e4393c`
+ - 边框: `#e4393c`
+ - 圆角: 2px
+ - 悬停: `#c81623`
+- 次按钮:
+ - 边框: `#e5e5e5`
+ - 文字: `#666666`
+ - 悬停: 边框和文字变红
+
+#### 4.1.6 表格样式覆盖
+**文件**: 全局样式
+
+**改造点**:
+- 表头:
+ - 背景: `#f5f5f5`
+ - 文字: `#666666`
+ - 高度: 32px
+ - 字重: normal (不加粗)
+- 表格行:
+ - 悬停: 背景 `#fff5f5` (浅红)
+ - 边框: 底部1px `#f0f0f0`
+- 链接:
+ - 颜色: `#005ea7` (蓝)
+ - 悬停: 红色+下划线
+- 金额:
+ - 颜色: `#e4393c` (红)
+ - 加粗
+
+#### 4.1.7 分页器样式
+**文件**: 全局样式
+
+**改造点**:
+- 页码按钮:
+ - 边框: 1px `#e5e5e5`
+ - 选中: 红色背景+白色文字
+ - 悬停: 红色边框+红色文字
+
+---
+
+### 第二阶段:订单模块页面改造(2-3天)
+
+#### 4.2.1 页面布局结构调整
+
+**改造前结构**:
+```
+统计卡片 (4个彩色卡片)
+搜索表单 (多行筛选条件)
+操作按钮栏
+数据表格
+分页器
+```
+
+**改造后结构** (京东风格):
+```
+页面标题 (如"我的订单")
+状态Tab (全部/待发/在途/历史 - 下划线式)
+筛选栏 (灰底,单行)
+ - 时间范围下拉
+ - 搜索输入框+搜索按钮
+ - 高级筛选
+数据表格 (白底)
+分页器
+```
+
+#### 4.2.2 状态Tab组件
+
+**样式要求**:
+- 横向排列,底部边框
+- 默认: 文字 `#666666`
+- 悬停: 文字变红
+- 选中:
+ - 文字红色加粗
+ - 底部2px红色下划线
+- 数量标记: 灰色小字 `(99)`
+
+#### 4.2.3 筛选栏样式
+
+**样式要求**:
+- 背景: `#f5f5f5`
+- 内边距: 15px
+- 元素间距: 15px
+- 下拉框: 白色背景,高度32px
+- 搜索框:
+ - 宽度300px
+ - 右侧红色搜索按钮
+- 高级筛选: 灰色文字,带下拉箭头
+
+#### 4.2.4 表格内容优化
+
+**字段展示优化**:
+- 订单号: 蓝色链接,可点击
+- 客户名称: 普通文字
+- 物料信息: 名称+规格(换行)
+- 金额: 红色加粗,右对齐
+- 状态: 彩色标签
+- 操作: 蓝色文字链接
+
+#### 4.2.5 空状态样式
+
+**样式要求**:
+- 居中显示
+- 图标: 120px
+- 文字: `#999999`,14px
+- 按钮: 红色主按钮
+
+---
+
+### 第三阶段:其他页面同步(1-2天)
+
+#### 4.3.1 物料管理页面
+- 统计卡片改为京东风格(白底+顶部彩色边框)
+- 搜索栏改为灰底单行
+- 表格应用新样式
+
+#### 4.3.2 报价页面(甲方/供应商)
+- 统计卡片改造
+- 表格样式统一
+- 按钮样式统一
+
+#### 4.3.3 客户管理页面
+- 列表样式统一
+- 详情页卡片样式
+
+---
+
+## 五、文件创建清单
+
+### 5.1 新建文件
+1. `ruoyi-ui/src/styles/jd-variables.scss` - 变量定义
+2. `ruoyi-ui/src/styles/jd-theme.scss` - 全局样式覆盖
+3. `ruoyi-ui/src/components/JdStatusTabs/index.vue` - 状态Tab组件
+4. `ruoyi-ui/src/components/JdFilterBar/index.vue` - 筛选栏组件
+
+### 5.2 修改文件
+1. `ruoyi-ui/src/styles/index.scss` - 引入新主题
+2. `ruoyi-ui/src/layout/components/Navbar.vue` - 顶部导航
+3. `ruoyi-ui/src/layout/components/Sidebar/index.vue` - 侧边菜单
+4. `ruoyi-ui/src/views/bid/order/*.vue` - 订单页面
+5. `ruoyi-ui/src/views/bid/material/*.vue` - 物料页面
+6. `ruoyi-ui/src/views/bid/clientquote/*.vue` - 甲方报价页面
+7. `ruoyi-ui/src/views/bid/quotation/*.vue` - 供应商报价页面
+
+---
+
+## 六、改造顺序建议
+
+```
+Day 1: 全局基础样式
+ - 创建变量文件
+ - 顶部导航改造
+ - 左侧菜单改造
+ - 按钮样式覆盖
+
+Day 2: 表格和分页
+ - 表格样式覆盖
+ - 分页器样式
+ - 页面背景调整
+
+Day 3: 订单模块
+ - 创建Tab组件
+ - 创建筛选栏组件
+ - 改造待发订单页面
+ - 改造在途订单页面
+
+Day 4: 订单模块+其他
+ - 改造历史订单页面
+ - 改造结单时间管理
+ - 物料管理页面同步
+
+Day 5: 收尾
+ - 报价页面同步
+ - 客户管理页面同步
+ - 细节调整
+```
+
+---
+
+## 七、验收标准
+
+### 7.1 视觉验收
+- [ ] 顶部导航为京东红 `#e4393c`
+- [ ] 左侧菜单为白色背景
+- [ ] 页面背景为灰色 `#f5f5f5`
+- [ ] 主按钮为红色,悬停变深红
+- [ ] 表格表头为灰色背景 `#f5f5f5`
+- [ ] 表格行悬停为浅红背景 `#fff5f5`
+- [ ] 金额为红色加粗
+- [ ] 链接为蓝色,悬停变红
+
+### 7.2 功能验收
+- [ ] 所有页面正常显示
+- [ ] 菜单点击正常
+- [ ] 表格排序/筛选正常
+- [ ] 分页功能正常
+- [ ] 按钮点击正常
+
+### 7.3 兼容性验收
+- [ ] Chrome浏览器正常
+- [ ] Edge浏览器正常
+- [ ] 不同分辨率适配
+
+---
+
+## 八、注意事项
+
+1. **渐进式改造**: 先改全局样式,再改页面结构
+2. **保留原文件**: 修改前备份原样式文件
+3. **变量优先**: 尽量使用变量,方便后续调整
+4. **测试验证**: 每改完一个模块就刷新验证
+5. **性能考虑**: 避免过多嵌套选择器
+
+---
+
+## 九、快速开始命令
+
+```bash
+# 1. 进入前端目录
+cd ruoyi-ui
+
+# 2. 安装依赖(如有新组件)
+npm install
+
+# 3. 启动开发服务器
+npm run serve
+
+# 4. 浏览器访问
+http://localhost:80
+```
+
+---
+
+**计划制定日期**: 2026-06-15
+**预计工期**: 5天
+**负责人**: 前端开发工程师
diff --git a/ruoyi-ui/src/assets/styles/element-variables.scss b/ruoyi-ui/src/assets/styles/element-variables.scss
index c5fb0d13..3f3d34d2 100644
--- a/ruoyi-ui/src/assets/styles/element-variables.scss
+++ b/ruoyi-ui/src/assets/styles/element-variables.scss
@@ -1,31 +1,42 @@
/**
-* I think element-ui's default theme color is too light for long-term use.
-* So I modified the default color and you can modify it to your liking.
-**/
+ * 京东风格 — Element UI 主题变量
+ * 主色改为京东红 #e4393c
+ */
-/* theme color */
-$--color-primary: #4A6FA5;
-$--color-success: #13ce66;
-$--color-warning: #ffba00;
-$--color-danger: #ff4949;
-// $--color-info: #1E1E1E;
+/* theme color - JD Red */
+$--color-primary: #e4393c;
+$--color-success: #67c23a;
+$--color-warning: #e6a23c;
+$--color-danger: #f56c6c;
+$--color-info: #909399;
$--button-font-weight: 400;
-// $--color-text-regular: #1f2d3d;
+$--color-text-primary: #333333;
+$--color-text-regular: #666666;
+$--color-text-secondary: #999999;
-$--border-color-light: #dfe4ed;
-$--border-color-lighter: #e6ebf5;
+$--border-color-base: #e5e5e5;
+$--border-color-light: #f0f0f0;
+$--border-color-lighter: #f0f0f0;
-$--table-border: 1px solid #dfe6ec;
+$--table-border: 1px solid #e5e5e5;
+$--table-header-background: #f5f5f5;
+$--table-header-font-color: #666666;
+$--table-row-hover-background: #fff5f5;
+
+/* 按钮 */
+$--button-default-border-color: #e5e5e5;
+$--button-default-font-color: #666666;
+
+/* 背景 */
+$--background-color-base: #f5f5f5;
/* icon font path, required */
$--font-path: '~element-ui/lib/theme-chalk/fonts';
@import "~element-ui/packages/theme-chalk/src/index";
-// the :export directive is the magic sauce for webpack
-// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
:export {
theme: $--color-primary;
}
diff --git a/ruoyi-ui/src/assets/styles/index.scss b/ruoyi-ui/src/assets/styles/index.scss
index f63a1b51..37715986 100644
--- a/ruoyi-ui/src/assets/styles/index.scss
+++ b/ruoyi-ui/src/assets/styles/index.scss
@@ -8,7 +8,7 @@
/* ═══════════════════════════════════════════
主题系统 — 取消注释即可切换
═══════════════════════════════════════════ */
-// @import './theme-jd.scss'; /* 京东红主题 */
+@import './theme-jd.scss'; /* 京东红主题 */
body {
height: 100%;
diff --git a/ruoyi-ui/src/assets/styles/jd-variables.scss b/ruoyi-ui/src/assets/styles/jd-variables.scss
new file mode 100644
index 00000000..c4557c2e
--- /dev/null
+++ b/ruoyi-ui/src/assets/styles/jd-variables.scss
@@ -0,0 +1,71 @@
+/* ═══════════════════════════════════════════════════════
+ 京东风格 — SCSS 变量定义
+ 供 element-ui 主题编译和组件内引用
+ ═══════════════════════════════════════════════════════ */
+
+// ═══ 京东品牌色 ═══
+$jd-red: #e4393c;
+$jd-red-dark: #c81623;
+$jd-red-light: #fff5f5;
+$jd-red-bg: #fff0f0;
+
+// ═══ 灰色系 ═══
+$bg-gray: #f5f5f5;
+$bg-dark: #333;
+$border-gray: #e5e5e5;
+$border-light: #f0f0f0;
+
+// ═══ 文字色 ═══
+$text-dark: #333333;
+$text-medium: #666666;
+$text-light: #999999;
+
+// ═══ 功能色 ═══
+$link-blue: #005ea7;
+$color-success: #67c23a;
+$color-warning: #e6a23c;
+$color-danger: #f56c6c;
+$color-info: #909399;
+
+// ═══ Element 主色(覆盖默认蓝色 → 京东红) ═══
+$--color-primary: $jd-red;
+$--color-primary-light-1: #fba0a2;
+$--color-primary-light-2: #f88;
+$--color-primary-light-3: #fad;
+$--color-primary-light-4: #fbcecf;
+$--color-primary-light-5: $jd-red-light;
+$--color-primary-light-6: $jd-red-light;
+$--color-primary-light-7: $jd-red-light;
+$--color-primary-light-8: $jd-red-light;
+$--color-primary-light-9: $jd-red-light;
+
+// ═══ 覆盖 Element 变量 ═══
+$--color-text-primary: $text-dark;
+$--color-text-regular: $text-medium;
+$--color-text-secondary: $text-light;
+$--color-text-placeholder: $text-light;
+
+$--border-color-base: $border-gray;
+$--border-color-light: $border-light;
+$--border-color-lighter: $border-light;
+$--border-color-extra-light: #fafafa;
+
+$--background-color-base: $bg-gray;
+
+// ═══ 表格变量 ═══
+$--table-header-background: $bg-gray;
+$--table-header-font-color: $text-medium;
+$--table-row-hover-background: $jd-red-light;
+
+// ═══ 按钮变量 ═══
+$--button-default-border-color: $border-gray;
+$--button-default-font-color: $text-medium;
+
+// ═══ 导出供 JS 使用 ═══
+:export {
+ jdRed: $jd-red;
+ jdRedDark: $jd-red-dark;
+ bgGray: $bg-gray;
+ textDark: $text-dark;
+ textMedium: $text-medium;
+}
diff --git a/ruoyi-ui/src/assets/styles/sidebar.scss b/ruoyi-ui/src/assets/styles/sidebar.scss
index 6c4f47d8..0cf74905 100644
--- a/ruoyi-ui/src/assets/styles/sidebar.scss
+++ b/ruoyi-ui/src/assets/styles/sidebar.scss
@@ -115,20 +115,22 @@
.el-menu-item.is-active {
position: relative;
+ font-weight: 700 !important;
&::before {
content: '';
position: absolute;
inset: 0;
- background-color: var(--current-color-dark-bg, rgba(64, 158, 255, 0.2));
- border-right: 3px solid var(--current-color, #409eff);
+ background-color: var(--current-color-dark-bg, rgba(228, 57, 60, 0.2));
+ border-right: 3px solid var(--current-color, #e4393c);
pointer-events: none;
z-index: 1;
}
}
.el-submenu.is-active > .el-submenu__title {
- color: var(--current-color, #409eff) !important;
+ color: var(--current-color, #e4393c) !important;
+ font-weight: 700 !important;
}
.el-menu-item:not(.is-active),
@@ -147,7 +149,7 @@
}
&:hover::before {
- background-color: var(--current-color-dark-bg, rgba(64, 158, 255, 0.2));
+ background-color: var(--current-color-dark-bg, rgba(228, 57, 60, 0.2));
}
}
}
@@ -163,29 +165,31 @@
}
.el-menu-item.is-active {
- color: var(--current-color, #409eff) !important;
+ color: var(--current-color, #e4393c) !important;
+ font-weight: 700 !important;
position: relative;
&::before {
content: '';
position: absolute;
inset: 0;
- background-color: var(--current-color-light, #ecf5ff);
- border-right: 3px solid var(--current-color, #409eff);
+ background-color: var(--current-color-light, #fff5f5);
+ border-right: 3px solid var(--current-color, #e4393c);
pointer-events: none;
z-index: 1;
}
}
.el-submenu.is-active > .el-submenu__title {
- color: var(--current-color, #409eff) !important;
+ color: var(--current-color, #e4393c) !important;
+ font-weight: 700 !important;
}
.el-menu-item:not(.is-active):hover,
.submenu-title-noDropdown:hover,
.el-submenu__title:hover {
- background-color: #f5f7fa !important;
- color: rgba(0, 0, 0, 0.85) !important;
+ background-color: #fff5f5 !important;
+ color: #e4393c !important;
}
.nest-menu .el-submenu > .el-submenu__title,
@@ -193,7 +197,8 @@
background-color: #fafafa !important;
&:hover {
- background-color: #f0f5ff !important;
+ background-color: #fff5f5 !important;
+ color: #e4393c !important;
}
}
}
diff --git a/ruoyi-ui/src/assets/styles/theme-jd.scss b/ruoyi-ui/src/assets/styles/theme-jd.scss
index 8d50515e..13184139 100644
--- a/ruoyi-ui/src/assets/styles/theme-jd.scss
+++ b/ruoyi-ui/src/assets/styles/theme-jd.scss
@@ -1,47 +1,57 @@
-/* ═══════════════════════════════════════════
- 京东风格主题 — CSS 变量定义
- 主色:红色 #E2231A
- 辅色:白色 + 银灰色
- 用途:替换页面中所有硬编码的颜色值
- ═══════════════════════════════════════════ */
+/* ═══════════════════════════════════════════════════════════════
+ 京东风格 — 全局主题(CSS 变量 + Element UI 覆盖)
+ 主色:#e4393c 深红:#c81623 背景灰:#f5f5f5
+ ═══════════════════════════════════════════════════════════════ */
:root {
/* ═══ 品牌色(京东红) ═══ */
- --brand-primary: #E2231A; /* 京东红 —— 主按钮、链接、选中态 */
- --brand-primary-hover: #C01623; /* 深红 —— hover、激活 */
- --brand-primary-light: #FFF0F0; /* 浅红背景 —— 选中行、标签浅色背景 */
+ --jd-red: #e4393c;
+ --jd-red-dark: #c81623;
+ --jd-red-hover: #e55a5d;
+ --jd-red-light: #fff5f5;
+ --jd-red-bg: #fff0f0;
- /* ═══ 银灰色(边框、背景、禁用) ═══ */
- --silver-border: #E0E0E0; /* 表格边框、卡片边框 */
- --silver-border-light: #F0F0F0; /* 更浅的边框 */
- --silver-bg: #F5F5F5; /* 页面背景、表头背景、卡片背景 */
- --silver-bg-light: #FAFAFA; /* 交替行背景、悬浮背景 */
- --silver-text: #9E9E9E; /* 禁用文字、placeholder、辅助信息 */
-
- /* ═══ 背景色 ═══ */
- --bg-white: #FFFFFF; /* 纯白 — 内容区、卡片、弹窗 */
- --bg-page: #F5F5F5; /* 页面底色 */
+ /* ═══ 灰色系 ═══ */
+ --bg-gray: #f5f5f5;
+ --bg-white: #ffffff;
+ --border-gray: #e5e5e5;
+ --border-light: #f0f0f0;
/* ═══ 文字色 ═══ */
- --text-primary: #333333; /* 主文字 —— 标题、表格数据 */
- --text-secondary: #666666; /* 次要文字 —— 说明、次要信息 */
- --text-muted: #999999; /* 弱化文字 —— 辅助信息 */
+ --text-dark: #333333;
+ --text-medium: #666666;
+ --text-light: #999999;
+
+ /* ═══ 功能色 ═══ */
+ --link-blue: #005ea7;
+ --color-success: #67c23a;
+ --color-warning: #e6a23c;
+ --color-danger: #f56c6c;
+ --color-info: #909399;
+
+ /* ═══ 兼容旧变量名(逐步迁移) ═══ */
+ --brand-primary: var(--jd-red);
+ --brand-primary-hover: var(--jd-red-dark);
+ --brand-primary-light: var(--jd-red-light);
+ --bg-page: var(--bg-gray);
+ --text-primary: var(--text-dark);
+ --text-secondary: var(--text-medium);
+ --text-muted: var(--text-light);
+ --silver-border: var(--border-gray);
+ --silver-bg: var(--bg-gray);
+ --silver-text: var(--text-light);
/* ═══ 金额色 ═══ */
- --color-amount: #E2231A; /* 金额 —— 京东红色 */
-
- /* ═══ 状态色 ═══ */
- --color-success: #67C23A; /* 成功绿 */
- --color-warning: #E6A23C; /* 警告橙 */
- --color-danger: #F56C6C; /* 危险红 */
+ --color-amount: var(--jd-red);
/* ═══ 圆角 ═══ */
- --radius-base: 4px; /* 常规圆角 */
- --radius-small: 2px; /* 小圆角 */
+ --radius-base: 2px;
+ --radius-small: 2px;
/* ═══ 阴影 ═══ */
- --shadow-card: 0 1px 4px rgba(0,0,0,0.06);
- --shadow-dialog: 0 4px 12px rgba(0,0,0,0.12);
+ --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.06);
+ --shadow-dialog: 0 4px 12px rgba(0, 0, 0, 0.12);
+ --shadow-nav: 0 1px 3px rgba(0, 0, 0, 0.1);
/* ═══ 间距 ═══ */
--space-xs: 4px;
@@ -51,33 +61,979 @@
--space-xl: 20px;
/* ═══ 表格 ═══ */
- --table-header-bg: #F5F5F5;
- --table-header-text: #333333;
- --table-row-hover: #FFF0F0; /* 浅红悬浮 */
- --table-stripe: #FAFAFA;
- --table-border: #E0E0E0;
+ --table-header-bg: #f5f5f5;
+ --table-header-text: #666666;
+ --table-row-hover: #f5f7fa;
+ --table-stripe: #fafafa;
+ --table-border: #e5e5e5;
- /* ═══ 搜索栏 / 卡片 ═══ */
- --card-bg: #FFFFFF;
- --card-border: #E0E0E0;
+ /* ═══ 导航 ═══ */
+ --nav-height: 50px;
+ --nav-bg: #f5f5f5;
+ --nav-text: #333333;
+ --nav-hover: rgba(0, 0, 0, 0.04);
+
+ /* ═══ 侧栏 ═══ */
+ --sidebar-width: 200px;
+ --sidebar-bg: #ffffff;
+ --sidebar-text: #666666;
+ --sidebar-text-active: #e4393c;
+ --sidebar-hover-bg: rgba(0, 0, 0, 0.04);
+ --sidebar-active-border: #e4393c;
+ --sidebar-sub-bg: #fafafa;
}
-/* ═══ 部分 Element UI 覆盖 ═══ */
+/* ═══════════════════════════════════════════
+ 页面基础
+ ═══════════════════════════════════════════ */
+body {
+ background: var(--bg-gray) !important;
+ color: var(--text-dark);
+}
+
+/* 主内容区背景 */
+.app-main,
+.app-container,
+.main-container {
+ background: var(--bg-gray);
+}
+
+/* 面包屑背景匹配 */
+.el-breadcrumb {
+ font-size: 13px;
+}
+
+/* ═══════════════════════════════════════════
+ 顶部导航栏
+ ═══════════════════════════════════════════ */
+.navbar {
+ background: #f5f5f5 !important;
+ border-bottom: 1px solid #e5e5e5 !important;
+ box-shadow: none !important;
+ height: var(--nav-height) !important;
+ color: #333 !important;
+
+ .hamburger-container svg {
+ color: #666 !important;
+ fill: #666 !important;
+ }
+
+ .hamburger-container:hover {
+ background: rgba(0, 0, 0, 0.04) !important;
+ }
+
+ .breadcrumb-container {
+ .el-breadcrumb__inner,
+ .el-breadcrumb__inner a,
+ .el-breadcrumb__separator {
+ color: #999 !important;
+ }
+ .el-breadcrumb__inner.is-link {
+ font-weight: 400 !important;
+ &:hover {
+ color: #e4393c !important;
+ }
+ }
+ }
+
+ .right-menu {
+ .right-menu-item {
+ color: #666 !important;
+ font-size: 16px !important;
+
+ &.hover-effect:hover {
+ color: #333 !important;
+ background: #f0f0f0 !important;
+ }
+
+ svg,
+ i {
+ color: #666 !important;
+ }
+ &:hover svg,
+ &:hover i {
+ color: #333 !important;
+ }
+ }
+
+ .avatar-container {
+ .user-nickname {
+ color: #333 !important;
+ font-weight: 500 !important;
+ }
+ .avatar-wrapper {
+ margin-top: 6px !important;
+ }
+ }
+
+ .el-dropdown {
+ color: #333 !important;
+ }
+
+ .el-badge__content {
+ border-color: #fff !important;
+ }
+ }
+
+ /* TopBar nav3 模式 */
+ .topbar-container {
+ .el-menu--horizontal {
+ background: transparent !important;
+ border-bottom: none !important;
+
+ .el-menu-item,
+ .el-submenu__title {
+ color: #666 !important;
+ background: transparent !important;
+ border-bottom: none !important;
+ height: var(--nav-height) !important;
+ line-height: var(--nav-height) !important;
+
+ &:hover {
+ color: #e4393c !important;
+ background: rgba(0, 0, 0, 0.03) !important;
+ }
+
+ &.is-active {
+ color: #e4393c !important;
+ background: transparent !important;
+ }
+ }
+ }
+ }
+}
+
+/* 返回顶部按钮 */
+.top-btn {
+ background: var(--jd-red) !important;
+ border-color: var(--jd-red) !important;
+}
+
+/* ═══════════════════════════════════════════
+ 左侧菜单
+ ═══════════════════════════════════════════ */
+.sidebar-container {
+ &.theme-light {
+ background: var(--sidebar-bg) !important;
+ border-right: 1px solid var(--border-gray) !important;
+ box-shadow: none !important;
+ width: var(--sidebar-width) !important;
+ }
+
+ .el-menu {
+ background: var(--sidebar-bg) !important;
+ border-right: none !important;
+ }
+
+ .el-menu-item,
+ .el-submenu__title {
+ color: var(--sidebar-text) !important;
+ height: 40px !important;
+ line-height: 40px !important;
+ font-size: 13px !important;
+
+ &:hover {
+ color: var(--sidebar-text) !important;
+ background: var(--sidebar-hover-bg) !important;
+ }
+
+ i, svg {
+ color: var(--sidebar-text) !important;
+ }
+ &:hover i,
+ &:hover svg {
+ color: var(--sidebar-text) !important;
+ }
+ }
+
+ .el-menu-item.is-active {
+ color: var(--sidebar-text-active) !important;
+ background: var(--sidebar-hover-bg) !important;
+ position: relative;
+
+ &::before {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: 0;
+ width: 3px;
+ background: var(--sidebar-active-border) !important;
+ z-index: 2;
+ }
+
+ i, svg {
+ color: var(--sidebar-text-active) !important;
+ }
+ }
+
+ .el-submenu.is-active > .el-submenu__title {
+ color: var(--sidebar-text-active) !important;
+ }
+
+ /* 子菜单 */
+ .el-submenu .el-menu {
+ background: var(--sidebar-sub-bg) !important;
+ }
+
+ .el-submenu .el-menu-item {
+ padding-left: 42px !important;
+ height: 34px !important;
+ line-height: 34px !important;
+ font-size: 12px !important;
+ color: var(--text-medium) !important;
+
+ &:hover {
+ color: var(--text-medium) !important;
+ background: var(--sidebar-hover-bg) !important;
+ }
+
+ &.is-active {
+ color: var(--sidebar-text-active) !important;
+ background: var(--sidebar-hover-bg) !important;
+
+ &::before {
+ display: none;
+ }
+ }
+ }
+
+ /* Logo */
+ .sidebar-logo {
+ background: var(--sidebar-bg) !important;
+ border-bottom: 1px solid var(--border-gray) !important;
+
+ .sidebar-logo-title {
+ color: var(--text-dark) !important;
+ font-size: 15px !important;
+ font-weight: 700;
+ }
+ }
+
+ /* 折叠状态 */
+ .el-menu--collapse {
+ .el-menu-item,
+ .el-submenu__title {
+ padding-left: 16px !important;
+ }
+ }
+}
+
+/* ═══════════════════════════════════════════
+ 按钮样式 — 银灰风格
+ ═══════════════════════════════════════════ */
+/* 主按钮 — 银灰色 */
.el-button--primary {
- background-color: var(--brand-primary) !important;
- border-color: var(--brand-primary) !important;
-}
-.el-button--primary:hover,
-.el-button--primary:focus {
- background-color: var(--brand-primary-hover) !important;
- border-color: var(--brand-primary-hover) !important;
+ background: #909399 !important;
+ border: 1px solid #909399 !important;
+ color: #fff !important;
+ border-radius: var(--radius-base) !important;
+ transition: all 0.2s;
+
+ &:hover,
+ &:focus {
+ background: #6b7280 !important;
+ border-color: #6b7280 !important;
+ }
+
+ &:active {
+ background: #4b5563 !important;
+ border-color: #4b5563 !important;
+ }
+
+ &.is-disabled,
+ &.is-disabled:hover {
+ background: #d1d5db !important;
+ border-color: #d1d5db !important;
+ }
+
+ &.is-plain {
+ background: #fff !important;
+ border-color: #909399 !important;
+ color: #909399 !important;
+
+ &:hover {
+ background: #909399 !important;
+ color: #fff !important;
+ }
+ }
}
-.el-table thead th {
- background-color: var(--table-header-bg) !important;
- color: var(--table-header-text) !important;
+/* 次要按钮 */
+.el-button--default {
+ background: var(--bg-white) !important;
+ border: 1px solid var(--border-gray) !important;
+ color: var(--text-medium) !important;
+ border-radius: var(--radius-base) !important;
+ transition: all 0.2s;
+
+ &:hover,
+ &:focus {
+ border-color: var(--jd-red) !important;
+ color: var(--jd-red) !important;
+ }
+
+ &:active {
+ border-color: var(--jd-red-dark) !important;
+ color: var(--jd-red-dark) !important;
+ }
}
-.el-table__body .el-table__row:hover td {
- background-color: var(--table-row-hover) !important;
+/* 文字按钮(表格操作列链接) */
+.el-button--text {
+ color: var(--text-dark) !important;
+ border: none !important;
+ background: transparent !important;
+ padding: 0 !important;
+ height: auto !important;
+ line-height: normal !important;
+
+ &:hover {
+ color: var(--jd-red) !important;
+ text-decoration: underline;
+ }
+}
+
+/* 成功/危险/警告按钮统一圆角 */
+.el-button--success,
+.el-button--danger,
+.el-button--warning,
+.el-button--info {
+ border-radius: var(--radius-base) !important;
+}
+
+/* 小按钮紧凑 */
+.el-button--mini {
+ padding: 5px 10px !important;
+ font-size: 12px !important;
+}
+
+.el-button--small {
+ padding: 7px 12px !important;
+ font-size: 12px !important;
+}
+
+/* ═══════════════════════════════════════════
+ 表格样式 — 京东订单风格(紧凑单行)
+ ═══════════════════════════════════════════ */
+.el-table {
+ border: 1px solid var(--border-gray) !important;
+ border-bottom: none !important;
+ font-size: 12px !important;
+ table-layout: fixed !important;
+
+ /* 表头 */
+ thead th {
+ background: var(--table-header-bg) !important;
+ color: var(--table-header-text) !important;
+ font-weight: 500 !important;
+ font-size: 11px !important;
+ border-bottom: 1px solid var(--border-gray) !important;
+ padding: 4px 6px !important;
+ white-space: nowrap !important;
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+ }
+
+ /* 表体 */
+ td {
+ color: var(--text-dark) !important;
+ font-size: 12px !important;
+ padding: 4px 6px !important;
+ border-bottom: 1px solid var(--border-light) !important;
+ white-space: nowrap !important;
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+ }
+
+ /* cell 内部无换行 */
+ .cell {
+ white-space: nowrap !important;
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+ line-height: 1.4 !important;
+ padding-left: 2px !important;
+ padding-right: 2px !important;
+ }
+
+ /* 行悬停 */
+ .el-table__body .el-table__row:hover td {
+ background: var(--table-row-hover) !important;
+ }
+
+ /* 斑马纹 */
+ &.el-table--striped {
+ .el-table__body tr.el-table__row--striped td {
+ background: var(--table-stripe) !important;
+ }
+ .el-table__body tr.el-table__row--striped:hover td {
+ background: var(--table-row-hover) !important;
+ }
+ }
+
+ /* 取消边框表格内部双线 */
+ &.el-table--border {
+ th,
+ td {
+ border-right: 1px solid var(--border-gray) !important;
+ }
+ }
+
+ /* 空状态 */
+ .el-table__empty-text {
+ color: var(--text-light) !important;
+ font-size: 13px;
+ }
+
+ /* 筛选列样式 */
+ .el-table__column-filter-trigger i {
+ color: var(--text-light) !important;
+ }
+
+ /* 表格内部按钮/标签紧凑 */
+ .el-tag,
+ .el-button--mini,
+ .el-button--small {
+ white-space: nowrap !important;
+ }
+
+ /* el-switch 紧凑 */
+ .el-switch {
+ height: 18px !important;
+ line-height: 18px !important;
+ }
+ .el-switch__core {
+ height: 14px !important;
+ width: 36px !important;
+ }
+ .el-switch__core::after {
+ width: 10px !important;
+ height: 10px !important;
+ }
+
+ /* el-avatar 紧凑 */
+ .el-avatar--small {
+ width: 22px !important;
+ height: 22px !important;
+ line-height: 22px !important;
+ }
+}
+
+/* 金额列红字加粗 */
+.amount,
+.amount-cell,
+.el-table td .amount {
+ color: var(--jd-red) !important;
+ font-weight: 700 !important;
+ font-size: 12px !important;
+}
+
+/* 标签内部按钮文本不折行 */
+.el-table .el-button--text {
+ white-space: nowrap !important;
+ overflow: visible !important;
+}
+
+/* 表格所在容器禁止横向滚动 */
+.app-container,
+.jd-table-wrap,
+.jd-order-page,
+.cq-page,
+.cd-page,
+.client-manage {
+ overflow-x: hidden !important;
+}
+
+/* 金额列红字加粗 */
+.amount,
+.amount-cell,
+.el-table td .amount {
+ color: var(--jd-red) !important;
+ font-weight: 700 !important;
+ font-size: 13px !important;
+}
+
+/* 蓝色链接样式 */
+.link-type,
+.order-link {
+ color: var(--link-blue) !important;
+ cursor: pointer;
+ transition: color 0.2s;
+
+ &:hover {
+ color: var(--jd-red) !important;
+ text-decoration: underline;
+ }
+}
+
+/* ═══════════════════════════════════════════
+ 分页器样式
+ ═══════════════════════════════════════════ */
+.el-pagination {
+ padding: 14px 5px !important;
+ font-weight: 400 !important;
+ color: var(--text-medium) !important;
+
+ .el-pager {
+ li {
+ border: 1px solid var(--border-gray) !important;
+ border-radius: var(--radius-base) !important;
+ margin: 0 2px !important;
+ min-width: 28px !important;
+ height: 28px !important;
+ line-height: 28px !important;
+ font-size: 12px !important;
+ color: var(--text-medium) !important;
+ background: var(--bg-white) !important;
+
+ &:hover {
+ border-color: var(--jd-red) !important;
+ color: var(--jd-red) !important;
+ }
+
+ &.active {
+ background: var(--jd-red) !important;
+ border-color: var(--jd-red) !important;
+ color: #fff !important;
+ }
+ }
+ }
+
+ .el-pagination__btn {
+ border: 1px solid var(--border-gray) !important;
+ border-radius: var(--radius-base) !important;
+ min-width: 28px !important;
+ height: 28px !important;
+ line-height: 28px !important;
+ font-size: 12px !important;
+ color: var(--text-medium) !important;
+ background: var(--bg-white) !important;
+
+ &:hover {
+ border-color: var(--jd-red) !important;
+ color: var(--jd-red) !important;
+ }
+
+ &.is-disabled {
+ color: var(--text-light) !important;
+ border-color: var(--border-gray) !important;
+ }
+ }
+
+ .el-pagination__sizes {
+ .el-input__inner {
+ border-color: var(--border-gray) !important;
+ border-radius: var(--radius-base) !important;
+ height: 28px !important;
+ line-height: 28px !important;
+ font-size: 12px !important;
+ }
+ }
+
+ .el-pagination__total,
+ .el-pagination__jump {
+ font-size: 12px !important;
+ color: var(--text-medium) !important;
+ }
+}
+
+/* ═══════════════════════════════════════════
+ 输入框/选择器样式
+ ═══════════════════════════════════════════ */
+.el-input__inner,
+.el-select .el-input__inner,
+.el-textarea__inner {
+ border: 1px solid var(--border-gray) !important;
+ border-radius: var(--radius-base) !important;
+ transition: all 0.2s;
+ color: var(--text-dark) !important;
+
+ &:focus {
+ border-color: var(--jd-red) !important;
+ }
+
+ &:hover {
+ border-color: var(--jd-red) !important;
+ }
+}
+
+.el-input.is-disabled .el-input__inner {
+ background: var(--bg-gray) !important;
+ border-color: var(--border-light) !important;
+ color: var(--text-light) !important;
+}
+
+.el-input__prefix,
+.el-input__suffix {
+ color: var(--text-light) !important;
+}
+
+/* 下拉框选项选中 */
+.el-select-dropdown__item.selected {
+ color: var(--sidebar-text-active) !important;
+ font-weight: 600 !important;
+}
+
+/* ═══════════════════════════════════════════
+ 日期选择器
+ ═══════════════════════════════════════════ */
+.el-date-editor {
+ .el-input__inner {
+ border-radius: var(--radius-base) !important;
+ }
+
+ &:hover .el-input__inner {
+ border-color: var(--jd-red) !important;
+ }
+}
+
+.el-date-table td.today {
+ color: var(--jd-red) !important;
+ font-weight: 700 !important;
+}
+
+.el-date-table td.current:not(.disabled) span {
+ background: var(--jd-red) !important;
+}
+
+/* ═══════════════════════════════════════════
+ Tabs 样式
+ ═══════════════════════════════════════════ */
+.el-tabs__item {
+ color: var(--text-medium) !important;
+ font-size: 13px !important;
+ font-weight: 400 !important;
+ padding: 0 14px !important;
+ height: 38px !important;
+ line-height: 38px !important;
+
+ &:hover {
+ color: var(--jd-red) !important;
+ }
+
+ &.is-active {
+ color: var(--jd-red) !important;
+ font-weight: 700 !important;
+ }
+}
+
+.el-tabs__active-bar {
+ background: var(--jd-red) !important;
+ height: 2px !important;
+}
+
+.el-tabs__nav-wrap::after {
+ height: 1px !important;
+ background: var(--border-gray) !important;
+}
+
+/* ═══════════════════════════════════════════
+ Tag 标签
+ ═══════════════════════════════════════════ */
+.el-tag {
+ border-radius: var(--radius-small) !important;
+ border: none !important;
+ font-size: 12px !important;
+ padding: 0 6px !important;
+ height: 22px !important;
+ line-height: 22px !important;
+}
+
+.el-tag--warning {
+ background: #fdf6ec !important;
+ color: #e6a23c !important;
+}
+.el-tag--primary {
+ background: #ecf5ff !important;
+ color: #409eff !important;
+}
+.el-tag--success {
+ background: #f0f9eb !important;
+ color: #67c23a !important;
+}
+.el-tag--danger {
+ background: #fef0f0 !important;
+ color: #f56c6c !important;
+}
+.el-tag--info {
+ background: #f4f4f5 !important;
+ color: #909399 !important;
+}
+
+/* ═══════════════════════════════════════════
+ 卡片/面板
+ ═══════════════════════════════════════════ */
+.el-card {
+ border: 1px solid var(--border-gray) !important;
+ border-radius: var(--radius-base) !important;
+ box-shadow: none !important;
+}
+
+.el-card__body {
+ padding: 14px 16px !important;
+}
+
+/* ═══════════════════════════════════════════
+ Dialog 弹窗
+ ═══════════════════════════════════════════ */
+.el-dialog {
+ border-radius: var(--radius-base) !important;
+ box-shadow: var(--shadow-dialog);
+}
+
+.el-dialog__header {
+ padding: 14px 20px !important;
+ border-bottom: 1px solid var(--border-gray) !important;
+
+ .el-dialog__title {
+ font-size: 15px !important;
+ font-weight: 700 !important;
+ color: var(--text-dark) !important;
+ }
+
+ .el-dialog__headerbtn {
+ font-size: 16px !important;
+ top: 14px !important;
+ right: 16px !important;
+
+ .el-dialog__close {
+ color: var(--text-light) !important;
+ &:hover {
+ color: var(--jd-red) !important;
+ }
+ }
+ }
+}
+
+.el-dialog__body {
+ padding: 16px 20px !important;
+}
+
+.el-dialog__footer {
+ padding: 10px 20px 14px !important;
+ border-top: 1px solid var(--border-light) !important;
+}
+
+/* ═══════════════════════════════════════════
+ 下拉菜单 Dropdown
+ ═══════════════════════════════════════════ */
+.el-dropdown-menu {
+ border: 1px solid var(--border-gray) !important;
+ border-radius: var(--radius-base) !important;
+ box-shadow: var(--shadow-dialog) !important;
+ padding: 4px 0 !important;
+
+ .el-dropdown-menu__item {
+ font-size: 13px !important;
+ color: var(--text-medium) !important;
+ padding: 6px 18px !important;
+
+ &:hover {
+ background: var(--jd-red-light) !important;
+ color: var(--jd-red) !important;
+ }
+ }
+}
+
+/* ═══════════════════════════════════════════
+ 表单样式
+ ═══════════════════════════════════════════ */
+.el-form-item__label {
+ color: var(--text-medium) !important;
+ font-weight: 500 !important;
+ font-size: 13px !important;
+}
+
+.el-form-item {
+ margin-bottom: 16px !important;
+}
+
+/* ═══════════════════════════════════════════
+ 消息/通知
+ ═══════════════════════════════════════════ */
+.el-message {
+ border-radius: var(--radius-base) !important;
+ border-color: var(--border-gray) !important;
+ box-shadow: var(--shadow-dialog) !important;
+}
+
+/* ═══════════════════════════════════════════
+ Loading 加载
+ ═══════════════════════════════════════════ */
+.el-loading-spinner .path {
+ stroke: var(--jd-red) !important;
+}
+
+.el-loading-spinner .el-loading-text {
+ color: var(--jd-red) !important;
+}
+
+/* ═══════════════════════════════════════════
+ 步骤条
+ ═══════════════════════════════════════════ */
+.el-steps--simple {
+ border-radius: var(--radius-base) !important;
+ border: 1px solid var(--border-gray) !important;
+ padding: 10px 16px !important;
+}
+
+/* ═══════════════════════════════════════════
+ Switch 开关
+ ═══════════════════════════════════════════ */
+.el-switch.is-checked .el-switch__core {
+ background: var(--jd-red) !important;
+ border-color: var(--jd-red) !important;
+}
+
+/* ═══════════════════════════════════════════
+ Radio 单选
+ ═══════════════════════════════════════════ */
+.el-radio__input.is-checked .el-radio__inner {
+ background: var(--jd-red) !important;
+ border-color: var(--jd-red) !important;
+}
+
+.el-radio__input.is-checked + .el-radio__label {
+ color: var(--jd-red) !important;
+}
+
+/* ═══════════════════════════════════════════
+ Checkbox 复选
+ ═══════════════════════════════════════════ */
+.el-checkbox__input.is-checked .el-checkbox__inner {
+ background: var(--jd-red) !important;
+ border-color: var(--jd-red) !important;
+}
+
+.el-checkbox__input.is-checked + .el-checkbox__label {
+ color: var(--jd-red) !important;
+}
+
+/* ═══════════════════════════════════════════
+ Tooltip 提示
+ ═══════════════════════════════════════════ */
+.el-tooltip__popper {
+ border-radius: var(--radius-base) !important;
+}
+
+/* ═══════════════════════════════════════════
+ 空状态
+ ═══════════════════════════════════════════ */
+.el-empty__description p {
+ color: var(--text-light) !important;
+}
+
+/* ═══════════════════════════════════════════
+ Badge 徽标
+ ═══════════════════════════════════════════ */
+.el-badge__content {
+ border-radius: 8px !important;
+ font-size: 11px !important;
+ padding: 0 5px !important;
+}
+
+/* ═══════════════════════════════════════════
+ 横向滚动条
+ ═══════════════════════════════════════════ */
+::-webkit-scrollbar {
+ width: 6px;
+ height: 6px;
+}
+
+::-webkit-scrollbar-track {
+ background: transparent;
+}
+
+::-webkit-scrollbar-thumb {
+ background: #d0d0d0;
+ border-radius: 3px;
+
+ &:hover {
+ background: #b0b0b0;
+ }
+}
+
+/* ═══════════════════════════════════════════
+ 淡入动画
+ ═══════════════════════════════════════════ */
+.fade-in {
+ animation: fadeIn 0.2s ease-in;
+}
+
+@keyframes fadeIn {
+ from { opacity: 0; transform: translateY(4px); }
+ to { opacity: 1; transform: translateY(0); }
+}
+
+/* ═══════════════════════════════════════════
+ 统计卡片统一样式
+ ═══════════════════════════════════════════ */
+.el-row.stat-row {
+ margin-bottom: 12px !important;
+}
+
+.stat-card {
+ background: var(--bg-white) !important;
+ border: 1px solid var(--border-gray) !important;
+ border-top: none !important;
+ border-radius: var(--radius-base) !important;
+ padding: 12px 16px !important;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ &:hover {
+ box-shadow: var(--shadow-card);
+ }
+
+ .stat-num {
+ font-size: 22px !important;
+ font-weight: 400 !important;
+ color: var(--text-dark) !important;
+ line-height: 1.2;
+ }
+
+ .stat-lbl {
+ font-size: 12px !important;
+ font-weight: 400 !important;
+ color: var(--text-light) !important;
+ margin-top: 2px;
+ }
+
+ .stat-icon {
+ font-size: 22px !important;
+ opacity: 0.35;
+ }
+}
+
+/* ═══════════════════════════════════════════
+ 旧品牌色迁移 — 将所有 #409EFF(Element 默认蓝)
+ 自动转为京东红,覆盖 inline style 和 class
+ ═══════════════════════════════════════════ */
+.amount,
+[style*="color:#409EFF"],
+[style*="color: #409EFF"],
+[style*="color:#409eff"],
+[style*="background:#409EFF"],
+[style*="background: #409EFF"] {
+ color: var(--jd-red) !important;
+}
+
+/* 迁移蓝色背景 */
+[style*="background: linear-gradient(180deg, #409eff"] {
+ background: var(--jd-red) !important;
+}
+
+/* 迁移蓝色边框 */
+[style*="border-color: #409eff"],
+[style*="border-color:#409eff"],
+[style*="border-left: 4px solid #409EFF"],
+[style*="border-bottom:2px solid #409EFF"] {
+ border-color: var(--jd-red) !important;
+}
+
+/* 迁移蓝色 border-left 变体 */
+[style*="border-left: 3px solid #409eff"],
+[style*="border-left: 4px solid #409eff"] {
+ border-left-color: var(--jd-red) !important;
}
diff --git a/ruoyi-ui/src/assets/styles/variables.scss b/ruoyi-ui/src/assets/styles/variables.scss
index 5fb5eea7..9a895150 100644
--- a/ruoyi-ui/src/assets/styles/variables.scss
+++ b/ruoyi-ui/src/assets/styles/variables.scss
@@ -21,7 +21,7 @@ $base-logo-light-title-color: #4A6FA5;
$base-sub-menu-background: #111a27;
$base-sub-menu-hover: rgba(17,113,196,.08);
-$base-sidebar-width: 210px;
+$base-sidebar-width: 200px;
:export {
menuColor: $base-menu-color;
diff --git a/ruoyi-ui/src/components/HeaderSearch/index.vue b/ruoyi-ui/src/components/HeaderSearch/index.vue
index 94aa95b8..68db9a38 100644
--- a/ruoyi-ui/src/components/HeaderSearch/index.vue
+++ b/ruoyi-ui/src/components/HeaderSearch/index.vue
@@ -250,7 +250,7 @@ export default {
}
.highlight {
- color: red;
+ color: var(--brand-primary);
font-weight: 600;
}
@@ -258,6 +258,15 @@ export default {
color: rgba(255, 255, 255, 0.9);
font-weight: 600;
}
+
+ .el-input__inner {
+ border: 1px solid var(--silver-border) !important;
+ border-radius: var(--radius-base) !important;
+ transition: all 0.2s;
+ &:focus {
+ border-color: var(--brand-primary) !important;
+ }
+ }
}
.header-search {
@@ -265,16 +274,18 @@ export default {
cursor: pointer;
font-size: 18px;
vertical-align: middle;
+ transition: color 0.2s;
+ &:hover { color: var(--brand-primary); }
}
}
.result-count {
padding: 6px 16px 0;
font-size: 12px;
- color: #aaa;
+ color: var(--text-muted);
strong {
- color: red;
+ color: var(--brand-primary);
font-weight: 600;
}
}
@@ -288,7 +299,7 @@ export default {
height: 48px;
align-items: center;
padding-right: 10px;
- border-radius: 4px;
+ border-radius: var(--radius-base);
transition: background 0.15s;
.left {
@@ -321,15 +332,13 @@ export default {
}
.menu-path {
- color: #ccc;
+ color: var(--silver-text);
font-size: 10px;
}
}
}
- .search-item:hover {
- cursor: pointer;
- }
+ .search-item:hover { cursor: pointer; }
.empty-state {
display: flex;
@@ -338,27 +347,9 @@ export default {
justify-content: center;
height: 100%;
- .empty-icon {
- font-size: 42px;
- color: #e0e0e0;
- margin-bottom: 14px;
- }
-
- .empty-text {
- font-size: 14px;
- color: #999;
- margin: 0 0 6px;
-
- strong {
- color: #666;
- }
- }
-
- .empty-tip {
- font-size: 12px;
- color: #bbb;
- margin: 0;
- }
+ .empty-icon { font-size: 42px; color: var(--silver-border); margin-bottom: 14px; }
+ .empty-text { font-size: 14px; color: var(--text-muted); margin: 0 0 6px; strong { color: var(--text-secondary); } }
+ .empty-tip { font-size: 12px; color: var(--silver-border); margin: 0; }
}
}
@@ -367,15 +358,11 @@ export default {
align-items: center;
gap: 28px;
padding: 10px 20px;
- border-top: 1px solid #f0f0f0;
- color: #999;
+ border-top: 1px solid var(--silver-border);
+ color: var(--text-muted);
font-size: 12px;
- .shortcut-item {
- display: flex;
- align-items: center;
- gap: 5px;
- }
+ .shortcut-item { display: flex; align-items: center; gap: 5px; }
kbd {
display: inline-flex;
@@ -384,14 +371,14 @@ export default {
min-width: 20px;
height: 20px;
padding: 0 5px;
- border: 1px solid #ddd;
- border-radius: 4px;
- background: #f7f7f7;
- color: #555;
+ border: 1px solid var(--silver-border);
+ border-radius: var(--radius-base);
+ background: var(--silver-bg);
+ color: var(--text-secondary);
font-size: 11px;
font-family: inherit;
line-height: 1;
- box-shadow: 0 1px 0 #ccc;
+ box-shadow: 0 1px 0 var(--silver-border);
}
}
\ No newline at end of file
diff --git a/ruoyi-ui/src/components/JdFilterBar/index.vue b/ruoyi-ui/src/components/JdFilterBar/index.vue
new file mode 100644
index 00000000..39c46751
--- /dev/null
+++ b/ruoyi-ui/src/components/JdFilterBar/index.vue
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
diff --git a/ruoyi-ui/src/components/JdStatusTabs/index.vue b/ruoyi-ui/src/components/JdStatusTabs/index.vue
new file mode 100644
index 00000000..c713391e
--- /dev/null
+++ b/ruoyi-ui/src/components/JdStatusTabs/index.vue
@@ -0,0 +1,104 @@
+
+