pda-kit-mcp-server 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +107 -0
- package/bin/pda-kit-mcp.js +35 -0
- package/dist/file-reader.d.ts +83 -0
- package/dist/file-reader.d.ts.map +1 -0
- package/dist/file-reader.js +170 -0
- package/dist/file-reader.js.map +1 -0
- package/dist/http-entry.d.ts +12 -0
- package/dist/http-entry.d.ts.map +1 -0
- package/dist/http-entry.js +149 -0
- package/dist/http-entry.js.map +1 -0
- package/dist/http-server.d.ts +5 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +114 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +90 -0
- package/dist/index.js.map +1 -0
- package/dist/paths.d.ts +37 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +52 -0
- package/dist/paths.js.map +1 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +308 -0
- package/dist/server.js.map +1 -0
- package/dist/stdio-server.d.ts +8 -0
- package/dist/stdio-server.d.ts.map +1 -0
- package/dist/stdio-server.js +83 -0
- package/dist/stdio-server.js.map +1 -0
- package/dist/tools/generate-component.d.ts +54 -0
- package/dist/tools/generate-component.d.ts.map +1 -0
- package/dist/tools/generate-component.js +80 -0
- package/dist/tools/generate-component.js.map +1 -0
- package/dist/tools/get-component-spec.d.ts +70 -0
- package/dist/tools/get-component-spec.d.ts.map +1 -0
- package/dist/tools/get-component-spec.js +95 -0
- package/dist/tools/get-component-spec.js.map +1 -0
- package/dist/tools/get-global-rules.d.ts +42 -0
- package/dist/tools/get-global-rules.d.ts.map +1 -0
- package/dist/tools/get-global-rules.js +83 -0
- package/dist/tools/get-global-rules.js.map +1 -0
- package/dist/tools/list-components.d.ts +52 -0
- package/dist/tools/list-components.d.ts.map +1 -0
- package/dist/tools/list-components.js +104 -0
- package/dist/tools/list-components.js.map +1 -0
- package/dist/tools/search-components.d.ts +54 -0
- package/dist/tools/search-components.d.ts.map +1 -0
- package/dist/tools/search-components.js +124 -0
- package/dist/tools/search-components.js.map +1 -0
- package/dist/tools/validate-html.d.ts +43 -0
- package/dist/tools/validate-html.d.ts.map +1 -0
- package/dist/tools/validate-html.js +116 -0
- package/dist/tools/validate-html.js.map +1 -0
- package/package.json +59 -0
- package/spec-data/badge.md +461 -0
- package/spec-data/button.md +148 -0
- package/spec-data/camera.md +622 -0
- package/spec-data/dialog.md +419 -0
- package/spec-data/divider.md +208 -0
- package/spec-data/drawer.md +301 -0
- package/spec-data/empty-state.md +336 -0
- package/spec-data/home-page.md +352 -0
- package/spec-data/input-row.md +346 -0
- package/spec-data/layout-page.md +317 -0
- package/spec-data/list-item.md +128 -0
- package/spec-data/location-selector.md +630 -0
- package/spec-data/more-actions.md +427 -0
- package/spec-data/navbar.md +482 -0
- package/spec-data/photo-list.md +461 -0
- package/spec-data/picker-single.md +199 -0
- package/spec-data/picker.md +586 -0
- package/spec-data/scan-input.md +304 -0
- package/spec-data/section-heading.md +268 -0
- package/spec-data/selectable-list.md +331 -0
- package/spec-data/stepper.md +247 -0
- package/spec-data/tab-bar.md +254 -0
- package/spec-data/tab.md +349 -0
- package/spec-data/tag.md +363 -0
- package/spec-data/tooltip.md +202 -0
- package/spec-data/waybill-number.md +257 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: drawer
|
|
3
|
+
name: 弹出层抽屉 Drawer
|
|
4
|
+
category: "反馈/Feedback"
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
source: PDAKit-基础组件
|
|
7
|
+
source_url: https://mastergo.ky-tech.com.cn/goto/UgWcXgl5
|
|
8
|
+
source_doc_id: 103417331857122
|
|
9
|
+
component_count: 1
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 弹出层抽屉 Drawer
|
|
13
|
+
|
|
14
|
+
底部弹出式抽屉面板。由底部向上滑入,默认占页面 **75% 高度**。头部标题固定展示,内容区可自定义,底部操作按钮可配置显隐。
|
|
15
|
+
|
|
16
|
+
> **交互**: 底部滑入(Bottom Sheet),顶部圆角 `16px`,支持下滑关闭或点击遮罩关闭。
|
|
17
|
+
> **动效**: 由下往上滑入,`300ms ease-in`。
|
|
18
|
+
> **颜色规则**: 全部使用 Token(`--color-{色系}-{色阶}`),禁止 Hex。
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 结构
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
┌──────────────────────────────────────┐
|
|
26
|
+
│ 遮罩层 (.drawer-overlay) │ rgba(0,0,0,0.5) 全屏
|
|
27
|
+
│ ┌────────────────────────────────┐ │
|
|
28
|
+
│ │ 头部标题 (居中) │ │
|
|
29
|
+
│ │ 描述文本 │ │ 94px, flex-shrink: 0
|
|
30
|
+
│ │ ✕ │ │ 关闭按钮绝对定位右侧
|
|
31
|
+
│ │ ───────────────────────────── │ │ 1px 分割线
|
|
32
|
+
│ │ │ │
|
|
33
|
+
│ │ 内容区 (.drawer-body) │ │ 自定义内容,flex: 1,可滚动
|
|
34
|
+
│ │ │ │
|
|
35
|
+
│ │ │ │
|
|
36
|
+
│ │ ───────────────────────────── │ │
|
|
37
|
+
│ │ 底部操作栏 (.drawer-footer) │ │ 可选,可配置显隐
|
|
38
|
+
│ └────────────────────────────────┘ │
|
|
39
|
+
└──────────────────────────────────────┘
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 容器规格
|
|
45
|
+
|
|
46
|
+
| 属性 | 值 |
|
|
47
|
+
|------|-----|
|
|
48
|
+
| 面板高度 | `75vh`(默认占页面 75%) |
|
|
49
|
+
| 面板宽度 | `100%` |
|
|
50
|
+
| 顶部圆角 | `16px 16px 0 0` |
|
|
51
|
+
| 背景 | `--color-grey-1`(`#FFFFFF`) |
|
|
52
|
+
| 遮罩层 | `rgba(0,0,0,0.5)`,覆盖全屏 |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 子区域规格
|
|
57
|
+
|
|
58
|
+
### 拖拽条
|
|
59
|
+
|
|
60
|
+
> **无拖拽条**。面板顶部直接为头部标题区,不展示拖拽手柄。
|
|
61
|
+
|
|
62
|
+
### 头部标题 (.drawer-header)
|
|
63
|
+
|
|
64
|
+
| 属性 | 值 |
|
|
65
|
+
|------|-----|
|
|
66
|
+
| 高度 | `94px` |
|
|
67
|
+
| 布局 | `flex-col` + `align-items: center` + `justify-content: center` + `position: relative` |
|
|
68
|
+
| 内边距 | `16px` |
|
|
69
|
+
| 标题字号 | `20px / 28px`,`font-weight: 600` |
|
|
70
|
+
| 标题颜色 | `--color-black-6`(`#333333`) |
|
|
71
|
+
| 标题对齐 | **居中** |
|
|
72
|
+
| 描述文本字号 | `14px / 20px`,`font-weight: 400` |
|
|
73
|
+
| 描述文本颜色 | `--color-black-4`(`#888888`) |
|
|
74
|
+
| 描述文本间距 | `margin-top: 4px` |
|
|
75
|
+
| 关闭图标 | `common_ic_close_o.svg`,`24×24px`,绝对定位右侧 |
|
|
76
|
+
| 底部分割线 | `1px`,`--color-black-2`(`#DDDDDD`) |
|
|
77
|
+
|
|
78
|
+
### 内容区 (.drawer-body)
|
|
79
|
+
|
|
80
|
+
| 属性 | 值 |
|
|
81
|
+
|------|-----|
|
|
82
|
+
| 布局 | `flex: 1` + `overflow-y: auto` |
|
|
83
|
+
| 内边距 | `16px` |
|
|
84
|
+
| 内容 | 完全自定义,支持任意组件 |
|
|
85
|
+
|
|
86
|
+
### 底部操作栏 (.drawer-footer)
|
|
87
|
+
|
|
88
|
+
| 属性 | 值 |
|
|
89
|
+
|------|-----|
|
|
90
|
+
| 高度 | `80px` |
|
|
91
|
+
| 显示 | 可选,通过 prop 控制 |
|
|
92
|
+
| 布局 | `flex` + `align-items: center` + `justify-content: center` |
|
|
93
|
+
| 内边距 | `0 16px` |
|
|
94
|
+
| 顶部分割线 | `1px`,`--color-black-2`(`#DDDDDD`) |
|
|
95
|
+
| 按钮样式 | 使用 `button.md` 规范 |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 动效
|
|
100
|
+
|
|
101
|
+
| 属性 | 值 |
|
|
102
|
+
|------|-----|
|
|
103
|
+
| 动画 | `transform: translateY(100%) → translateY(0)` |
|
|
104
|
+
| 时长 | `300ms` |
|
|
105
|
+
| 缓动 | `ease-in`(打开)/ `ease-out`(关闭) |
|
|
106
|
+
|
|
107
|
+
```css
|
|
108
|
+
.drawer-panel {
|
|
109
|
+
animation: drawerSlideIn 300ms ease-in;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@keyframes drawerSlideIn {
|
|
113
|
+
from { transform: translateY(100%); }
|
|
114
|
+
to { transform: translateY(0); }
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 尺寸速查
|
|
121
|
+
|
|
122
|
+
| 元素 | 值 |
|
|
123
|
+
|------|------|
|
|
124
|
+
| 面板高度 | `75vh` |
|
|
125
|
+
| 面板宽度 | `100%` |
|
|
126
|
+
| 顶部圆角 | `16px` |
|
|
127
|
+
| 头部高度 | `94px` |
|
|
128
|
+
| 标题字号 | `20px / 28px`,Semibold,居中 |
|
|
129
|
+
| 描述字号 | `14px / 20px`,`--color-black-4` |
|
|
130
|
+
| 关闭图标 | `24×24px` |
|
|
131
|
+
| 底部操作栏 | `80px`(可选) |
|
|
132
|
+
| 分割线 | `1px`,`--color-black-2` |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## HTML 示例
|
|
137
|
+
|
|
138
|
+
```html
|
|
139
|
+
<!-- 遮罩层 -->
|
|
140
|
+
<div class="drawer-overlay" onclick="closeDrawer()">
|
|
141
|
+
<!-- 面板 -->
|
|
142
|
+
<div class="drawer-panel" onclick="event.stopPropagation()">
|
|
143
|
+
|
|
144
|
+
<!-- 头部(居中标题 + 描述) -->
|
|
145
|
+
<div class="drawer-header">
|
|
146
|
+
<span class="drawer-title">标题</span>
|
|
147
|
+
<span class="drawer-desc">描述文本</span>
|
|
148
|
+
<img src="./icons/assets/common_ic_close_o.svg" class="drawer-close" width="24" height="24" alt="关闭" onclick="closeDrawer()">
|
|
149
|
+
</div>
|
|
150
|
+
<div class="drawer-header-divider"></div>
|
|
151
|
+
|
|
152
|
+
<!-- 内容区(自定义) -->
|
|
153
|
+
<div class="drawer-body">
|
|
154
|
+
<!-- 任意组件内容 -->
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
<!-- 底部操作栏(可选) -->
|
|
158
|
+
<div class="drawer-header-divider"></div>
|
|
159
|
+
<div class="drawer-footer">
|
|
160
|
+
<button class="btn-primary">确定</button>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## CSS
|
|
169
|
+
|
|
170
|
+
```css
|
|
171
|
+
/* 遮罩 */
|
|
172
|
+
.drawer-overlay {
|
|
173
|
+
position: fixed;
|
|
174
|
+
inset: 0;
|
|
175
|
+
background: rgba(0, 0, 0, 0.5);
|
|
176
|
+
z-index: 1000;
|
|
177
|
+
display: flex;
|
|
178
|
+
flex-direction: column;
|
|
179
|
+
justify-content: flex-end;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* 面板 */
|
|
183
|
+
.drawer-panel {
|
|
184
|
+
width: 100%;
|
|
185
|
+
height: 75vh;
|
|
186
|
+
background: var(--color-grey-1);
|
|
187
|
+
border-radius: 16px 16px 0 0;
|
|
188
|
+
display: flex;
|
|
189
|
+
flex-direction: column;
|
|
190
|
+
animation: drawerSlideIn 300ms ease-in;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
@keyframes drawerSlideIn {
|
|
194
|
+
from { transform: translateY(100%); }
|
|
195
|
+
to { transform: translateY(0); }
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/* 头部:居中标题 + 描述 */
|
|
199
|
+
.drawer-header {
|
|
200
|
+
height: 94px;
|
|
201
|
+
display: flex;
|
|
202
|
+
flex-direction: column;
|
|
203
|
+
align-items: center;
|
|
204
|
+
justify-content: center;
|
|
205
|
+
padding: 16px;
|
|
206
|
+
flex-shrink: 0;
|
|
207
|
+
position: relative;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.drawer-title {
|
|
211
|
+
font: 600 20px/28px "PingFang SC", -apple-system, sans-serif;
|
|
212
|
+
color: var(--color-black-6);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.drawer-desc {
|
|
216
|
+
font: 400 14px/20px "PingFang SC", -apple-system, sans-serif;
|
|
217
|
+
color: var(--color-black-4);
|
|
218
|
+
margin-top: 4px;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.drawer-close {
|
|
222
|
+
position: absolute;
|
|
223
|
+
right: 16px;
|
|
224
|
+
top: 50%;
|
|
225
|
+
transform: translateY(-50%);
|
|
226
|
+
width: 24px;
|
|
227
|
+
height: 24px;
|
|
228
|
+
cursor: pointer;
|
|
229
|
+
flex-shrink: 0;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/* 头部分割线 */
|
|
233
|
+
.drawer-header-divider {
|
|
234
|
+
width: 100%;
|
|
235
|
+
height: 1px;
|
|
236
|
+
background: var(--color-black-2);
|
|
237
|
+
flex-shrink: 0;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* 内容区 */
|
|
241
|
+
.drawer-body {
|
|
242
|
+
flex: 1;
|
|
243
|
+
overflow-y: auto;
|
|
244
|
+
padding: 16px;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/* 底部操作栏 */
|
|
248
|
+
.drawer-footer {
|
|
249
|
+
height: 80px;
|
|
250
|
+
display: flex;
|
|
251
|
+
align-items: center;
|
|
252
|
+
justify-content: center;
|
|
253
|
+
padding: 0 16px;
|
|
254
|
+
flex-shrink: 0;
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## JS 示例
|
|
261
|
+
|
|
262
|
+
```javascript
|
|
263
|
+
function openDrawer(id) {
|
|
264
|
+
document.getElementById(id).classList.remove('hidden');
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
function closeDrawer(id) {
|
|
268
|
+
document.getElementById(id).classList.add('hidden');
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## 颜色 Token
|
|
275
|
+
|
|
276
|
+
| Token | 色值 | 使用场景 |
|
|
277
|
+
|-------|------|---------|
|
|
278
|
+
| `--color-grey-1` | `#FFFFFF` | 面板背景 |
|
|
279
|
+
| `--color-black-2` | `#DDDDDD` | 头部分割线、底部分割线 |
|
|
280
|
+
| `--color-black-4` | `#888888` | 描述文字 |
|
|
281
|
+
| `--color-black-6` | `#333333` | 标题文字 |
|
|
282
|
+
| 遮罩 | `rgba(0,0,0,0.5)` | 遮罩背景 |
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## 使用规则(AI 必读)
|
|
287
|
+
|
|
288
|
+
1. **面板固定 `75vh`**:默认占页面 75% 高度,不随内容变化
|
|
289
|
+
2. **面板宽度 `100%`**:撑满父容器全宽,不留间隙
|
|
290
|
+
3. **遮罩层关键 CSS**:`flex-direction: column; justify-content: flex-end` 将面板推到底部且撑满宽度
|
|
291
|
+
4. **无拖拽条**:面板顶部直接为头部标题区,不要画拖拽手柄
|
|
292
|
+
5. **标题居中**:`.drawer-title` 水平居中,下方可选描述文本(`.drawer-desc`)
|
|
293
|
+
6. **头部 `94px`**:固定高度,标题 + 描述始终可见,不随内容滚动
|
|
294
|
+
7. **关闭按钮必右侧**:绝对定位 `right: 16px; top: 50%; transform: translateY(-50%)`
|
|
295
|
+
8. **内容完全自定义**:`.drawer-body` 内可放入 input-row、selectable-list、photo-list 等任意组件
|
|
296
|
+
9. **底部操作栏可选**:通过是否渲染 `.drawer-footer` 控制显隐
|
|
297
|
+
10. **遮罩点击关闭**:点击遮罩层触发关闭,面板内 `event.stopPropagation()` 阻止冒泡
|
|
298
|
+
11. **底部按钮**:仅一个按钮占满宽度;两个按钮 `gap: 12px`,各 `flex: 1`
|
|
299
|
+
12. **打开/关闭**:通过 `classList.add/remove('hidden')` 控制显示,动画由 CSS `drawerSlideIn` 驱动
|
|
300
|
+
13. **关闭图标**:固定使用 `common_ic_close_o.svg`,不可替换
|
|
301
|
+
14. **颜色全部 Token**:禁止使用 Hex 色值
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: empty-state
|
|
3
|
+
name: 空状态
|
|
4
|
+
category: "反馈/Feedback"
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
source: PDAKit-基础组件
|
|
7
|
+
source_url: https://mastergo.ky-tech.com.cn/goto/TXXlKmov
|
|
8
|
+
source_doc_id: 103417331857122
|
|
9
|
+
component_count: 1
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 空状态 Empty State
|
|
13
|
+
|
|
14
|
+
缺省页组件,用于列表为空、无数据、无权限、网络断开等场景。包含插画、标题、辅助说明和操作按钮,各元素按实际场景按需显示或隐藏。
|
|
15
|
+
|
|
16
|
+
> **颜色规则**:全部使用 Token(`--color-{色系}-{色阶}`),禁止 Hex。
|
|
17
|
+
> **字体**:PingFang SC。
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 组件总览
|
|
22
|
+
|
|
23
|
+
| 区域 | 是否必须 | 说明 |
|
|
24
|
+
|------|---------|------|
|
|
25
|
+
| 插画 | 是 | 空状态插图,位于最上方 |
|
|
26
|
+
| 标题文字 | 是 | 核心提示文字 |
|
|
27
|
+
| 次级标题说明文案 | 否 | 补充说明,辅助用户理解当前状态 |
|
|
28
|
+
| 主按钮 | 否 | 主操作入口(如"重试""创建任务") |
|
|
29
|
+
| 次按钮 | 否 | 次要操作入口(如"查看帮助") |
|
|
30
|
+
| 文字按钮组 | 否 | 1-2 个弱操作入口,中间竖线分隔 |
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 布局结构
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
┌──────────────────────────────────┐
|
|
38
|
+
│ │
|
|
39
|
+
│ [插画 Illustration] │ ← 空状态图片,按场景选择
|
|
40
|
+
│ │
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
│ 标题文字 │ ← 20px/28px Semibold
|
|
44
|
+
│ 次级标题说明文案 │ ← 16px/22px Regular(可选)
|
|
45
|
+
│ │
|
|
46
|
+
│ [ 主按钮 ] │ ← 中号/主色/240px(可选)
|
|
47
|
+
│ [ 次按钮 ] │ ← 中号/线条/240px(可选)
|
|
48
|
+
│ │
|
|
49
|
+
│ 创建任务 │ 一键装货 │ ← 文字按钮小号(可选,1-2个)
|
|
50
|
+
│ │
|
|
51
|
+
└──────────────────────────────────┘
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 规格
|
|
57
|
+
|
|
58
|
+
### 容器
|
|
59
|
+
|
|
60
|
+
| 属性 | 值 |
|
|
61
|
+
|------|------|
|
|
62
|
+
| 宽度 | `480px` |
|
|
63
|
+
| 最小高度 | `430px`(随内容自适应) |
|
|
64
|
+
| 布局 | 垂直排列(`flex-col`) |
|
|
65
|
+
| 水平对齐 | `items-center` |
|
|
66
|
+
| 插画-文字区间距 | `16px` |
|
|
67
|
+
| 文字区-按钮区间距 | `32px` |
|
|
68
|
+
|
|
69
|
+
### 标题文字
|
|
70
|
+
|
|
71
|
+
| 属性 | 值 |
|
|
72
|
+
|------|------|
|
|
73
|
+
| 字体 | PingFang SC,`20px / 28px`,Semibold(`600`) |
|
|
74
|
+
| 颜色 | `--color-grey-6`(`#52567B`) |
|
|
75
|
+
| 对齐 | `text-center` |
|
|
76
|
+
|
|
77
|
+
### 次级标题说明文案
|
|
78
|
+
|
|
79
|
+
| 属性 | 值 |
|
|
80
|
+
|------|------|
|
|
81
|
+
| 字体 | PingFang SC,`16px / 22px`,Regular(`400`),沿用 `text/16/22` |
|
|
82
|
+
| 颜色 | `--color-black-4`(`#888888`) |
|
|
83
|
+
| 最大宽度 | `384px` |
|
|
84
|
+
| 对齐 | `text-center` |
|
|
85
|
+
| 与标题间距 | `12px` |
|
|
86
|
+
|
|
87
|
+
### 按钮区
|
|
88
|
+
|
|
89
|
+
| 按钮 | 类型 | 宽度 | 说明 |
|
|
90
|
+
|------|------|------|------|
|
|
91
|
+
| 主按钮 | 中号/主色 | `240px` | 单个主操作(如"重试""去创建") |
|
|
92
|
+
| 次按钮 | 中号/线条(主要线条) | `240px` | 次要操作(如"查看帮助") |
|
|
93
|
+
| 文字按钮组 | 文字按钮-小号/主要 | 自适应 | 1-2 个弱操作,中间 `│` 分隔 |
|
|
94
|
+
|
|
95
|
+
> 按钮区内部间距:主按钮与次按钮间距 `16px`,文字按钮组与前一个按钮间距 `16px`。
|
|
96
|
+
> 文字按钮组内间距:文字按钮之间间距 `12px`,分隔符为 `1px × 16px` 竖线。
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 插画资源
|
|
101
|
+
|
|
102
|
+
插画 PNG 文件位于 [`空状态/`](../空状态/),共 **10 张**,对应不同业务场景:
|
|
103
|
+
|
|
104
|
+
| 文件名 | 场景 |
|
|
105
|
+
|--------|------|
|
|
106
|
+
| `填写运单号.png` | 需要用户输入运单号 |
|
|
107
|
+
| `暂无任务.png` | 当前没有待处理任务 |
|
|
108
|
+
| `暂无内容.png` | 列表/页面无内容 |
|
|
109
|
+
| `暂无收款项.png` | 没有待收款项 |
|
|
110
|
+
| `暂无权限.png` | 当前用户无权限访问 |
|
|
111
|
+
| `暂无查询结果.png` | 搜索/查询无匹配结果 |
|
|
112
|
+
| `暂无记录.png` | 没有历史记录 |
|
|
113
|
+
| `网络无连接.png` | 网络断开,无法加载 |
|
|
114
|
+
| `请扫描运单号.png` | 引导用户扫描运单号 |
|
|
115
|
+
| `请扫齐托盘货物.png` | 引导用户扫描托盘货物 |
|
|
116
|
+
|
|
117
|
+
引用方式:`src="./空状态/暂无任务.png"`
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## HTML 示例
|
|
122
|
+
|
|
123
|
+
### 场景 A:网络断开(插画 + 标题 + 主按钮)
|
|
124
|
+
|
|
125
|
+
```html
|
|
126
|
+
<!-- 空状态:网络无连接 -->
|
|
127
|
+
<div class="empty-state">
|
|
128
|
+
<img class="empty-state-illustration" src="./空状态/网络无连接.png" alt="网络无连接" />
|
|
129
|
+
<div class="empty-state-text">
|
|
130
|
+
<p class="empty-state-title">网络无连接</p>
|
|
131
|
+
</div>
|
|
132
|
+
<div class="empty-state-actions">
|
|
133
|
+
<button class="btn-empty-primary">重试</button>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 场景 B:暂无任务(插画 + 标题,无按钮)
|
|
139
|
+
|
|
140
|
+
```html
|
|
141
|
+
<div class="empty-state">
|
|
142
|
+
<img class="empty-state-illustration" src="./空状态/暂无任务.png" alt="暂无任务" />
|
|
143
|
+
<div class="empty-state-text">
|
|
144
|
+
<p class="empty-state-title">暂无任务</p>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 场景 C:请扫描运单号(插画 + 标题 + 说明 + 文字按钮组)
|
|
150
|
+
|
|
151
|
+
```html
|
|
152
|
+
<div class="empty-state">
|
|
153
|
+
<img class="empty-state-illustration" src="./空状态/请扫描运单号.png" alt="请扫描运单号" />
|
|
154
|
+
<div class="empty-state-text">
|
|
155
|
+
<p class="empty-state-title">请扫描运单号</p>
|
|
156
|
+
<p class="empty-state-subtitle">扫描运单号条形码,快速录入信息</p>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="empty-state-actions">
|
|
159
|
+
<div class="empty-state-text-links">
|
|
160
|
+
<span class="btn-empty-text-link">创建任务</span>
|
|
161
|
+
<span class="empty-state-divider"></span>
|
|
162
|
+
<span class="btn-empty-text-link">一键装货</span>
|
|
163
|
+
</div>
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 场景 D:暂无查询结果(插画 + 标题 + 说明 + 主按钮 + 次按钮)
|
|
169
|
+
|
|
170
|
+
```html
|
|
171
|
+
<div class="empty-state">
|
|
172
|
+
<img class="empty-state-illustration" src="./空状态/暂无查询结果.png" alt="暂无查询结果" />
|
|
173
|
+
<div class="empty-state-text">
|
|
174
|
+
<p class="empty-state-title">暂无查询结果</p>
|
|
175
|
+
<p class="empty-state-subtitle">请调整筛选条件后重试</p>
|
|
176
|
+
</div>
|
|
177
|
+
<div class="empty-state-actions">
|
|
178
|
+
<button class="btn-empty-primary">重新查询</button>
|
|
179
|
+
<button class="btn-empty-secondary">查看帮助</button>
|
|
180
|
+
</div>
|
|
181
|
+
</div>
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## CSS
|
|
187
|
+
|
|
188
|
+
```css
|
|
189
|
+
/* 空状态容器 */
|
|
190
|
+
.empty-state {
|
|
191
|
+
display: flex;
|
|
192
|
+
flex-direction: column;
|
|
193
|
+
justify-content: flex-start;
|
|
194
|
+
align-items: center;
|
|
195
|
+
width: 480px;
|
|
196
|
+
min-height: 430px;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/* 插画 */
|
|
200
|
+
.empty-state-illustration {
|
|
201
|
+
display: block;
|
|
202
|
+
width: 160px;
|
|
203
|
+
height: 160px;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/* 文字区 */
|
|
207
|
+
.empty-state-text {
|
|
208
|
+
display: flex;
|
|
209
|
+
flex-direction: column;
|
|
210
|
+
justify-content: flex-start;
|
|
211
|
+
align-items: center;
|
|
212
|
+
gap: 12px;
|
|
213
|
+
padding-top: 16px;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/* 标题 */
|
|
217
|
+
.empty-state-title {
|
|
218
|
+
color: var(--color-grey-6);
|
|
219
|
+
font-size: 20px;
|
|
220
|
+
line-height: 28px;
|
|
221
|
+
font-weight: 600;
|
|
222
|
+
font-family: PingFang SC;
|
|
223
|
+
text-align: center;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/* 次级说明 */
|
|
227
|
+
.empty-state-subtitle {
|
|
228
|
+
max-width: 384px;
|
|
229
|
+
color: var(--color-black-4);
|
|
230
|
+
font-size: 16px;
|
|
231
|
+
line-height: 22px;
|
|
232
|
+
font-weight: 400;
|
|
233
|
+
font-family: PingFang SC;
|
|
234
|
+
text-align: center;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/* 按钮区 */
|
|
238
|
+
.empty-state-actions {
|
|
239
|
+
display: flex;
|
|
240
|
+
flex-direction: column;
|
|
241
|
+
justify-content: flex-start;
|
|
242
|
+
align-items: center;
|
|
243
|
+
gap: 16px;
|
|
244
|
+
padding-top: 32px;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/* 主按钮 */
|
|
248
|
+
.btn-empty-primary {
|
|
249
|
+
width: 240px;
|
|
250
|
+
min-height: 46px;
|
|
251
|
+
display: flex;
|
|
252
|
+
justify-content: center;
|
|
253
|
+
align-items: center;
|
|
254
|
+
background: var(--color-main-6);
|
|
255
|
+
color: var(--color-grey-1);
|
|
256
|
+
font-size: 16px;
|
|
257
|
+
line-height: 22px;
|
|
258
|
+
font-weight: 600;
|
|
259
|
+
font-family: PingFang SC;
|
|
260
|
+
border-radius: 4px;
|
|
261
|
+
border: none;
|
|
262
|
+
cursor: pointer;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/* 次按钮(线条) */
|
|
266
|
+
.btn-empty-secondary {
|
|
267
|
+
width: 240px;
|
|
268
|
+
min-height: 46px;
|
|
269
|
+
display: flex;
|
|
270
|
+
justify-content: center;
|
|
271
|
+
align-items: center;
|
|
272
|
+
background: var(--color-grey-1);
|
|
273
|
+
color: var(--color-main-6);
|
|
274
|
+
font-size: 16px;
|
|
275
|
+
line-height: 22px;
|
|
276
|
+
font-weight: 600;
|
|
277
|
+
font-family: PingFang SC;
|
|
278
|
+
border: 1px solid var(--color-main-6);
|
|
279
|
+
border-radius: 4px;
|
|
280
|
+
cursor: pointer;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/* 文字按钮组 */
|
|
284
|
+
.empty-state-text-links {
|
|
285
|
+
display: flex;
|
|
286
|
+
flex-direction: row;
|
|
287
|
+
justify-content: center;
|
|
288
|
+
align-items: center;
|
|
289
|
+
gap: 12px;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/* 文字链接 */
|
|
293
|
+
.btn-empty-text-link {
|
|
294
|
+
color: var(--color-main-6);
|
|
295
|
+
font-size: 16px;
|
|
296
|
+
line-height: 22px;
|
|
297
|
+
font-weight: 400;
|
|
298
|
+
font-family: PingFang SC;
|
|
299
|
+
cursor: pointer;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/* 竖线分隔 */
|
|
303
|
+
.empty-state-divider {
|
|
304
|
+
width: 1px;
|
|
305
|
+
height: 16px;
|
|
306
|
+
background: var(--color-black-2);
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## 颜色 Token
|
|
313
|
+
|
|
314
|
+
| Token | 色值 | 使用场景 |
|
|
315
|
+
|-------|------|---------|
|
|
316
|
+
| `--color-grey-6` | `#52567B` | 标题文字 |
|
|
317
|
+
| `--color-black-4` | `#888888` | 次级标题说明文案 |
|
|
318
|
+
| `--color-main-6` | `#6445D1` | 主按钮背景、次按钮边框与文字、文字链接 |
|
|
319
|
+
| `--color-grey-1` | `#FFFFFF` | 主按钮文字、次按钮背景 |
|
|
320
|
+
| `--color-black-2` | `#DDDDDD` | 文字按钮组分隔竖线 |
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 使用规则(AI 必读)
|
|
325
|
+
|
|
326
|
+
1. **按场景选插画**:根据 `10 张插画` 匹配当前空状态场景(网络/权限/无数据/引导扫描等),不通用插画
|
|
327
|
+
2. **标题必填**:任何时候都显示标题文字,明确告知用户当前状态
|
|
328
|
+
3. **副标题按需**:需要补充说明时显示(如"请调整筛选条件后重试"),简单场景可省略
|
|
329
|
+
4. **按钮按场景显隐**:
|
|
330
|
+
- 网络断开 → 主按钮「重试」
|
|
331
|
+
- 无权限 → 通常无按钮
|
|
332
|
+
- 引导操作 → 文字按钮组(如"创建任务│一键装货")
|
|
333
|
+
5. **文字按钮组最多 2 个**:1 个时不显示分隔符,2 个时中间插入 `│`
|
|
334
|
+
6. **主/次按钮配对**:需要单一操作时只显示主按钮;需要双操作时主按钮 + 次按钮
|
|
335
|
+
7. **按钮沿用规范**:主按钮 = 中号/主色,次按钮 = 中号/线条(主要线条),文字链接 = 文字按钮-小号/主要。详见 [button.md](button.md)
|
|
336
|
+
8. **禁止同时显示主按钮和文字按钮组**:两者场景不同(主动操作 vs 弱引导),不同时出现
|