1620 lines
69 KiB
Markdown
1620 lines
69 KiB
Markdown
# 深蓝色 UI 规范 · 02 表单(§14–§21)
|
||
|
||
> 《深蓝色 UI 规范》分册之一。基础令牌见 `00-基础-色彩字体间距.md`,可 import 的变量见 `tokens.css`,总目录与 §索引见 `README.md`。`§N` 编号全局唯一。
|
||
|
||
**本篇目录**:`14` 输入框 · `15` 选择器 · `16` 单选与多选 · `17` 日期选择器 · `18` 穿梭框 · `19` 树选择 · `20` 上传 · `21` 弹出式窗口
|
||
|
||
---
|
||
|
||
## 14. 输入框(搜索框)
|
||
|
||
> 对应设计稿「输入框.png」。按使用场景分三类:**基本搜索框 / 后台系统搜索框 / 页面头部搜索框**。配色全部从 ZS-002 主色蓝与 ZS-004 深蓝系取。
|
||
|
||
### 14.1 公共规格
|
||
|
||
所有搜索框共用同一套尺寸 / 边框规格:
|
||
|
||
| 属性 | 默认(正常) | 小号 |
|
||
|------|--------------|------|
|
||
| 高度 | `32px` | `28px` |
|
||
| 水平 padding | `--spacing-3` (12px) | `--spacing-2` (8px) |
|
||
| 圆角 | `2px`(§4.1) | `2px` |
|
||
| 字号 | `14px Regular` | `14px Regular` |
|
||
| 文字色 | `#C5CFE0` (ZS-004-02) | 同 |
|
||
| 占位符色 | `#6E88B0` (ZS-004-04) | 同 |
|
||
| 背景 | `#0C1836` (ZS-004-09) | 同 |
|
||
|
||
#### 14.1.1 边框状态
|
||
|
||
| 状态 | 边框 | 来源 |
|
||
|------|------|------|
|
||
| 默认 | `1px solid #1A2F5A` | ZS-004-07 |
|
||
| Hover | `1px solid #4096FF` | ZS-002-05 |
|
||
| Focus | `1px solid #1677FF` + 外发光 `0 0 0 2px rgba(22,119,255,0.16)` | ZS-002-06 |
|
||
| 失效 | `1px solid #2D4473`,背景 `rgba(22,119,255,0.04)` | ZS-004-06 |
|
||
| 错误 | `1px solid #F5222D` + 外发光 `0 0 0 2px rgba(245,34,45,0.16)` | ZS-001-06 |
|
||
|
||
### 14.2 基本搜索框
|
||
|
||
#### 14.2.1 基础搜索框
|
||
|
||
输入框尾部带 🔍 图标,回车或点击图标触发搜索:
|
||
|
||
```
|
||
[ 搜索 🔍 ]
|
||
```
|
||
|
||
| 角色 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 搜索图标 🔍 | `16px`,`#6E88B0` | ZS-004-04 |
|
||
| 图标 hover | `#4096FF` | ZS-002-05 |
|
||
| 图标 → 输入边缘间距 | `--spacing-2` (8px) | — |
|
||
|
||
#### 14.2.2 分类搜索框(带前缀下拉)
|
||
|
||
输入框左侧拼一个分类下拉,常用于「按协议搜 IP」等场景:
|
||
|
||
```
|
||
[ http:// ▾ ] [ 搜索 IP 地址 🔍 ]
|
||
```
|
||
|
||
| 角色 | 色值 / 规格 | 备注 |
|
||
|------|-------------|------|
|
||
| 前缀下拉宽度 | `auto`,最小 `72px` | 内容自适应 |
|
||
| 前缀下拉与输入框 | 共用同一组边框,**中间无缝**(公用一条 `1px #1A2F5A` 分隔) | 视为一体控件 |
|
||
| 前缀下拉箭头 `▾` | `12px`,`#6E88B0` | hover → `#4096FF` |
|
||
| 整体 focus 行为 | 焦点落到输入框时,**前缀下拉的边框也同步高亮** | — |
|
||
|
||
### 14.3 后台系统常用搜索框
|
||
|
||
输入框 + 紧贴右侧的**实心蓝色搜索按钮**,常用于后台主内容区列表筛选:
|
||
|
||
```
|
||
[ 🔍 搜索任务集名称/负责人 ] [ 搜索 ]
|
||
```
|
||
|
||
#### 14.3.1 规格
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 左侧搜索图标 🔍 | `16px`,`#6E88B0` | ZS-004-04 |
|
||
| 图标 → 文字间距 | `--spacing-2` (8px) | — |
|
||
| 输入框右边框 | **无**(与按钮无缝拼接) | — |
|
||
| 按钮 | 沿用 §5.2.1 主按钮,圆角 `2px`,文字 `搜索` | — |
|
||
| 按钮高度 | 与输入框一致 `32px` | — |
|
||
| 按钮左侧 | 与输入框紧贴,**无间距** | — |
|
||
|
||
### 14.4 页面头部搜索框
|
||
|
||
页头位置的搜索控件,支持四种扩展:**单行 / 高级搜索 / 历史记录 / 输入联想**。
|
||
|
||
#### 14.4.1 单行(最简)
|
||
|
||
```
|
||
[ 输入的文字 ] [ 搜索 ]
|
||
```
|
||
|
||
规格同 §14.3,仅省略左侧 🔍 图标,让输入文字占满。
|
||
|
||
#### 14.4.2 含高级搜索切换
|
||
|
||
右侧叠加一个文字按钮「高级搜索 ▾」,展开后显示模式选项:
|
||
|
||
```
|
||
[ 输入的文字 ] [ 搜索 ] 高级搜索 ▾
|
||
○ 模糊匹配 ● 精准匹配
|
||
```
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 「高级搜索 ▾」文字按钮 | `14px Regular`,`#4096FF`,hover `#1677FF` | ZS-002-05 → ZS-002-06 |
|
||
| 「高级搜索」与「搜索」按钮间距 | `--spacing-3` (12px) | — |
|
||
| 单选项「模糊匹配 / 精准匹配」 | 沿用通用 Radio 配色:未选 `1px solid #6E88B0`,已选实心 `#1677FF` | — |
|
||
| 单选项 → 搜索框纵向间距 | `--spacing-2` (8px) | — |
|
||
|
||
#### 14.4.3 含历史记录
|
||
|
||
输入框下方显示最近搜索词列表,点击直接用该词搜索:
|
||
|
||
```
|
||
[ 输入的文字 ] [ 搜索 ]
|
||
|
||
搜索记录词、搜索记录词、记录词
|
||
```
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 历史记录文字 | `12px Regular`,`#4096FF` | ZS-002-05 |
|
||
| 项间分隔符(顿号 `、`) | `#4A6491` | ZS-004-05(与文字色不同,弱化分隔) |
|
||
| 历史项 hover | `#1677FF` + 下划线 | ZS-002-06 |
|
||
| 历史区与搜索框纵向间距 | `--spacing-2` (8px) | — |
|
||
|
||
#### 14.4.4 含输入联想下拉
|
||
|
||
用户输入时,下方弹出联想词面板:
|
||
|
||
```
|
||
[ 这是 ] [ 搜索 ]
|
||
┌─────────────────────────────────┐
|
||
│ 这是搜索输入联想词 │
|
||
│ 这是搜索输入联想词 │
|
||
│ 这是搜索输入联想词 │
|
||
│ 这是联想词 │
|
||
│ 这是联想词悬浮 ←hovered │
|
||
│ …… │
|
||
└─────────────────────────────────┘
|
||
```
|
||
|
||
##### 面板规格
|
||
|
||
| 属性 | 取值 |
|
||
|------|------|
|
||
| 背景 | `#122347` (ZS-004-08) |
|
||
| 边框 | `1px solid #1A2F5A` (ZS-004-07) |
|
||
| 阴影 | `0 4px 16px rgba(6, 14, 36, 0.6)`(§3.1.4 三级阴影变体) |
|
||
| 圆角 | `2px`(与输入框一致) |
|
||
| 项高度 | `36px` |
|
||
| 项水平 padding | `--spacing-3` (12px) |
|
||
| 项字号 | `14px Regular`,`#C5CFE0` (ZS-004-02) |
|
||
| 面板宽度 | 与输入框等宽(不含右侧按钮) |
|
||
| 面板与输入框纵向间距 | `--spacing-1` (4px) |
|
||
|
||
##### 项状态
|
||
|
||
| 状态 | 背景 | 文字 |
|
||
|------|------|------|
|
||
| 默认 | `transparent` | `#C5CFE0` |
|
||
| Hover(鼠标 / 键盘焦点) | `rgba(22,119,255,0.16)` 或 `#1A2F5A` (ZS-004-07) | `#FFFFFF` |
|
||
| 已点击(点选后回填输入框) | — | — |
|
||
|
||
##### 键盘导航
|
||
|
||
- `↑` / `↓` 在联想词之间移动焦点(焦点项视觉等价于 Hover)
|
||
- `Enter` 选中焦点项并回填输入框 + 触发搜索
|
||
- `Esc` 关闭面板,焦点回到输入框
|
||
|
||
#### 14.4.5 联想下拉 + 历史记录的关系
|
||
|
||
- **未输入时**:可显示历史记录(§14.4.3 横向展开形态)
|
||
- **开始输入时**:历史记录被联想下拉**取代**,不要并存
|
||
- **清空输入框**:回到历史记录显示
|
||
|
||
### 14.5 三种搜索框的选用决策
|
||
|
||
| 场景 | 选择 |
|
||
|------|------|
|
||
| 表单内 / 卡片内的辅助搜索 | §14.2.1 基础搜索框(图标内嵌) |
|
||
| 需要按类型 / 协议过滤的搜索 | §14.2.2 分类搜索框(带前缀下拉) |
|
||
| 后台列表 / 表格顶部筛选 | §14.3 后台搜索框(输入 + 实心按钮) |
|
||
| 页面头部全局搜索 | §14.4 页面头部搜索框(按需开启高级 / 历史 / 联想) |
|
||
|
||
### 14.6 CSS Token 参考
|
||
|
||
```css
|
||
:root {
|
||
--search-bg: #0C1836; /* ZS-004-09 */
|
||
--search-border: #1A2F5A; /* ZS-004-07 */
|
||
--search-border-hover: #4096FF; /* ZS-002-05 */
|
||
--search-border-focus: #1677FF; /* ZS-002-06 */
|
||
--search-border-error: #F5222D; /* ZS-001-06 */
|
||
--search-text: #C5CFE0; /* ZS-004-02 */
|
||
--search-placeholder: #6E88B0; /* ZS-004-04 */
|
||
--search-icon: #6E88B0;
|
||
--search-icon-hover: #4096FF;
|
||
|
||
/* 联想下拉 */
|
||
--suggest-bg: #122347; /* ZS-004-08 */
|
||
--suggest-item-hover: rgba(22,119,255,0.16);
|
||
--suggest-item-text: #C5CFE0;
|
||
--suggest-item-hover-text: #FFFFFF;
|
||
|
||
/* 历史记录 */
|
||
--history-text: #4096FF;
|
||
--history-text-hover: #1677FF;
|
||
--history-sep: #4A6491;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 15. 选择器(Select / Multi-Select / Cascader)
|
||
|
||
> 对应设计稿「多项选择.png」。覆盖**多项选择**与**多项带搜索**两种主要变体(基础单选选择器同规格,仅触发器不渲染 Tag、面板项不带复选框;级联选择器原则相同,差异在面板分栏横向铺开)。配色全部从 §1.1.3 渐蓝系(ZS-002)与 §1.1.5 深蓝系(ZS-004)取,与 §14 搜索框完全对齐。
|
||
|
||
### 15.1 公共规格
|
||
|
||
#### 15.1.1 触发器(Trigger)
|
||
|
||
触发器即「请选择 ▾」或「已选 Tag … ▾」那一行。尺寸、边框、状态机与 §14.1 输入框完全对齐:
|
||
|
||
| 属性 | 取值 | 来源 |
|
||
|------|------|------|
|
||
| 高度 | `32px` | §14.1 |
|
||
| 圆角 | `2px` | §4.1 |
|
||
| 水平 padding | `--spacing-3` (12px) | §7.1 |
|
||
| 背景 | `#0C1836` (ZS-004-09) | — |
|
||
| 边框 | `1px solid #1A2F5A` (ZS-004-07) | — |
|
||
| 占位文字 "请选择" | `14px Regular`,`#6E88B0` (ZS-004-04) | — |
|
||
| 右侧箭头 `▾` | `12px`,`#6E88B0`,hover `#4096FF` | ZS-002-05 |
|
||
|
||
边框状态机(默认 / hover / focus / 失效 / 错误)直接复用 §14.1.1。
|
||
|
||
#### 15.1.2 下拉面板(Panel)
|
||
|
||
面板沿用 §14.4.4 联想下拉的容器规格,仅项内容不同:
|
||
|
||
| 属性 | 取值 |
|
||
|------|------|
|
||
| 背景 | `#122347` (ZS-004-08) |
|
||
| 边框 | `1px solid #1A2F5A` (ZS-004-07) |
|
||
| 阴影 | `0 4px 16px rgba(6, 14, 36, 0.6)`(§3.1.4 三级阴影) |
|
||
| 圆角 | `2px` |
|
||
| 项高度 | `36px` |
|
||
| 项水平 padding | `--spacing-3` (12px) |
|
||
| 项字号 | `14px Regular`,`#C5CFE0` (ZS-004-02) |
|
||
| 面板宽度 | 与触发器等宽(搜索框、底部按钮均内嵌等宽) |
|
||
| 面板与触发器纵向间距 | `--spacing-1` (4px) |
|
||
|
||
#### 15.1.3 项状态
|
||
|
||
| 状态 | 背景 | 文字 |
|
||
|------|------|------|
|
||
| 默认 | `transparent` | `#C5CFE0` (ZS-004-02) |
|
||
| Hover / 键盘焦点 | `rgba(22,119,255,0.16)` 或 `#1A2F5A` | `#FFFFFF` |
|
||
| 已选中 | `transparent`(依赖左侧复选框示态,不改行底色) | `#FFFFFF` |
|
||
| 禁用 | `transparent` | `#4A6491` (ZS-004-05) |
|
||
|
||
点击行的任意位置等价于点击复选框(命中区 = 整行)。
|
||
|
||
---
|
||
|
||
### 15.2 多项选择
|
||
|
||
> 触发器内渲染**已选 Tag 列表**而不是单行文字;面板项左侧带**复选框**,多选不关闭面板。
|
||
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ n1 × n2 × +1 × ▾ │ ← 触发器(已选 Tag)
|
||
└─────────────────────────────────────┘
|
||
┌─────────────────────────────────────┐ ← 下拉面板
|
||
│ ☑ n1 │
|
||
│ ☐ n2 │
|
||
│ ☐ n3 │
|
||
│ ☐ n4 │
|
||
│ ☐ n5 │
|
||
├─────────────────────────────────────┤
|
||
│ [+ 添加项] │ ← 可选:底部「添加」按钮(§15.2.4)
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
#### 15.2.1 已选 Tag
|
||
|
||
触发器内每个已选项渲染为一颗 Tag。**实心主色蓝底 + 白字**,右侧带关闭按钮 `×`。
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 背景 | `#1677FF` (ZS-002-06) | — |
|
||
| 文字 | `12px Regular`,`#FFFFFF` | — |
|
||
| 圆角 | `2px` | — |
|
||
| 内边距 | `2px 6px` | — |
|
||
| Tag 间距 | `--spacing-1` (4px) | §7.1 |
|
||
| 关闭按钮 `×` | `12px`,`rgba(255,255,255,0.72)`,hover `#FFFFFF` | — |
|
||
| 折叠展示 `+N ×` | 当选中超过宽度可容纳时,把剩余 N 项收成一颗 `+N ×` Tag。Hover 显示 Tooltip 列出剩余项名;点击 `×` 清空溢出选项 | — |
|
||
|
||
#### 15.2.2 复选项
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 复选框尺寸 | `14px × 14px` | — |
|
||
| 复选框圆角 | `2px` | — |
|
||
| 未选边框 | `1px solid #6E88B0` (ZS-004-04) | — |
|
||
| 未选背景 | `transparent` | — |
|
||
| 已选填充 | `#1677FF` (ZS-002-06) | — |
|
||
| 已选勾 ✓ | `#FFFFFF`,描边 `2px` | — |
|
||
| 半选填充 | `#1677FF` | — |
|
||
| 半选指示 | 中央横线 `width 8px / height 2px / #FFFFFF` | — |
|
||
| Hover 边框 | `#4096FF` (ZS-002-05) | — |
|
||
| 禁用边框 | `#4A6491` (ZS-004-05) + 背景 `rgba(22,119,255,0.04)` | — |
|
||
| 复选框 → 文字间距 | `--spacing-2` (8px) | §7.1 |
|
||
|
||
#### 15.2.3 全选模式(顶部「全部」节点)
|
||
|
||
面板首行可选地渲染一个「全部」聚合节点,作用类似一次性勾 / 取消所有项:
|
||
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ ▢ 全部 │ ← 半选 / 未选 / 全选三态
|
||
│ ☑ n1 │
|
||
│ ☐ n2 │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
| 子状态 | 复选框外观 | 触发动作 |
|
||
|--------|-----------|----------|
|
||
| 一个都没选 | 空心,边框 `#6E88B0` | 点击 → 勾上**全部**子项 |
|
||
| 部分选中 | 实心 `#1677FF` + 中央 `2px` 白色横线(半选) | 点击 → 勾上**全部**剩余未选 |
|
||
| 全部选中 | 实心 `#1677FF` + 白色勾 ✓ | 点击 → 清空全部 |
|
||
|
||
文字 "全部" 与下方项同色 `#C5CFE0`,不加粗。
|
||
|
||
#### 15.2.4 底部「+ 添加项」按钮
|
||
|
||
面板底部可选地嵌入一颗虚线主色按钮,常用于「在已知池子里允许用户**就地新增**一项」(如标签、自定义分类):
|
||
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ [+ 正常] │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 高度 | `32px`(与复选项行齐) | — |
|
||
| 边框 | `1px dashed #1677FF` (ZS-002-06) | — |
|
||
| 背景 | `transparent` | — |
|
||
| 文字 | `14px Regular`,`#4096FF` (ZS-002-05) | — |
|
||
| 前缀图标 `+` | `12px`,与文字同色 | — |
|
||
| Hover | 背景 `rgba(22,119,255,0.16)`,文字 `#1677FF` | ZS-002-05 → ZS-002-06 |
|
||
| Active | 背景 `rgba(22,119,255,0.24)`,文字 `#FFFFFF` | — |
|
||
| 与最后一条复选项纵向分隔 | 上方分割线 `1px solid #1A2F5A` + `--spacing-1` (4px) 间距 | §6.1 |
|
||
|
||
点击行为由业务自行实现(如弹出输入框、内联编辑)。
|
||
|
||
---
|
||
|
||
### 15.3 多项带搜索
|
||
|
||
> 在 §15.2 基础上,**面板顶部嵌入一行搜索框**,输入时实时过滤复选项列表。其它结构(已选 Tag / 复选项 / 全选 / 底部添加)完全沿用 §15.2。
|
||
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ n1 × +1 × ▾ │
|
||
└─────────────────────────────────────┘
|
||
┌─────────────────────────────────────┐
|
||
│ [ 搜索 🔍 ] │ ← 嵌入式搜索框(§15.3.1)
|
||
├─────────────────────────────────────┤
|
||
│ ▢ 全部 │
|
||
│ ☑ n1 │
|
||
│ ☐ n2 │
|
||
│ ☐ n3 │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
#### 15.3.1 嵌入式搜索框
|
||
|
||
搜索框尺寸采用 §14.1 公共规格的**小号**(高度 28px),保持与面板视觉上的"嵌入感":
|
||
|
||
| 属性 | 取值 |
|
||
|------|------|
|
||
| 高度 | `28px`(小号) |
|
||
| 水平 padding | `--spacing-2` (8px) |
|
||
| 圆角 | `2px` |
|
||
| 背景 | `#0C1836` (ZS-004-09,比面板背景深一档) |
|
||
| 边框 | `1px solid #1A2F5A` (ZS-004-07) |
|
||
| 文字 | `14px Regular`,`#C5CFE0` |
|
||
| 占位符 | "搜索",`#6E88B0` |
|
||
| 右侧 🔍 / ⊗ 图标 | `14px`,`#6E88B0`,hover `#4096FF` |
|
||
| 搜索框 → 列表项纵向间距 | `--spacing-2` (8px) + 分割线 `1px solid #1A2F5A` |
|
||
|
||
输入非空时右侧图标切换为 `⊗`(清空),点击清空输入并恢复完整列表。
|
||
|
||
#### 15.3.2 加载与空状态
|
||
|
||
异步获取选项(如远程搜索)时,列表区按以下规则渲染:
|
||
|
||
| 状态 | 渲染 |
|
||
|------|------|
|
||
| 加载中 | 文字 "加载中…",单行居左,`14px Regular`,`#6E88B0`,行高 `32px` |
|
||
| 无匹配 | 文字 "无匹配项",同上 |
|
||
| 网络错误 | 文字 "加载失败,点击重试",`#FF7875` (ZS-001-04),可点击 |
|
||
|
||
---
|
||
|
||
### 15.4 选用决策
|
||
|
||
| 场景 | 选择 |
|
||
|------|------|
|
||
| 候选池 ≤ 10 项,单值 | §15.1 公共规格 + 去掉复选框(基础单选) |
|
||
| 候选池 ≤ 10 项,多值 | §15.2 多项选择 |
|
||
| 候选池 > 10 项 / 不可枚举 | §15.3 多项带搜索 |
|
||
| 候选池有层级关系(如部门 / 区域) | 级联选择器:每级独立面板横向铺开,单级内部规格同 §15.1~15.3 |
|
||
| 允许用户**新增不在候选池**的项 | 在 §15.2 / §15.3 末尾启用 §15.2.4「+ 添加项」按钮 |
|
||
|
||
---
|
||
|
||
### 15.5 CSS Token 参考
|
||
|
||
```css
|
||
:root {
|
||
/* 触发器 —— 复用 §14 搜索框 */
|
||
--select-trigger-bg: var(--search-bg); /* #0C1836 */
|
||
--select-trigger-border: var(--search-border); /* #1A2F5A */
|
||
--select-trigger-placeholder: var(--search-placeholder); /* #6E88B0 */
|
||
--select-trigger-arrow: #6E88B0;
|
||
--select-trigger-arrow-hover: #4096FF;
|
||
|
||
/* 下拉面板 —— 复用 §14.4.4 联想 */
|
||
--select-panel-bg: var(--suggest-bg); /* #122347 */
|
||
--select-panel-border: #1A2F5A;
|
||
--select-item-text: var(--suggest-item-text); /* #C5CFE0 */
|
||
--select-item-hover-bg: var(--suggest-item-hover); /* rgba(22,119,255,0.16) */
|
||
--select-item-hover-text: var(--suggest-item-hover-text); /* #FFFFFF */
|
||
--select-item-disabled: #4A6491; /* ZS-004-05 */
|
||
|
||
/* 已选 Tag */
|
||
--select-tag-bg: #1677FF; /* ZS-002-06 */
|
||
--select-tag-text: #FFFFFF;
|
||
--select-tag-close: rgba(255,255,255,0.72);
|
||
--select-tag-close-hover: #FFFFFF;
|
||
|
||
/* 复选框 */
|
||
--check-border: #6E88B0; /* ZS-004-04 */
|
||
--check-border-hover: #4096FF; /* ZS-002-05 */
|
||
--check-fill: #1677FF; /* ZS-002-06 */
|
||
--check-mark: #FFFFFF;
|
||
--check-disabled-border: #4A6491; /* ZS-004-05 */
|
||
--check-disabled-bg: rgba(22,119,255,0.04);
|
||
|
||
/* 底部「+ 添加项」 */
|
||
--select-add-border: #1677FF; /* ZS-002-06 */
|
||
--select-add-text: #4096FF; /* ZS-002-05 */
|
||
--select-add-hover-bg: rgba(22,119,255,0.16);
|
||
--select-add-hover-text: #1677FF;
|
||
--select-add-active-bg: rgba(22,119,255,0.24);
|
||
--select-add-active-text: #FFFFFF;
|
||
|
||
/* 加载 / 错误 */
|
||
--select-loading-text: #6E88B0;
|
||
--select-error-text: #FF7875; /* ZS-001-04 */
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 16. 单选与多选(Radio / Checkbox)
|
||
|
||
> 对应设计稿「多选框.png」。本章定义独立作为表单字段使用的**单选(Radio)**和**多选(Checkbox)**两类原子控件,包含**未选 / 已选 / 未选禁用 / 已选禁用**四种状态。§15.2.2「多项选择的复选项」中的复选框直接复用本章 §16.3 规格,本章是单一真源。
|
||
|
||
### 16.1 公共规格
|
||
|
||
| 属性 | 取值 |
|
||
|------|------|
|
||
| 控件尺寸 | `14px × 14px` |
|
||
| 控件描边宽度 | `1px` |
|
||
| 控件 → 文字间距 | `--spacing-2` (8px)(§7.1) |
|
||
| 文字字号 | `14px Regular` |
|
||
| 行高 | `20px`(点击命中区与文字垂直对齐) |
|
||
| 同一组**横向相邻**项的间距 | `--spacing-6` (24px)(§7.1) |
|
||
| 同一组**纵向相邻**项的间距 | `--spacing-3` (12px)(§7.1) |
|
||
|
||
整行(控件 + 文字)任意位置可点击 = 等效切换该项状态。
|
||
|
||
---
|
||
|
||
### 16.2 单选(Radio)
|
||
|
||
> 一组互斥选项中只能选中一个。视觉为圆形描边 + 内圆实心点。
|
||
|
||
```
|
||
○ 未选 ● 已选 ○ 未选禁用 ● 已选禁用
|
||
(整组降饱和)
|
||
```
|
||
|
||
#### 16.2.1 外观规格
|
||
|
||
| 状态 | 外环 | 内圆 | 文字 |
|
||
|------|------|------|------|
|
||
| 未选 | `1px solid #4096FF` (ZS-002-05) + 背景 `transparent` | — | `#C5CFE0` (ZS-004-02) |
|
||
| 未选 Hover | `1px solid #1677FF` (ZS-002-06) | — | `#FFFFFF` |
|
||
| 已选 | `1px solid #1677FF` (ZS-002-06) | 中心实心圆 `6px × 6px`,`#1677FF` | `#FFFFFF` |
|
||
| 已选 Focus | 外环外加 `0 0 0 2px rgba(22,119,255,0.16)` 焦点环 | — | `#FFFFFF` |
|
||
| 未选禁用 | `1px solid #4A6491` (ZS-004-05) + 背景 `rgba(22,119,255,0.04)` | — | `#4A6491` |
|
||
| 已选禁用 | `1px solid #4A6491` (ZS-004-05) | 中心实心圆 `6px × 6px`,`#4A6491` | `#4A6491` |
|
||
|
||
外环与内圆均为正圆(`border-radius: 50%`)。
|
||
|
||
#### 16.2.2 与 label 组合使用
|
||
|
||
「基本使用-组合」场景:选中某 Radio 项后,**下方展开关联输入字段**(如 Antd 的 Form.Item 嵌入式组合)。
|
||
|
||
```
|
||
● 已选
|
||
|
||
lable: [ ]
|
||
lable: [ ]
|
||
```
|
||
|
||
| 元素 | 规格 |
|
||
|------|------|
|
||
| Radio → 下方第一行 label 纵向间距 | `--spacing-3` (12px)(§7.1) |
|
||
| 嵌入字段左缩进 | 与 Radio 文字左边缘对齐(即外环宽 14px + 间距 8px = **22px 左缩进**) |
|
||
| 嵌入字段的 label 与 input | 沿用 §14.1 输入框规格 |
|
||
| 嵌入区分组背景 | 可选地用 `#1A2F5A` (ZS-004-07) 作浅色卡片底色,强化"属于该 Radio"的视觉归属 |
|
||
|
||
---
|
||
|
||
### 16.3 多选(Checkbox)
|
||
|
||
> 多个选项可同时选中,互不影响。视觉为方形描边 + 内填勾 ✓。
|
||
|
||
```
|
||
☐ 未选 ☑ 已选 ☐ 未选禁用 ☑ 已选禁用
|
||
(整组降饱和)
|
||
```
|
||
|
||
#### 16.3.1 外观规格
|
||
|
||
| 状态 | 边框 / 背景 | 勾 ✓ | 文字 |
|
||
|------|------------|------|------|
|
||
| 未选 | `1px solid #4096FF` (ZS-002-05) + 背景 `transparent` | — | `#C5CFE0` (ZS-004-02) |
|
||
| 未选 Hover | `1px solid #1677FF` (ZS-002-06) | — | `#FFFFFF` |
|
||
| 已选 | 实心填充 `#1677FF` (ZS-002-06) | `#FFFFFF`,描边 `2px` | `#FFFFFF` |
|
||
| 已选 Focus | 外加 `0 0 0 2px rgba(22,119,255,0.16)` 焦点环 | `#FFFFFF` | `#FFFFFF` |
|
||
| 半选 | 实心填充 `#1677FF` (ZS-002-06) | 中央横线 `8px × 2px`,`#FFFFFF` | `#FFFFFF` |
|
||
| 未选禁用 | `1px solid #4A6491` (ZS-004-05) + 背景 `rgba(22,119,255,0.04)` | — | `#4A6491` |
|
||
| 已选禁用 | 实心填充 `#4A6491` (ZS-004-05) | `#C5CFE0` 或 `rgba(255,255,255,0.4)` | `#4A6491` |
|
||
|
||
复选框统一圆角 `2px`(§4.1)。
|
||
|
||
#### 16.3.2 与 label 组合使用
|
||
|
||
与 §16.2.2 完全一致 —— Checkbox 选中后下方展开嵌入式输入字段,缩进与间距规格相同(左缩进 22px、纵向间距 12px)。
|
||
|
||
```
|
||
☑ 已选
|
||
|
||
lable: [ ]
|
||
lable: [ ]
|
||
```
|
||
|
||
---
|
||
|
||
### 16.4 状态对照表
|
||
|
||
| 状态 | Radio 外环 | Radio 内圆 | Checkbox 外框 | Checkbox 勾 | 文字 |
|
||
|------|-----------|-----------|--------------|------------|------|
|
||
| 未选 | `#4096FF` 描边 | — | `#4096FF` 描边 | — | `#C5CFE0` |
|
||
| Hover | `#1677FF` 描边 | — | `#1677FF` 描边 | — | `#FFFFFF` |
|
||
| 已选 | `#1677FF` 描边 | `#1677FF` 6px 圆 | `#1677FF` 填充 | `#FFFFFF` ✓ | `#FFFFFF` |
|
||
| 半选(仅 Checkbox) | — | — | `#1677FF` 填充 | `#FFFFFF` 横线 | `#FFFFFF` |
|
||
| Focus | + `0 0 0 2px rgba(22,119,255,0.16)` | — | + `0 0 0 2px rgba(22,119,255,0.16)` | — | `#FFFFFF` |
|
||
| 未选禁用 | `#4A6491` 描边 | — | `#4A6491` 描边 | — | `#4A6491` |
|
||
| 已选禁用 | `#4A6491` 描边 | `#4A6491` 6px 圆 | `#4A6491` 填充 | `#C5CFE0` ✓ | `#4A6491` |
|
||
|
||
---
|
||
|
||
### 16.5 与 §15.2.2 的关系
|
||
|
||
§15.2.2「多项选择面板内的复选项」直接复用本章 §16.3 的复选框外观规格,**唯一差异**:
|
||
|
||
- 在多项选择下拉面板里,**未选状态边框**是 `#6E88B0` (ZS-004-04,更"灰"的占位色),而非本章 §16.3 默认的 `#4096FF`(更"蓝"的强调色)
|
||
- 原因:下拉面板里项数多,所有复选框同时蓝色描边会过于喧闹;独立表单字段里数量少(通常 2–4 项),用强调色更醒目
|
||
|
||
如需统一也可以全面采用本章规格 —— 二选一即可,但**一个项目内部应保持一致**。
|
||
|
||
---
|
||
|
||
### 16.6 CSS Token 参考
|
||
|
||
```css
|
||
:root {
|
||
/* 公共 */
|
||
--field-size: 14px;
|
||
--field-border-w: 1px;
|
||
--field-radius: 2px; /* 仅 Checkbox 用 */
|
||
--field-text: #C5CFE0; /* ZS-004-02 */
|
||
--field-text-hover: #FFFFFF;
|
||
--field-text-disabled: #4A6491; /* ZS-004-05 */
|
||
--field-focus-ring: 0 0 0 2px rgba(22,119,255,0.16);
|
||
|
||
/* Radio */
|
||
--radio-border: #4096FF; /* ZS-002-05 */
|
||
--radio-border-hover: #1677FF; /* ZS-002-06 */
|
||
--radio-border-checked: #1677FF;
|
||
--radio-dot: #1677FF; /* 中心 6×6 实心 */
|
||
--radio-border-disabled: #4A6491; /* ZS-004-05 */
|
||
--radio-dot-disabled: #4A6491;
|
||
--radio-bg-disabled: rgba(22,119,255,0.04);
|
||
|
||
/* Checkbox */
|
||
--checkbox-border: #4096FF; /* ZS-002-05 */
|
||
--checkbox-border-hover: #1677FF; /* ZS-002-06 */
|
||
--checkbox-fill-checked: #1677FF; /* ZS-002-06 */
|
||
--checkbox-mark: #FFFFFF;
|
||
--checkbox-border-disabled: #4A6491; /* ZS-004-05 */
|
||
--checkbox-fill-disabled: #4A6491;
|
||
--checkbox-mark-disabled: #C5CFE0;
|
||
--checkbox-bg-disabled: rgba(22,119,255,0.04);
|
||
|
||
/* 组合:嵌入式 label + 输入框(§16.2.2 / §16.3.2) */
|
||
--field-group-indent: 22px; /* 14px 控件 + 8px 间距 */
|
||
--field-group-gap-y: var(--spacing-3); /* 12px */
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 17. 日期选择器(DatePicker)
|
||
|
||
> 对应设计稿「日期时间筛选框.png」。覆盖**单日期选择**与**日期范围选择**两种场景。面板包含**左侧快捷模式**(按天 / 按周 / 按月 / 自定义)、**起止输入区**、**双月日历主体**、**底部确认按钮**四块。配色全部从 §1.1.3 渐蓝系(ZS-002)与 §1.1.5 深蓝系(ZS-004)取,与 §14 搜索框 / §15 选择器完全对齐。
|
||
|
||
### 17.1 触发器(Trigger)
|
||
|
||
触发器即「2021-12-09 📅」那一行。规格与 §14.1 输入框完全一致:
|
||
|
||
| 属性 | 取值 | 来源 |
|
||
|------|------|------|
|
||
| 高度 | `32px` | §14.1 |
|
||
| 圆角 | `2px` | §4.1 |
|
||
| 水平 padding | `--spacing-3` (12px) | §7.1 |
|
||
| 背景 | `#0C1836` (ZS-004-09) | — |
|
||
| 边框 | `1px solid #1A2F5A` (ZS-004-07) | — |
|
||
| 默认日期文字 | `14px Regular`,`#C5CFE0` (ZS-004-02);占位时 "请选择日期" 用 `#6E88B0` (ZS-004-04) | — |
|
||
| 右侧 📅 图标 | `14px`,`#6E88B0`,hover `#4096FF` | ZS-002-05 |
|
||
|
||
边框状态机(默认 / hover / focus / 失效 / 错误)直接复用 §14.1.1。
|
||
|
||
**范围选择**触发器变体:宽度自动延展,内显示 `2021-12-09 至 2022-01-09`。
|
||
|
||
---
|
||
|
||
### 17.2 下拉面板(Panel)
|
||
|
||
面板为**左 + 右**两栏组合:
|
||
|
||
```
|
||
┌──────────┬───────────────────────────────────────────────────────┐
|
||
│ 按天 › │ [ 2021-12-09 ⊗ ] 至 [ 2021-12-09 ⊗ ] │
|
||
│ 按周 › ├───────────────────────────────────────────────────────┤
|
||
│ 按月 › │ « < 2021 年 12 月 > » « < 2022 年 1 月 > » │
|
||
│ 自定义 │ 日 一 二 三 四 五 六 日 一 二 三 四 五 六 │
|
||
│ │ 29 30 1 2 3 4 5 29 30 1 2 3 4 5 │
|
||
│ │ 6 7 8 ⓿ 10 11 12 6 7 8 ⓿ 10 11 12 │
|
||
│ │ 13 14 ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ │
|
||
│ │ 20 ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ │
|
||
│ │ 27 ▓▓ ▓▓ ▓▓ ▓▓ 1 2 3 4 5 6 7 8 9 │
|
||
│ │ 3 4 5 6 7 8 9 …… │
|
||
│ ├───────────────────────────────────────────────────────┤
|
||
│ │ [确定] [取消] │
|
||
└──────────┴───────────────────────────────────────────────────────┘
|
||
⓿ = 起止日(实心蓝圆) ▓▓ = 范围内(浅蓝底矩形)
|
||
```
|
||
|
||
#### 17.2.1 面板容器规格
|
||
|
||
| 属性 | 取值 |
|
||
|------|------|
|
||
| 背景 | `#122347` (ZS-004-08) |
|
||
| 边框 | `1px solid #1A2F5A` (ZS-004-07) |
|
||
| 阴影 | `0 4px 16px rgba(6, 14, 36, 0.6)`(§3.1.4 三级阴影) |
|
||
| 圆角 | `2px` |
|
||
| 与触发器纵向间距 | `--spacing-1` (4px) |
|
||
| 整体宽度 | 由左栏宽 `80px` + 右栏(双月并列)自适应得出 |
|
||
| 左右栏分隔线 | `1px solid #1A2F5A`(ZS-004-07) |
|
||
|
||
---
|
||
|
||
### 17.3 左侧快捷模式(Sidebar)
|
||
|
||
| 属性 | 取值 |
|
||
|------|------|
|
||
| 宽度 | `80px` |
|
||
| 项高度 | `36px` |
|
||
| 水平 padding | `--spacing-3` (12px) |
|
||
| 字号 | `14px Regular` |
|
||
| 右侧 `›` 图标(除"自定义"外) | `12px`,与文字同色 |
|
||
|
||
#### 17.3.1 项状态
|
||
|
||
| 状态 | 背景 | 文字 |
|
||
|------|------|------|
|
||
| 默认 | `transparent` | `#C5CFE0` (ZS-004-02) |
|
||
| Hover | `rgba(22,119,255,0.16)` | `#FFFFFF` |
|
||
| 已选 | `#1677FF` (ZS-002-06) | `#FFFFFF` |
|
||
|
||
#### 17.3.2 四种模式语义
|
||
|
||
| 模式 | 行为 |
|
||
|------|------|
|
||
| 按天 | 点击日期格 → 立即选中单日,关闭面板,触发器显示该日 |
|
||
| 按周 | hover 任意日期格 → **整周高亮**,点击 → 选中该周 |
|
||
| 按月 | 切换到月视图(日期格变成 12 个月名),点击 → 选中该月 |
|
||
| 自定义 | 默认显示双月日历,支持选中起止日做范围(详见 §17.5) |
|
||
|
||
---
|
||
|
||
### 17.4 起止日期输入区(Range Inputs)
|
||
|
||
仅在**自定义模式**下显示在右栏顶部:
|
||
|
||
```
|
||
[ 2021-12-09 ⊗ ] 至 [ 2021-12-09 ⊗ ]
|
||
```
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 输入框 | 沿用 §14.1 公共规格,宽度 `132px`,**只读**(点击日历格回填,不直接输入) | §14.1 |
|
||
| 中间 "至" 文字 | `14px Regular`,`#6E88B0` (ZS-004-04),左右 padding `--spacing-3` (12px) | — |
|
||
| 右侧 `⊗` 清空按钮 | `14px`,`#6E88B0`,hover `#4096FF` | ZS-002-05 |
|
||
| 输入区 → 日历主体纵向间距 | `--spacing-3` (12px) + 分割线 `1px solid #1A2F5A` | §6.1 |
|
||
| 整行右内 padding | `--spacing-4` (16px) | §7.1 |
|
||
|
||
未选起 / 止时对应输入框留空显示占位 "开始日期" / "结束日期"(`#6E88B0`)。
|
||
|
||
---
|
||
|
||
### 17.5 双月日历主体(Calendar Grid)
|
||
|
||
并列展示**当月**与**下月**两张日历,便于跨月选范围。
|
||
|
||
#### 17.5.1 标题栏
|
||
|
||
```
|
||
« < 2021 年 12 月 > »
|
||
```
|
||
|
||
| 元素 | 色值 / 规格 |
|
||
|------|-------------|
|
||
| 年月文字 | `14px Medium`,`#C5CFE0` (ZS-004-02) |
|
||
| 翻页箭头 `‹ ›` | `14px`,`#6E88B0`,hover `#4096FF` |
|
||
| 翻年箭头 `« »` | `14px`,`#6E88B0`,hover `#4096FF` |
|
||
| 标题栏高度 | `36px` |
|
||
| 双月之间间距 | `--spacing-6` (24px)(§7.1) |
|
||
|
||
行为:`«` `»` 翻年;`‹` `›` 翻月。左日历翻动时右日历同步前移一月,保持"双月连续"。
|
||
|
||
#### 17.5.2 星期表头
|
||
|
||
| 属性 | 取值 |
|
||
|------|------|
|
||
| 文字 | `日 一 二 三 四 五 六` |
|
||
| 字号 | `12px Regular` |
|
||
| 颜色 | `#6E88B0` (ZS-004-04) |
|
||
| 行高 | `28px` |
|
||
|
||
#### 17.5.3 日期格规格
|
||
|
||
| 属性 | 取值 |
|
||
|------|------|
|
||
| 单元尺寸 | `28px × 28px`(点击命中区) |
|
||
| 数字字号 | `14px Regular` |
|
||
| 圆角 | `50%`(已选时实心圆) |
|
||
| 行间距 | `0`(紧凑排列) |
|
||
|
||
#### 17.5.4 日期格状态
|
||
|
||
| 状态 | 背景 | 文字 |
|
||
|------|------|------|
|
||
| 当月普通 | `transparent` | `#C5CFE0` (ZS-004-02) |
|
||
| 上下月填充(如 12 月日历里显示的 11/29、11/30、1/1、1/2) | `transparent` | `#4A6491` (ZS-004-05) |
|
||
| 今天(无边框样式) | `transparent` + `1px solid #1677FF` | `#C5CFE0` |
|
||
| Hover | `rgba(22,119,255,0.16)` | `#FFFFFF` |
|
||
| 已选起止日 | 实心圆 `#1677FF` (ZS-002-06) | `#FFFFFF` |
|
||
| 范围内(起止之间) | `rgba(22,119,255,0.16)` 矩形(无圆角,左右相连成连续色带) | `#FFFFFF` |
|
||
| 范围内 + 端点 | 矩形底色 + 端点实心圆叠加(视觉上"圆形扣"在色带头尾) | `#FFFFFF` |
|
||
| 禁用(超出 min/max) | `transparent` | `#4A6491`,鼠标 `not-allowed` |
|
||
|
||
> ⚠️ **范围色带的实现要点**:范围内日期格不能各自圆角,否则中间会出现空隙。推荐方案:每行整体作为容器,范围内的日期用同色底向左右各延伸 `4px` 模拟连续;端点处再叠加 `28×28` 实心圆。
|
||
|
||
---
|
||
|
||
### 17.6 底部「确定 / 取消」按钮
|
||
|
||
| 元素 | 规格 | 来源 |
|
||
|------|------|------|
|
||
| 区域高度 | `48px` |
|
||
| 顶部分割线 | `1px solid #1A2F5A` (ZS-004-07) | §6.1 |
|
||
| 右内 padding | `--spacing-4` (16px) | §7.1 |
|
||
| 按钮对齐 | 右对齐 |
|
||
| 「确定」 | 沿用 §5.2.1 主按钮(实心 `#1677FF`),尺寸"小号"`28px` | §5.2.1 |
|
||
| 「取消」 | 沿用 §5.2.2 默认按钮(描边 + 透明底),尺寸"小号"`28px` | §5.2.2 |
|
||
| 两按钮间距 | `--spacing-2` (8px) | §7.1 |
|
||
|
||
行为:
|
||
- 「确定」 → 提交当前选择,关闭面板,触发器显示选中值
|
||
- 「取消」 → 丢弃临时选择,关闭面板,触发器值不变
|
||
|
||
按 `Esc` 等价于「取消」;按 `Enter` 等价于「确定」(当选择合法时)。
|
||
|
||
---
|
||
|
||
### 17.7 选用决策与变体
|
||
|
||
| 场景 | 选择 |
|
||
|------|------|
|
||
| 单日期 | 触发器 + 单月日历(无左侧快捷栏,无起止输入区) |
|
||
| 日期范围(常见筛选) | 完整组合:左侧快捷栏 + 双月日历 + 起止输入区 |
|
||
| 仅按周 / 按月 / 按季度 | 左侧只保留对应模式项;右侧日历切换为相应粒度 |
|
||
| 带时间(小时 / 分) | 在 §17.4 起止输入区下方追加时分选择列(24h 滚轮,未在本节展开) |
|
||
| 多日期独立选(非连续) | 不推荐用本组件 —— 改用 §15 多项选择 + 日期值列表 |
|
||
|
||
---
|
||
|
||
### 17.8 CSS Token 参考
|
||
|
||
```css
|
||
:root {
|
||
/* 触发器 —— 复用 §14 搜索框 */
|
||
--date-trigger-bg: var(--search-bg); /* #0C1836 */
|
||
--date-trigger-border: var(--search-border); /* #1A2F5A */
|
||
--date-trigger-text: var(--search-text); /* #C5CFE0 */
|
||
--date-trigger-placeholder: var(--search-placeholder); /* #6E88B0 */
|
||
--date-trigger-icon: #6E88B0;
|
||
--date-trigger-icon-hover: #4096FF; /* ZS-002-05 */
|
||
|
||
/* 面板 —— 复用 §14.4.4 联想 */
|
||
--date-panel-bg: var(--suggest-bg); /* #122347 */
|
||
--date-panel-border: #1A2F5A;
|
||
--date-panel-divider: #1A2F5A; /* 左右栏 + 顶/底分割线 */
|
||
|
||
/* 左侧快捷栏 */
|
||
--date-sidebar-w: 80px;
|
||
--date-sidebar-item-h: 36px;
|
||
--date-sidebar-text: #C5CFE0; /* ZS-004-02 */
|
||
--date-sidebar-text-hover: #FFFFFF;
|
||
--date-sidebar-bg-hover: rgba(22,119,255,0.16);
|
||
--date-sidebar-bg-active: #1677FF; /* ZS-002-06 */
|
||
--date-sidebar-text-active: #FFFFFF;
|
||
|
||
/* 起止输入区 */
|
||
--date-range-sep: #6E88B0; /* "至" 文字 */
|
||
--date-range-clear: #6E88B0;
|
||
--date-range-clear-hover: #4096FF;
|
||
|
||
/* 日历单元 */
|
||
--date-cell-size: 28px;
|
||
--date-cell-text: #C5CFE0; /* 当月 */
|
||
--date-cell-text-outside: #4A6491; /* 上下月填充, ZS-004-05 */
|
||
--date-cell-text-disabled: #4A6491;
|
||
--date-cell-bg-hover: rgba(22,119,255,0.16);
|
||
--date-cell-text-hover: #FFFFFF;
|
||
--date-cell-bg-selected: #1677FF; /* 起止实心圆 */
|
||
--date-cell-text-selected: #FFFFFF;
|
||
--date-cell-bg-in-range: rgba(22,119,255,0.16); /* 范围色带 */
|
||
--date-cell-border-today: #1677FF; /* 今天 1px 边框 */
|
||
|
||
/* 标题栏 */
|
||
--date-title-text: #C5CFE0;
|
||
--date-title-arrow: #6E88B0;
|
||
--date-title-arrow-hover: #4096FF;
|
||
--date-weekday-text: #6E88B0; /* 日一二…六 */
|
||
|
||
/* 底部按钮区 */
|
||
--date-footer-h: 48px;
|
||
--date-footer-divider: #1A2F5A;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 18. 穿梭框(Transfer)
|
||
|
||
> 对应设计稿「5.18 输入-穿梭框」。用于在「源列表 / 目标列表」两栏之间搬移条目,中间用 `‹ ›` 方向按钮转移选中项。覆盖**基础用法**与**可搜索**两种变体;左栏可为**树形**(带层级 + 复选框),右栏为**已选平铺列表**。配色全部从 §1.1.3 渐蓝系(ZS-002)与 §1.1.5 深蓝系(ZS-004)取,与 §14 搜索框 / §15 选择器 / §16 复选框完全对齐。
|
||
|
||
### 18.1 整体结构
|
||
|
||
```
|
||
┌─ 列表(0/13) ──────┐ ┌─ 已选(6/49) ──────┐
|
||
│ ▸ ☐ XXXX公司 │ │ ☐ 李宏洋 │
|
||
│ ▸ ☐ 总裁办 │ ┌──┐ │ ☐ 舒敌 │
|
||
│ ▸ ☐ 人事部 │ │ ‹ │ │ ☑ 宴青 │
|
||
│ ▸ ☐ 技术部 │ ├──┤ │ ☐ 陈平 │
|
||
│ ☐ 张小刚 │ │ › │ │ ☐ 张小凡 │
|
||
│ ☐ 李小红 │ └──┘ │ ☐ 李小红 │
|
||
└───────────────────┘ └───────────────────┘
|
||
源栏(可树形) 方向按钮组 目标栏(已选平铺)
|
||
```
|
||
|
||
- 左 = **源列表**(待选),右 = **目标列表**(已选);中间两颗上下排列的方向按钮 `‹`(移回源)/ `›`(移入目标)。
|
||
- 两栏顶部各有一条**标题栏**,显示名称 + 计数 `(已选/总数)`,如 `列表(0/13)`、`已选(6/49)`。
|
||
- 源栏支持**树形结构**(部门层级 + 叶子节点),目标栏为**平铺列表**。
|
||
|
||
### 18.2 外层容器与栏规格
|
||
|
||
| 属性 | 取值 | 来源 |
|
||
|------|------|------|
|
||
| 外层分栏框背景 | `#0C1836` (ZS-004-09) | §3.1.1 |
|
||
| 外层分栏框圆角 | `4px` | §4.1 |
|
||
| 外层内边距 | `--spacing-5` (24px) | §7.1 |
|
||
| 单栏宽度 | `≥ 240px`,两栏等宽 | — |
|
||
| 单栏背景 | `#122347` (ZS-004-08) | §3.1.2 卡片 |
|
||
| 单栏边框 | `1px solid #1A2F5A` (ZS-004-07) | — |
|
||
| 单栏圆角 | `4px` | §4.1 |
|
||
| 栏体最小高度 | `360px`(不足时撑满,超出滚动) | — |
|
||
| 两栏与方向按钮组间距 | `--spacing-3` (12px) | §7.1 |
|
||
|
||
### 18.3 栏标题栏(Header)
|
||
|
||
标题栏是**实心主色蓝**横条,承载栏名 + 计数。
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 背景 | `#1677FF` (ZS-002-06) | §1.1.6 主色 |
|
||
| 高度 | `40px` | — |
|
||
| 水平 padding | `--spacing-4` (16px) | §7.1 |
|
||
| 标题文字(如「列表」「已选」) | `14px Medium`,`#FFFFFF` | — |
|
||
| 计数文字 `(0/13)` | `14px Regular`,`rgba(255,255,255,0.85)` | — |
|
||
| 圆角 | 上方两角 `4px`,与栏体顶部贴合 | §4.1 |
|
||
|
||
### 18.4 栏内条目
|
||
|
||
#### 18.4.1 平铺列表项(目标栏 / 源栏叶子)
|
||
|
||
每行 = 复选框 + 文字,整行可点击切换勾选。复选框规格复用 §16.3。
|
||
|
||
| 状态 | 背景 | 复选框 | 文字 |
|
||
|------|------|--------|------|
|
||
| 默认 | `transparent` | 未选:`1px solid #6E88B0` (ZS-004-04) | `#C5CFE0` (ZS-004-02) |
|
||
| Hover | `rgba(22,119,255,0.08)` | hover 边框 `#4096FF` (ZS-002-05) | `#FFFFFF` |
|
||
| 已选 | `transparent` | 实心填充 `#1677FF` (ZS-002-06) + 白勾 ✓ | `#FFFFFF` |
|
||
| 禁用 | `transparent` | `1px solid #4A6491` (ZS-004-05) + 背景 `rgba(22,119,255,0.04)` | `#4A6491` |
|
||
|
||
| 属性 | 取值 |
|
||
|------|------|
|
||
| 行高 | `36px` |
|
||
| 水平 padding | `--spacing-3` (12px) |
|
||
| 复选框 → 文字间距 | `--spacing-2` (8px) |
|
||
| 项之间分隔 | 无分割线(靠 hover 背景区分) |
|
||
|
||
#### 18.4.2 树形节点(源栏)
|
||
|
||
源栏按部门层级缩进,父节点带展开箭头 `▸ / ▾`。
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 展开箭头 `▸ / ▾` | `12px`,`#6E88B0` (ZS-004-04),hover `#4096FF` | ZS-002-05 |
|
||
| 每级缩进 | `--spacing-4` (16px) | §7.1 |
|
||
| 父节点复选框 | 支持**半选**(部分子项选中),中央 `8px × 2px` 白色横线,填充 `#1677FF` | §16.3 半选 |
|
||
| 箭头 → 复选框间距 | `--spacing-1` (4px) | — |
|
||
| 节点文字 | 同 §18.4.1 平铺列表项配色 | — |
|
||
|
||
> 勾选父节点 = 勾选其全部子孙;子项部分选中时父节点显示半选态(同 §15.2.3 全选逻辑)。
|
||
|
||
### 18.5 中间方向按钮组
|
||
|
||
两颗上下排列的小尺寸图标按钮,控制条目在两栏间转移。
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 按钮尺寸 | `28px × 28px`(小号) | §5.1 |
|
||
| 圆角 | `2px` | §4.1 |
|
||
| 两按钮纵向间距 | `--spacing-2` (8px) | §7.1 |
|
||
| 图标 `‹` `›` | `14px`,`#FFFFFF` | — |
|
||
| **可用态**背景 | `#1677FF` (ZS-002-06) | §5.2.1 主按钮 |
|
||
| 可用态 Hover | `#0958D9` (ZS-002-07) | — |
|
||
| 可用态 Active | `#003EB3` (ZS-002-08) | — |
|
||
| **禁用态**背景 | `rgba(22,119,255,0.35)`,图标 `#6E88B0` (ZS-004-04) | §5.2.1 失效 |
|
||
|
||
行为:
|
||
- `›`:把**源栏选中项**移入目标栏;源栏无选中时按钮禁用。
|
||
- `‹`:把**目标栏选中项**移回源栏;目标栏无选中时按钮禁用。
|
||
- 转移后两栏标题计数 `(已选/总数)` 同步刷新。
|
||
|
||
### 18.6 可搜索变体
|
||
|
||
在**两栏标题栏下方各嵌入一行搜索框**,输入时实时过滤本栏条目;树形栏过滤后保留命中项的祖先路径。
|
||
|
||
| 属性 | 取值 | 来源 |
|
||
|------|------|------|
|
||
| 搜索框规格 | 沿用 §14.1 公共规格**小号**(高 `28px`) | §14.1 |
|
||
| 占位符 | "请输入",`#6E88B0` (ZS-004-04) | — |
|
||
| 右侧 🔍 图标 | `14px`,`#6E88B0`,hover `#4096FF` | ZS-002-05 |
|
||
| 搜索框背景 | `#0C1836` (ZS-004-09,比栏体深一档) | — |
|
||
| 搜索框水平外边距 | `--spacing-3` (12px)(与栏体左右留白对齐) | — |
|
||
| 搜索框 → 列表纵向间距 | `--spacing-2` (8px) | §7.1 |
|
||
|
||
### 18.7 选用决策
|
||
|
||
| 场景 | 选择 |
|
||
|------|------|
|
||
| 候选项 ≤ 20、无层级 | §18.1 基础用法(两栏平铺) |
|
||
| 候选项有部门 / 分类层级 | 源栏启用 §18.4.2 树形节点 |
|
||
| 候选项较多 / 需快速定位 | §18.6 可搜索变体 |
|
||
| 仅单选搬移、候选少 | 不必用穿梭框,改用 §15 选择器 |
|
||
|
||
### 18.8 CSS Token 参考
|
||
|
||
```css
|
||
:root {
|
||
/* 外层与栏 */
|
||
--transfer-frame-bg: #0C1836; /* ZS-004-09 外层分栏 */
|
||
--transfer-col-bg: #122347; /* ZS-004-08 单栏 */
|
||
--transfer-col-border: #1A2F5A; /* ZS-004-07 */
|
||
--transfer-col-radius: 4px;
|
||
|
||
/* 标题栏 */
|
||
--transfer-header-bg: #1677FF; /* ZS-002-06 */
|
||
--transfer-header-text: #FFFFFF;
|
||
--transfer-header-count: rgba(255,255,255,0.85);
|
||
--transfer-header-h: 40px;
|
||
|
||
/* 条目 */
|
||
--transfer-item-h: 36px;
|
||
--transfer-item-text: #C5CFE0; /* ZS-004-02 */
|
||
--transfer-item-text-on: #FFFFFF;
|
||
--transfer-item-hover-bg: rgba(22,119,255,0.08);
|
||
--transfer-item-disabled: #4A6491; /* ZS-004-05 */
|
||
--transfer-tree-indent: 16px;
|
||
--transfer-tree-arrow: #6E88B0; /* ZS-004-04 */
|
||
--transfer-tree-arrow-hover: #4096FF; /* ZS-002-05 */
|
||
|
||
/* 复选框(复用 §16.3) */
|
||
--transfer-check-border: #6E88B0; /* ZS-004-04 */
|
||
--transfer-check-fill: #1677FF; /* ZS-002-06 */
|
||
--transfer-check-mark: #FFFFFF;
|
||
|
||
/* 方向按钮 */
|
||
--transfer-btn-size: 28px;
|
||
--transfer-btn-bg: #1677FF; /* ZS-002-06 */
|
||
--transfer-btn-hover: #0958D9; /* ZS-002-07 */
|
||
--transfer-btn-active: #003EB3; /* ZS-002-08 */
|
||
--transfer-btn-disabled: rgba(22,119,255,0.35);
|
||
--transfer-btn-icon: #FFFFFF;
|
||
--transfer-btn-icon-disabled: #6E88B0;
|
||
|
||
/* 搜索框(复用 §14.1 小号) */
|
||
--transfer-search-h: 28px;
|
||
--transfer-search-bg: #0C1836; /* ZS-004-09 */
|
||
--transfer-search-border: #1A2F5A; /* ZS-004-07 */
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 19. 树选择(TreeSelect)
|
||
|
||
> 对应设计稿「5.19 输入-树选择」。触发器即一个「请选择 ▾」控件,下拉展开一棵**可折叠树**,叶子 / 节点可被选中。按值数分**单选 / 多选**,按是否带过滤分**无搜索 / 有搜索**,共 4 种组合。触发器规格复用 §15.1.1 选择器触发器;面板规格复用 §15.1.2 下拉面板;多选 Tag、复选框分别复用 §15.2.1、§16.3。配色全部从 §1.1.3 渐蓝系(ZS-002)与 §1.1.5 深蓝系(ZS-004)取。
|
||
|
||
### 19.1 触发器(Trigger)
|
||
|
||
| 变体 | 触发器内容 | 来源 |
|
||
|------|-----------|------|
|
||
| 单选 | 单行文字(已选节点名,如 `PC终端`);占位 "请选择" | §15.1.1 |
|
||
| 多选 | 渲染已选 Tag 列表(`n1 × n1 ×`),超宽折叠成 `+N ×` | §15.2.1 |
|
||
|
||
| 属性 | 取值 | 来源 |
|
||
|------|------|------|
|
||
| 高度 | `32px` | §14.1 |
|
||
| 圆角 | `2px` | §4.1 |
|
||
| 背景 | `#0C1836` (ZS-004-09) | — |
|
||
| 边框 | `1px solid #1A2F5A`(默认);状态机复用 §14.1.1 | ZS-004-07 |
|
||
| 右侧箭头 | 收起 `▾` / 展开 `▴`,`12px`,`#6E88B0`,hover `#4096FF` | ZS-002-05 |
|
||
|
||
### 19.2 下拉面板(Panel)
|
||
|
||
| 属性 | 取值 | 来源 |
|
||
|------|------|------|
|
||
| 背景 | `#122347` (ZS-004-08) | §15.1.2 |
|
||
| 边框 | `1px solid #1A2F5A` (ZS-004-07) | — |
|
||
| 阴影 | `0 4px 16px rgba(6, 14, 36, 0.6)`(§3.1.4 三级阴影) | — |
|
||
| 圆角 | `2px` | — |
|
||
| 内边距 | 上下 `--spacing-2` (8px) | §7.1 |
|
||
| 与触发器纵向间距 | `--spacing-1` (4px) | — |
|
||
| 面板宽度 | 与触发器等宽(最小 `220px`) | — |
|
||
|
||
### 19.3 树节点(公共)
|
||
|
||
```
|
||
[-] 全部终端
|
||
└ [-] 本级中心
|
||
└ [-] PC终端
|
||
├ ─ 研发管理部
|
||
├ [-] 产品线
|
||
│ ├ ▓ 开发小组 ← 选中(整行高亮)
|
||
│ └ ─ 测试小组
|
||
└ ─ 未分组用户终端
|
||
└ [+] 下级中心 ← 折叠(含未展开子树)
|
||
```
|
||
|
||
#### 19.3.1 节点规格
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 节点行高 | `32px` | — |
|
||
| 每级缩进 | `--spacing-4` (16px) | §7.1 |
|
||
| 展开 / 折叠图标 | 方形 `[-]` / `[+]`(含子树时显示),`12px`,描边 `1px solid #6E88B0`,符号 `#6E88B0` | ZS-004-04 |
|
||
| 图标 Hover | 描边 + 符号 `#4096FF` (ZS-002-05) | — |
|
||
| 叶子前缀 | 短横 `─`(占位对齐),`#4A6491` (ZS-004-05) | — |
|
||
| 图标 → 文字间距 | `--spacing-2` (8px) | — |
|
||
| 文字 | `14px Regular` | — |
|
||
|
||
#### 19.3.2 节点状态配色
|
||
|
||
| 状态 | 行背景 | 文字 | 来源 |
|
||
|------|--------|------|------|
|
||
| 默认 | `transparent` | `#C5CFE0` (ZS-004-02) | — |
|
||
| Hover | `rgba(22,119,255,0.08)` | `#FFFFFF` | — |
|
||
| 选中(单选 / 命中叶子) | **整行实心高亮** `#1677FF` (ZS-002-06) | `#FFFFFF` | §1.1.6 主色 |
|
||
| 父级(含选中子项,未自身选中) | `transparent` | `#FFFFFF` | — |
|
||
| 禁用 | `transparent` | `#4A6491` (ZS-004-05) | — |
|
||
|
||
> 单选选中态用**整行通栏蓝底**(不是仅文字变色),与下拉联想项的局部 hover 区分;点击节点空白处 = 选中该节点(父节点亦可选)。
|
||
|
||
### 19.4 单选变体
|
||
|
||
| 维度 | 规则 |
|
||
|------|------|
|
||
| 选中表现 | 点击节点 → 整行 `#1677FF` 高亮,回填触发器文字,**关闭面板** |
|
||
| 同时可选数 | 1(再选其它节点替换原值) |
|
||
| 触发器 | 单行文字 |
|
||
| 节点前缀 | 无复选框,仅展开图标 + 叶子短横 |
|
||
|
||
### 19.5 多选变体
|
||
|
||
| 维度 | 规则 |
|
||
|------|------|
|
||
| 节点前缀 | 展开图标后增加**复选框**(规格复用 §16.3) |
|
||
| 选中表现 | 勾选复选框;命中行可叠加 `#1677FF` 整行高亮强调当前焦点 |
|
||
| 父子联动 | 勾父节点 → 勾全部子孙;子项部分选中 → 父节点**半选**(中央白横线) |
|
||
| 触发器 | 渲染已选 Tag(`n1 ×`),溢出折叠 `+N ×`(§15.2.1) |
|
||
| 关闭时机 | 多选**不关闭**面板,点触发器外部或箭头收起 |
|
||
|
||
| 复选框状态 | 外观 | 来源 |
|
||
|-----------|------|------|
|
||
| 未选 | `1px solid #6E88B0` (ZS-004-04) + 透明底 | §16.5(面板内用灰描边) |
|
||
| 已选 | 实心 `#1677FF` (ZS-002-06) + 白勾 ✓ | §16.3 |
|
||
| 半选 | 实心 `#1677FF` + 中央 `8px × 2px` 白横线 | §16.3 |
|
||
| 禁用 | `1px solid #4A6491` (ZS-004-05) + 背景 `rgba(22,119,255,0.04)` | — |
|
||
|
||
### 19.6 有搜索变体
|
||
|
||
面板顶部嵌入一行搜索框,输入时实时过滤树节点,**保留命中节点的祖先链**并自动展开。
|
||
|
||
| 属性 | 取值 | 来源 |
|
||
|------|------|------|
|
||
| 搜索框规格 | 沿用 §14.1 公共规格**小号**(高 `28px`) | §14.1 |
|
||
| 占位符 | "搜索",`#6E88B0` (ZS-004-04) | — |
|
||
| 右侧 🔍 图标 | `14px`,`#6E88B0`,hover `#4096FF` | ZS-002-05 |
|
||
| 搜索框背景 | `#0C1836` (ZS-004-09) | — |
|
||
| 搜索框 → 树主体间距 | `--spacing-2` (8px) + 分割线 `1px solid #1A2F5A` | §6.1 |
|
||
| 命中文字高亮(可选) | 关键字片段 `#4096FF` (ZS-002-05) | — |
|
||
|
||
### 19.7 交互与动画
|
||
|
||
| 行为 | 动效 | 来源 |
|
||
|------|------|------|
|
||
| 面板展开 | `scaleY(0.95) → 1`,`opacity 0 → 1`,`200ms ease-out` | §8.5 |
|
||
| 节点展开 / 折叠 | 子树高度 `0 → auto`,`[+]/[-]` 切换,`200ms ease-out` | — |
|
||
| 触发器箭头 | `▾ → ▴` 旋转 `180deg`,`200ms ease-out` | — |
|
||
| Hover 背景过渡 | `120ms ease-out` | §8.5 |
|
||
|
||
### 19.8 选用决策
|
||
|
||
| 场景 | 选择 |
|
||
|------|------|
|
||
| 层级数据、选单个节点 | §19.4 单选 |
|
||
| 层级数据、选多个节点(含父子联动) | §19.5 多选 |
|
||
| 树节点多 / 需快速定位 | 叠加 §19.6 有搜索 |
|
||
| 需要在两栏之间搬移而非单纯选取 | 改用 §18 穿梭框 |
|
||
| 无层级的平铺多选 | 改用 §15.2 多项选择 |
|
||
|
||
### 19.9 CSS Token 参考
|
||
|
||
```css
|
||
:root {
|
||
/* 触发器(复用 §15.1.1 / §14.1) */
|
||
--tree-trigger-bg: #0C1836; /* ZS-004-09 */
|
||
--tree-trigger-border: #1A2F5A; /* ZS-004-07 */
|
||
--tree-trigger-text: #C5CFE0; /* ZS-004-02 */
|
||
--tree-trigger-arrow: #6E88B0; /* ZS-004-04 */
|
||
--tree-trigger-arrow-hover: #4096FF; /* ZS-002-05 */
|
||
|
||
/* 面板(复用 §15.1.2) */
|
||
--tree-panel-bg: #122347; /* ZS-004-08 */
|
||
--tree-panel-border: #1A2F5A; /* ZS-004-07 */
|
||
|
||
/* 节点 */
|
||
--tree-node-h: 32px;
|
||
--tree-indent: 16px;
|
||
--tree-node-text: #C5CFE0; /* ZS-004-02 */
|
||
--tree-node-text-on: #FFFFFF;
|
||
--tree-node-hover-bg: rgba(22,119,255,0.08);
|
||
--tree-node-selected-bg: #1677FF; /* ZS-002-06 整行高亮 */
|
||
--tree-node-disabled: #4A6491; /* ZS-004-05 */
|
||
--tree-toggle-border: #6E88B0; /* [+]/[-] 描边 */
|
||
--tree-toggle-hover: #4096FF; /* ZS-002-05 */
|
||
--tree-leaf-dash: #4A6491; /* 叶子短横 */
|
||
|
||
/* 多选复选框(复用 §16) */
|
||
--tree-check-border: #6E88B0; /* ZS-004-04 面板内灰描边 */
|
||
--tree-check-fill: #1677FF; /* ZS-002-06 */
|
||
--tree-check-mark: #FFFFFF;
|
||
|
||
/* 多选 Tag(复用 §15.2.1) */
|
||
--tree-tag-bg: #1677FF; /* ZS-002-06 */
|
||
--tree-tag-text: #FFFFFF;
|
||
--tree-tag-close: rgba(255,255,255,0.72);
|
||
|
||
/* 搜索框(复用 §14.1 小号) */
|
||
--tree-search-h: 28px;
|
||
--tree-search-bg: #0C1836; /* ZS-004-09 */
|
||
--tree-search-border: #1A2F5A; /* ZS-004-07 */
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 20. 上传(Upload)
|
||
|
||
> 对应设计稿「5.20 输入-上传(上)」。覆盖三种形态:**上传组件**(label + 触发按钮 + 文件名回填框)、**批量上传**(拖拽区 + 文件表格 + 底部操作)、**批量上传中**(带状态列的文件列表)。按钮复用 §5.2,输入框复用 §14.1,表格分割线复用 §6,状态色取 §1.1.2 渐红系(错误)与 §1.1.4 渐青系(成功)。其余配色从渐蓝系(ZS-002)与深蓝系(ZS-004)取。
|
||
|
||
### 20.1 上传组件(单文件 · 表单内)
|
||
|
||
表单字段形态:左 `label` + 触发按钮 + 说明 + 文件名回填框。
|
||
|
||
```
|
||
label [ ⬆ 上传文件 ]
|
||
支持 DOCX/ZIP/PDF 格式,文件大小不超过 2 MB。
|
||
下载示例文件
|
||
label [ 未选择文件 ] [ 选择文件 ]
|
||
```
|
||
|
||
#### 20.1.1 元素规格
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| `label` 文字 | `14px Regular`,`#6E88B0` (ZS-004-04) | §12.2.2 |
|
||
| 「⬆ 上传文件」按钮 | 沿用 §5.2.2 默认按钮(描边 `#6E88B0` + 透明底 + `#C5CFE0` 文字),前缀上传图标同文字色 | §5.3.2 |
|
||
| 帮助说明文字 | `14px Regular`,`#4096FF` (ZS-002-05) | §1.1.6 |
|
||
| 「下载示例文件」链接 | `14px Regular`,`#4096FF`,hover `#1677FF` + 下划线 | §5.2.3 文本按钮 |
|
||
| 文件名回填框 | 沿用 §14.1 输入框(高 `32px`,只读),占位 "未选择文件" `#6E88B0` | §14.1 |
|
||
| 「选择文件」按钮 | 沿用 §5.2.1 主按钮(实心 `#1677FF` + 白字) | §5.2.1 |
|
||
| 回填框 → 按钮间距 | `--spacing-2` (8px) | §7.1 |
|
||
| 行与行纵向间距 | `--spacing-3` (12px) | §7.1 |
|
||
|
||
### 20.2 批量上传(拖拽区 + 文件表格)
|
||
|
||
```
|
||
[ ⬆ 上传文件 ] 支持批量上传,上传格式为txt文件
|
||
┌───────────────────────────────────────────────┐
|
||
│ 文件名 大小 状态 操作 │ ← 表头
|
||
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
|
||
│ │
|
||
│ 释放鼠标 │ ← 空态 / 拖拽提示
|
||
│ │
|
||
└───────────────────────────────────────────────┘
|
||
[ 取消 ] [ 开始上传 ]
|
||
```
|
||
|
||
#### 20.2.1 触发区
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 「⬆ 上传文件」按钮 | 沿用 §5.2.1 主按钮(实心 `#1677FF`),前缀上传图标白色 | §5.3.2 |
|
||
| 右侧格式说明 | `14px Regular`,`#6E88B0` (ZS-004-04) | — |
|
||
| 按钮 → 说明间距 | `--spacing-3` (12px) | §7.1 |
|
||
|
||
#### 20.2.2 拖拽区 / 文件表格容器
|
||
|
||
| 属性 | 取值 | 来源 |
|
||
|------|------|------|
|
||
| 容器背景 | `#0C1836` (ZS-004-09) | §3.1.3(凹陷感) |
|
||
| 容器边框 | `1px dashed #1A2F5A`(空闲);**拖拽悬停时** `1px dashed #4096FF` (ZS-002-05) | §6.1 虚线 |
|
||
| 圆角 | `4px` | §4.1 |
|
||
| 空态提示文字「释放鼠标」 | `14px Regular`,`#4096FF` (ZS-002-05),居中 | — |
|
||
| 容器最小高度 | `200px` | — |
|
||
|
||
#### 20.2.3 表头
|
||
|
||
| 属性 | 取值 | 来源 |
|
||
|------|------|------|
|
||
| 列 | `文件名 / 大小 / 状态 / 操作` | — |
|
||
| 文字 | `14px Medium`,`#C5CFE0` (ZS-004-02) | — |
|
||
| 表头底分割线 | `1px dashed #4A6491` (ZS-004-05) | §6.1 虚线 |
|
||
| 行高 | `40px` | — |
|
||
| 水平 padding | `--spacing-4` (16px) | §7.1 |
|
||
|
||
#### 20.2.4 底部操作
|
||
|
||
| 元素 | 规格 | 来源 |
|
||
|------|------|------|
|
||
| 「取消」 | 沿用 §5.2.2 默认按钮 | §5.2.2 |
|
||
| 「开始上传」 | 沿用 §5.2.1 主按钮 | §5.2.1 |
|
||
| 按钮排列 | 默认按钮在左、主按钮在右 | §5.3.4 |
|
||
| 按钮间距 | `--spacing-2` (8px) | §7.1 |
|
||
| 操作区与表格间距 | `--spacing-4` (16px),右对齐 | §7.1 |
|
||
|
||
### 20.3 批量上传中(带状态列)
|
||
|
||
文件入列后逐行显示上传状态,状态色按结果区分。
|
||
|
||
```
|
||
┌───────────────────────────────────────────────────────┐
|
||
│ 文件名 大小 状态 操作 │
|
||
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
|
||
│ 文件名.txt ✓ 上传成功 删除 │
|
||
│ 文件名是六个字…txt 40K ⊘ 文件格式有误 删除 │
|
||
│ 文件名.txt 40K ◌ 上传40%… 删除 │
|
||
│ 文件名.txt 40K ◌ 上传40%… 删除 │
|
||
│ 文件名.txt 40K ◷ 待上传 删除 │
|
||
└───────────────────────────────────────────────────────┘
|
||
[ 取消 ] [ 开始上传 ]
|
||
```
|
||
|
||
#### 20.3.1 数据行规格
|
||
|
||
| 属性 | 取值 | 来源 |
|
||
|------|------|------|
|
||
| 行高 | `40px` | — |
|
||
| 行间分割线 | `1px dashed #2D4473` (ZS-004-06,弱化) | §6.1 |
|
||
| 文件名文字 | `14px Regular`,`#C5CFE0` (ZS-004-02),过长 `…` 省略中部 | — |
|
||
| 大小文字(数字) | `14px Regular`(D-DIN / Arial),`#6E88B0` (ZS-004-04) | §2.1.2 |
|
||
| 「删除」操作 | 沿用 §5.2.3 文本按钮,默认 `#4096FF`,hover `#1677FF` + 下划线 | §5.2.3 |
|
||
|
||
#### 20.3.2 状态列配色
|
||
|
||
| 状态 | 图标 | 图标 / 文字色 | 来源 |
|
||
|------|------|--------------|------|
|
||
| 上传成功 | ✓(实心圆勾) | `#13C2C2` (ZS-003-06,渐青/成功) | §1.1.4 |
|
||
| 文件格式有误 / 失败 | ⊘(实心圆叹号) | `#F5222D` (ZS-001-06,渐红/错误) | §1.1.2 |
|
||
| 上传中(带百分比) | ◌(旋转环) | `#1677FF` (ZS-002-06),环旋转 `1.2s linear infinite` | §5.4.2 加载 |
|
||
| 待上传(排队) | ◷(时钟) | `#4096FF` (ZS-002-05) | §1.1.6 |
|
||
|
||
| 属性 | 取值 |
|
||
|------|------|
|
||
| 状态图标尺寸 | `16px` |
|
||
| 图标 → 文字间距 | `--spacing-2` (8px) |
|
||
| 状态文字字号 | `14px Regular` |
|
||
| 进度文字("上传40%…") | 与所在状态图标同色 |
|
||
|
||
> 进度可叠加细进度条:行底 `2px` 高,已传段 `#1677FF` (ZS-002-06),未传段 `#1A2F5A` (ZS-004-07),宽度按百分比。
|
||
|
||
### 20.4 状态流转
|
||
|
||
| 流转 | 触发 |
|
||
|------|------|
|
||
| 待上传 → 上传中 | 点击「开始上传」,按队列依次启动 |
|
||
| 上传中 → 上传成功 | 服务端返回 2xx,图标切 ✓,行可保留或淡出 |
|
||
| 上传中 → 失败 | 网络 / 服务端错误,图标切 ⊘,文字 `#F5222D`,可点「删除」或重试 |
|
||
| 校验即失败 | 入列时格式 / 大小不符,直接标「文件格式有误」,不进入上传 |
|
||
| 任意态 → 移除 | 点「删除」从列表移除(上传中则中断请求) |
|
||
|
||
### 20.5 选用决策
|
||
|
||
| 场景 | 选择 |
|
||
|------|------|
|
||
| 表单内单文件(头像 / 附件) | §20.1 上传组件 |
|
||
| 多文件批量、需拖拽 | §20.2 批量上传 |
|
||
| 多文件需逐条看进度 / 结果 | §20.3 批量上传中 |
|
||
| 仅展示已传文件、不再上传 | 用只读文件列表,去掉状态列与底部操作 |
|
||
|
||
### 20.6 CSS Token 参考
|
||
|
||
```css
|
||
:root {
|
||
/* 触发按钮(复用 §5.2) */
|
||
--upload-btn-primary-bg: #1677FF; /* ZS-002-06 主按钮 */
|
||
--upload-btn-outline-border: #6E88B0; /* ZS-004-04 默认按钮 */
|
||
--upload-btn-outline-text: #C5CFE0; /* ZS-004-02 */
|
||
|
||
/* 说明 / 链接 */
|
||
--upload-help-text: #4096FF; /* ZS-002-05 */
|
||
--upload-tip-text: #6E88B0; /* ZS-004-04 */
|
||
--upload-link: #4096FF; /* ZS-002-05 */
|
||
--upload-link-hover: #1677FF; /* ZS-002-06 */
|
||
|
||
/* 文件名回填框(复用 §14.1) */
|
||
--upload-input-bg: #0C1836; /* ZS-004-09 */
|
||
--upload-input-border: #1A2F5A; /* ZS-004-07 */
|
||
--upload-input-placeholder:#6E88B0; /* ZS-004-04 */
|
||
|
||
/* 拖拽区 / 表格容器 */
|
||
--upload-drop-bg: #0C1836; /* ZS-004-09 */
|
||
--upload-drop-border: #1A2F5A; /* ZS-004-07 虚线 */
|
||
--upload-drop-border-active:#4096FF; /* ZS-002-05 拖拽悬停 */
|
||
--upload-drop-hint: #4096FF; /* "释放鼠标" */
|
||
|
||
/* 表格 */
|
||
--upload-th-text: #C5CFE0; /* ZS-004-02 */
|
||
--upload-th-divider: #4A6491; /* ZS-004-05 表头虚线 */
|
||
--upload-row-divider: #2D4473; /* ZS-004-06 行间虚线 */
|
||
--upload-filename-text: #C5CFE0; /* ZS-004-02 */
|
||
--upload-size-text: #6E88B0; /* ZS-004-04 */
|
||
--upload-action-text: #4096FF; /* ZS-002-05 删除 */
|
||
|
||
/* 状态列 */
|
||
--upload-status-success: #13C2C2; /* ZS-003-06 成功 */
|
||
--upload-status-error: #F5222D; /* ZS-001-06 失败 */
|
||
--upload-status-loading: #1677FF; /* ZS-002-06 上传中 */
|
||
--upload-status-pending: #4096FF; /* ZS-002-05 待上传 */
|
||
|
||
/* 进度条 */
|
||
--upload-progress-done: #1677FF; /* ZS-002-06 */
|
||
--upload-progress-track: #1A2F5A; /* ZS-004-07 */
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 21. 弹出式窗口(Modal / Dialog)
|
||
|
||
> 对应设计稿「弹出式窗口」。居中模态弹窗,承载多步表单 / 编辑流程。结构 = 遮罩 + 标题栏(含关闭)+ 可选 Tabs + 可选步骤条 + 表单主体 + 底部操作。Tabs 复用 §9.1.1、步骤条复用 §10.2、各表单控件复用 §14~17;本节额外定义弹窗容器、表单项布局,以及截图中出现但前文未覆盖的几个表单原子(分段按钮组 / 密码框 / 文本域 / 数字+单位 / 错误态)。配色从 §1.1.2 渐红系(错误)、§1.1.3 渐蓝系(ZS-002)、§1.1.5 深蓝系(ZS-004)取。
|
||
|
||
### 21.1 遮罩与容器
|
||
|
||
| 属性 | 取值 | 来源 |
|
||
|------|------|------|
|
||
| 遮罩背景 | `rgba(6, 14, 36, 0.6)`(基于 ZS-004-10) | §3.1.4 |
|
||
| 遮罩动画 | `opacity 0 → 1`,`200ms ease-out` | — |
|
||
| 容器背景 | `linear-gradient(180deg, #122347 0%, #0C1836 100%)`(ZS-004-08 → ZS-004-09) | §8.2.1 |
|
||
| 容器边框 | `1px solid #1A2F5A` (ZS-004-07) | — |
|
||
| 容器圆角 | `4px`(§4.1 Modal/Drawer) | §4.1 |
|
||
| 容器阴影 | `0 8px 32px rgba(6, 14, 36, 0.6)`(§3.1.4 三级阴影) | §3.1.4 |
|
||
| 容器内边距 | `--spacing-6` (32px) | §7.1 |
|
||
| 弹出动画 | `scale(0.96) → 1` + `opacity 0 → 1`,`200ms ease-out` | — |
|
||
| 宽度档位 | 小 `480px` / 中 `640px` / 大 `800px`(按内容选) | — |
|
||
|
||
### 21.2 标题栏
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 标题文字 | `20px Bold`,`#FFFFFF`,**水平居中** | §2.1.2 |
|
||
| 标题下分隔线 | `linear-gradient(90deg, transparent 0%, #1677FF 50%, transparent 100%)`,`1px` 高 | §8.2.4 |
|
||
| 关闭按钮 `×` | `16px`,`#6E88B0` (ZS-004-04),hover `#4096FF` (ZS-002-05) | §5.2.4 |
|
||
| 关闭按钮位置 | 右上角,距容器上 / 右内边距对齐 | — |
|
||
| 标题栏 → 主体间距 | `--spacing-5` (24px) | §7.1 |
|
||
|
||
### 21.3 内嵌 Tabs 与步骤条
|
||
|
||
| 组件 | 复用 | 备注 |
|
||
|------|------|------|
|
||
| 顶部 Tabs(`Tab1选中 / Tab2默认`) | §9.1.1 横向页签 | 激活 `#4096FF` + `2px` 下划线,下方通栏基线 `1px solid #1A2F5A` |
|
||
| 步骤条(`第一步 ✓ / 第二步 ② / 第三步 ③`) | §10.2 弹窗步骤条 | 完成态描边圆 + 蓝勾,当前态实心 `#1677FF` + 白字,未开始描边 `#4A6491`;连接线 `1px dashed` |
|
||
| Tabs → 步骤条间距 | `--spacing-5` (24px) | — |
|
||
| 步骤条 → 表单间距 | `--spacing-5` (24px) | — |
|
||
|
||
### 21.4 表单项布局
|
||
|
||
弹窗内表单采用**左 label + 右控件**横向布局。
|
||
|
||
| 元素 | 规格 | 来源 |
|
||
|------|------|------|
|
||
| label 文字 | `14px Regular`,`#C5CFE0` (ZS-004-02),**右对齐** | — |
|
||
| label 列宽 | 固定(如 `96px`),右侧留 `--spacing-3` (12px) 到控件 | §7.1 |
|
||
| 必填星号 `*` | `#F5222D` (ZS-001-06),置于 label 前 | §1.1.2 |
|
||
| 表单项纵向间距 | `--spacing-4` (16px) | §7.1 |
|
||
| 控件默认宽度 | 撑满 label 右侧剩余区 | — |
|
||
| label 与控件垂直对齐 | 控件首行基线居中 | — |
|
||
|
||
#### 21.4.1 错误态与校验信息
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 错误边框 | `1px solid #F5222D` + 外发光 `0 0 0 2px rgba(245,34,45,0.16)` | §14.1.1 错误 |
|
||
| 错误提示文字(如「输入表单内容报错」) | `12px Regular`,`#F5222D` (ZS-001-06) | §1.1.2 |
|
||
| 提示文字位置 | 控件正下方,左对齐于控件 | — |
|
||
| 控件 → 提示文字间距 | `--spacing-1` (4px) | §7.1 |
|
||
|
||
### 21.5 表单控件补充
|
||
|
||
截图中出现、前文未单列的控件原子:
|
||
|
||
#### 21.5.1 分段按钮组(Segmented,如「一级风险 / 二级风险」)
|
||
|
||
并排互斥按钮,选中态高亮。
|
||
|
||
| 状态 | 背景 | 边框 | 文字 |
|
||
|------|------|------|------|
|
||
| 未选 | `transparent` | `1px solid #6E88B0` (ZS-004-04) | `#C5CFE0` (ZS-004-02) |
|
||
| 选中 | `rgba(22,119,255,0.16)` | `1px solid #1677FF` (ZS-002-06) | `#4096FF` (ZS-002-05) |
|
||
| Hover(未选) | `rgba(22,119,255,0.08)` | `#4096FF` | `#4096FF` |
|
||
| 禁用 | `transparent` | `#4A6491` (ZS-004-05) | `#4A6491` |
|
||
|
||
- 高度 `32px`,圆角 `2px`(§4.1),内边距 `0 14px`
|
||
- 相邻项间距 `--spacing-2` (8px)(独立按钮形态);若做无缝连体段则共用一条 `1px #1A2F5A` 分隔
|
||
|
||
#### 21.5.2 密码输入框(可见性切换)
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 输入框 | 沿用 §14.1 公共规格 | §14.1 |
|
||
| 掩码字符 | `●` / `*`,`#C5CFE0` | — |
|
||
| 右侧眼睛图标 `👁 / 👁🗨` | `16px`,`#6E88B0`,hover `#4096FF` | ZS-002-05 |
|
||
| 切换行为 | 点击图标在「明文 / 掩码」间切换 | — |
|
||
|
||
#### 21.5.3 禁用输入框(「未填-禁用」)
|
||
|
||
| 属性 | 取值 | 来源 |
|
||
|------|------|------|
|
||
| 边框 | `1px solid #2D4473` (ZS-004-06) | §14.1.1 失效 |
|
||
| 背景 | `rgba(22,119,255,0.04)` | — |
|
||
| 占位 / 文字 | `#4A6491` (ZS-004-05) | — |
|
||
| 光标 | `not-allowed` | — |
|
||
|
||
#### 21.5.4 文本域(Textarea)
|
||
|
||
| 属性 | 取值 | 来源 |
|
||
|------|------|------|
|
||
| 边框 / 背景 / 状态机 | 同 §14.1 输入框 | §14.1 |
|
||
| 最小高度 | `96px`(约 4 行) | — |
|
||
| 内边距 | `--spacing-3` (12px) | §7.1 |
|
||
| 占位文字 | "请输入",`#6E88B0` | — |
|
||
| 圆角 | `2px` | §4.1 |
|
||
| 右下角缩放手柄 | 可选,`#4A6491` | — |
|
||
|
||
#### 21.5.5 数字 + 单位输入(「100 天」)
|
||
|
||
输入框右侧无缝拼一个**实心主色蓝单位块**。
|
||
|
||
| 元素 | 色值 / 规格 | 来源 |
|
||
|------|-------------|------|
|
||
| 数字输入区 | 沿用 §14.1,右边框去除(与单位块拼接) | §14.1 |
|
||
| 单位块背景 | `#1677FF` (ZS-002-06) | §14.3 后台搜索框按钮 |
|
||
| 单位块文字 | `14px Regular`,`#FFFFFF` | — |
|
||
| 单位块内边距 | `0 --spacing-3`(12px) | — |
|
||
| 整体高度 | `32px`,右侧两角圆角 `2px` | §4.1 |
|
||
|
||
#### 21.5.6 行内日期 / 范围 / 下拉 / 复选
|
||
|
||
| 控件 | 复用 |
|
||
|------|------|
|
||
| 「威胁类型 请选择 ▾」 | §15.1 选择器触发器 |
|
||
| 「首发时间」日期时间 | §17.1 日期触发器(错误态见 §21.4.1) |
|
||
| 「周期 … 至 …」范围 | §17.1 范围触发器变体 |
|
||
| 「该账户仅允许…」复选框 | §16.3 多选 |
|
||
|
||
### 21.6 底部操作
|
||
|
||
| 元素 | 规格 | 来源 |
|
||
|------|------|------|
|
||
| 区域顶部间距 | `--spacing-5` (24px)(与主体留白) | §7.1 |
|
||
| 按钮对齐 | 右对齐(也可整体居中,跟随设计稿——本稿居中) | §5.3.4 |
|
||
| 「取消」 | 沿用 §5.2.2 默认按钮 | §5.2.2 |
|
||
| 「保存」/「确定」 | 沿用 §5.2.1 主按钮 | §5.2.1 |
|
||
| 排列顺序 | 默认按钮在左、主按钮在右 | §5.3.4 |
|
||
| 按钮间距 | `--spacing-2` (8px) | §7.1 |
|
||
|
||
### 21.7 交互
|
||
|
||
| 行为 | 规则 |
|
||
|------|------|
|
||
| 打开 | 遮罩淡入 + 容器 `scale(0.96)→1`,焦点落到首个可输入控件 |
|
||
| 关闭 | 点 `×` / 「取消」 / 遮罩外 / `Esc`;有未保存改动时可二次确认 |
|
||
| 提交 | 「保存」前做校验,失败项标 §21.4.1 错误态并滚动到首个错误 |
|
||
| 焦点陷阱 | `Tab` 循环限制在弹窗内(不泄漏到背景页面) |
|
||
|
||
### 21.8 CSS Token 参考
|
||
|
||
```css
|
||
:root {
|
||
/* 遮罩与容器 */
|
||
--modal-mask: rgba(6,14,36,0.6); /* ZS-004-10 */
|
||
--modal-bg-top: #122347; /* ZS-004-08 */
|
||
--modal-bg-bottom: #0C1836; /* ZS-004-09 */
|
||
--modal-border: #1A2F5A; /* ZS-004-07 */
|
||
--modal-radius: 4px;
|
||
--modal-shadow: 0 8px 32px rgba(6,14,36,0.6);
|
||
|
||
/* 标题 */
|
||
--modal-title-text: #FFFFFF;
|
||
--modal-title-line: linear-gradient(90deg, transparent, #1677FF, transparent);
|
||
--modal-close: #6E88B0; /* ZS-004-04 */
|
||
--modal-close-hover: #4096FF; /* ZS-002-05 */
|
||
|
||
/* 表单项 */
|
||
--form-label: #C5CFE0; /* ZS-004-02 */
|
||
--form-required: #F5222D; /* ZS-001-06 */
|
||
--form-error-border: #F5222D;
|
||
--form-error-ring: 0 0 0 2px rgba(245,34,45,0.16);
|
||
--form-error-text: #F5222D;
|
||
|
||
/* 分段按钮组 */
|
||
--seg-border: #6E88B0; /* ZS-004-04 未选 */
|
||
--seg-selected-bg: rgba(22,119,255,0.16);
|
||
--seg-selected-border: #1677FF; /* ZS-002-06 */
|
||
--seg-selected-text: #4096FF; /* ZS-002-05 */
|
||
|
||
/* 数字+单位 */
|
||
--unit-addon-bg: #1677FF; /* ZS-002-06 */
|
||
--unit-addon-text: #FFFFFF;
|
||
|
||
/* 禁用输入 */
|
||
--input-disabled-border:#2D4473; /* ZS-004-06 */
|
||
--input-disabled-bg: rgba(22,119,255,0.04);
|
||
--input-disabled-text: #4A6491; /* ZS-004-05 */
|
||
}
|
||
```
|
||
|
||
---
|
||
|