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,352 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: home-page
|
|
3
|
+
name: HomePage 首页
|
|
4
|
+
category: template
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
tokens:
|
|
7
|
+
pageWidth: 480px
|
|
8
|
+
pageMinHeight: 844px
|
|
9
|
+
bannerHeight: 260px
|
|
10
|
+
searchBarHeight: 64px
|
|
11
|
+
searchBarBorder: 3px
|
|
12
|
+
taskCardHeight: 109px
|
|
13
|
+
funcGridCols: 4
|
|
14
|
+
funcIconSize: 44px
|
|
15
|
+
tabBarHeight: 70px
|
|
16
|
+
borderRadius: rounded
|
|
17
|
+
composes:
|
|
18
|
+
- tab-bar (底部 4 项标签栏)
|
|
19
|
+
- scan-input (搜索扫描条)
|
|
20
|
+
- task-cards (待取/待派看板卡片)
|
|
21
|
+
- function-grid (4×N 功能入口网格)
|
|
22
|
+
sections:
|
|
23
|
+
- id: status-bar
|
|
24
|
+
role: 系统状态栏
|
|
25
|
+
height: 56px
|
|
26
|
+
- id: banner
|
|
27
|
+
role: 顶部品牌区
|
|
28
|
+
height: 260px
|
|
29
|
+
- id: search-bar
|
|
30
|
+
role: 扫描搜索入口
|
|
31
|
+
height: 64px
|
|
32
|
+
- id: task-dashboard
|
|
33
|
+
role: 取派任务看板
|
|
34
|
+
height: 109px
|
|
35
|
+
- id: function-grid
|
|
36
|
+
role: 常用功能入口网格
|
|
37
|
+
cols: 4
|
|
38
|
+
- id: apply-bar
|
|
39
|
+
role: 编辑/全部应用操作栏
|
|
40
|
+
- id: tab-bar
|
|
41
|
+
role: 底部标签导航
|
|
42
|
+
height: 70px
|
|
43
|
+
items: ["首页", "任务", "营地", "我的"]
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
> **🧠 AI 指令 — 强制约束(MANDATORY,违反即错误)**
|
|
47
|
+
>
|
|
48
|
+
> ```yaml
|
|
49
|
+
> NEGATIVE_PROMPTS:
|
|
50
|
+
> - ⛔ 禁止身体居中布局(如 body flex justify-center min-h-screen)
|
|
51
|
+
> - ⛔ 禁止将所有内容放在单一白色卡片中(这是 PDA 全屏页面,不是 Web Card)
|
|
52
|
+
> - ⛔ 禁止顶部 Banner 区域使用纯色(必须使用渐变色 + 模糊背景图)
|
|
53
|
+
> - ⛔ 禁止功能网格使用 rounded-lg / rounded-xl 大圆角
|
|
54
|
+
> - ⛔ 禁止搜索条使用圆角 border-radius ≥ 5px
|
|
55
|
+
> - ⛔ 禁止功能网格行数不足(至少 4 行常用功能)
|
|
56
|
+
> - ⛔ 禁止缺失底部 TabBar(首页必须包含 4 项标签栏)
|
|
57
|
+
> - ⛔ 禁止缺失任务看板卡片(首页固定显示 待取 + 待派 两个任务卡片)
|
|
58
|
+
> - ⛔ 禁止在 HTML 中手写 style="background: var(--color-*)"
|
|
59
|
+
> - ⛔ 禁止使用 transition 属性
|
|
60
|
+
> - ⛔ 禁止手写 SVG <path>,所有图标通过 <svg><use href="#icon_name"/></svg> 调用
|
|
61
|
+
>
|
|
62
|
+
> MANDATORY:
|
|
63
|
+
> - 响应式骨架:移动端 100vw/100vh,桌面端 @media 412×844 沙箱
|
|
64
|
+
> - 布局为 Flex 垂直流式:Banner → SearchBar → TaskCards → FunctionGrid → TabBar
|
|
65
|
+
> - 所有容器圆角 = rounded(4px),不可使用更大圆角
|
|
66
|
+
> - 所有容器禁止 transition
|
|
67
|
+
> - 底部 TabBar 固定 4 项:首页(选中)/ 任务 / 营地 / 我的
|
|
68
|
+
> - 顶部必须包含 StatusBar(时间 + 信号/WiFi/电池图标)
|
|
69
|
+
> ```
|
|
70
|
+
>
|
|
71
|
+
> ```css
|
|
72
|
+
> /* ⛔ AI 必须逐字复制的强制 CSS */
|
|
73
|
+
> .home-banner { height: 260px; flex-shrink: 0; position: relative; overflow: hidden; }
|
|
74
|
+
> .scan-search-bar {
|
|
75
|
+
> display: flex; align-items: center; height: 64px;
|
|
76
|
+
> margin: 0 12px; padding: 0 16px;
|
|
77
|
+
> background: var(--color-grey-1);
|
|
78
|
+
> border: 3px solid var(--color-black-6);
|
|
79
|
+
> border-radius: 4px;
|
|
80
|
+
> }
|
|
81
|
+
> .task-dashboard { display: flex; gap: 12px; margin: 12px 12px 0; }
|
|
82
|
+
> .task-card { flex: 1; height: 109px; border-radius: 4px; border: 1px solid var(--color-grey-1); }
|
|
83
|
+
> .function-grid { display: flex; flex-wrap: wrap; }
|
|
84
|
+
> .func-item { width: 25%; /* 4 列 */ }
|
|
85
|
+
> .tab-bar { display: flex; justify-content: space-around; height: 70px; }
|
|
86
|
+
> /* ⛔ 无 transition */
|
|
87
|
+
> ```
|
|
88
|
+
>
|
|
89
|
+
> ```yaml
|
|
90
|
+
> # 上下文锚点 — AI 在生成首页时,必须连带调用以下组件规范:
|
|
91
|
+
> DEPENDENCIES:
|
|
92
|
+
> - layout-page.md (响应式骨架)
|
|
93
|
+
> - tab-bar.md (底部 4 项标签栏)
|
|
94
|
+
> - scan-input.md (搜索扫描条)
|
|
95
|
+
> - button.md (全部应用按钮)
|
|
96
|
+
> - icons.md (图标字典,禁止手写 path)
|
|
97
|
+
> ```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
# HomePage 首页
|
|
102
|
+
|
|
103
|
+
> **PDA 应用主入口页面模板。** 所有 PDA 业务应用启动后看到的首页,必须按此模板组装。首页为固定样式的特写页面,不可大幅调整布局层级。
|
|
104
|
+
|
|
105
|
+
## 语义结构(Semantic Structure)
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
┌─────────────────────────────────────────┐
|
|
109
|
+
│ #app-shell(响应式容器) │
|
|
110
|
+
│ ┌─────────────────────────────────────┐ │
|
|
111
|
+
│ │ StatusBar (56px) │ │ ← 时间 + 信号/WiFi/电池
|
|
112
|
+
│ ├─────────────────────────────────────┤ │
|
|
113
|
+
│ │ Banner (260px) │ │ ← 品牌色渐变 + 模糊背景
|
|
114
|
+
│ │ ├─ 欢迎语(用户头像 + "上午好,张师傅") │
|
|
115
|
+
│ ├─────────────────────────────────────┤ │
|
|
116
|
+
│ │ ScanSearchBar (64px, 3px 黑色边框) │ │ ← 扫运单查件/搜索模块
|
|
117
|
+
│ ├─────────────────────────────────────┤ │
|
|
118
|
+
│ │ TaskDashboard (109px) │ │ ← 待取(5) + 待派(22)
|
|
119
|
+
│ │ ├─ TaskCard · 待取 (flex-1) │ │
|
|
120
|
+
│ │ └─ TaskCard · 待派 (flex-1) │ │
|
|
121
|
+
│ ├─────────────────────────────────────┤ │
|
|
122
|
+
│ │ FunctionGrid (4cols × 4rows) │ │ ← 常用功能入口
|
|
123
|
+
│ │ ├─ Row1: 代理标签/拒收退单/交接扫描/发件扫描 │
|
|
124
|
+
│ │ ├─ Row2: 代理标签/拒收退单/仓库管理/发件扫描 │
|
|
125
|
+
│ │ ├─ Row3: 代理标签/拒收退单/配载建包/自动转运 │
|
|
126
|
+
│ │ └─ Row4: 代理标签/拒收退单/少货管理/添加工具 │
|
|
127
|
+
│ ├─────────────────────────────────────┤ │
|
|
128
|
+
│ │ ApplyBar(编辑 + 全部应用按钮) │ │
|
|
129
|
+
│ ├─────────────────────────────────────┤ │
|
|
130
|
+
│ │ TabBar (70px) │ │ ← 首页/任务/营地/我的
|
|
131
|
+
│ └─────────────────────────────────────┘ │
|
|
132
|
+
└─────────────────────────────────────────┘
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## 区域详规
|
|
136
|
+
|
|
137
|
+
### 1. StatusBar — 系统状态栏
|
|
138
|
+
|
|
139
|
+
| 属性 | 值 |
|
|
140
|
+
|------|-----|
|
|
141
|
+
| 高度 | 56px |
|
|
142
|
+
| 左侧 | 时间文本(17.92px/600, `--color-black-7`) |
|
|
143
|
+
| 右侧 | 信号 + WiFi + 电池图标 |
|
|
144
|
+
| 背景 | 透明(叠在 Banner 上) |
|
|
145
|
+
| Z-index | 高于 Banner |
|
|
146
|
+
|
|
147
|
+
### 2. Banner — 顶部品牌区
|
|
148
|
+
|
|
149
|
+
| 属性 | 值 |
|
|
150
|
+
|------|-----|
|
|
151
|
+
| 高度 | 260px |
|
|
152
|
+
| 宽度 | 100%(跟随容器) |
|
|
153
|
+
| 背景 | 品牌紫渐变(`--color-main-2` → `--color-main-1`)+ 20px 模糊覆盖图 |
|
|
154
|
+
| 渐变叠加 | `linear-gradient(180deg, rgba(247,247,249,0) 0%, var(--color-grey-2) 100%)` |
|
|
155
|
+
| 欢迎语 | 用户头像(48×48) + "上午好,\n张师傅" |
|
|
156
|
+
| 欢迎语位置 | 左上角,距左 28px,距顶 68px |
|
|
157
|
+
|
|
158
|
+
### 3. ScanSearchBar — 扫描搜索条
|
|
159
|
+
|
|
160
|
+
| 属性 | 值 |
|
|
161
|
+
|------|-----|
|
|
162
|
+
| 高度 | 64px |
|
|
163
|
+
| 左右边距 | 12px |
|
|
164
|
+
| 背景 | `--color-grey-1` |
|
|
165
|
+
| 边框 | `3px solid --color-black-6` |
|
|
166
|
+
| 圆角 | 4px |
|
|
167
|
+
| 左侧图标 | `common_ic_scanning_o`(21×21px,`--color-main-6`) |
|
|
168
|
+
| 占位文字 | "扫运单查件/搜索模块" |
|
|
169
|
+
| 占位颜色 | `--color-black-3` |
|
|
170
|
+
| 占位字号 | 20px/400 |
|
|
171
|
+
| 触发方式 | PDA 物理扫描键 / 点击跳转查件页 |
|
|
172
|
+
|
|
173
|
+
### 4. TaskDashboard — 任务看板
|
|
174
|
+
|
|
175
|
+
| 属性 | 值 |
|
|
176
|
+
|------|-----|
|
|
177
|
+
| 布局 | 2 列等宽,flex gap: 12px |
|
|
178
|
+
| 卡片高度 | 109px |
|
|
179
|
+
| 圆角 | 4px |
|
|
180
|
+
| 边框 | `1px solid --color-grey-1` |
|
|
181
|
+
|
|
182
|
+
**待取卡片**:
|
|
183
|
+
| 属性 | 值 |
|
|
184
|
+
|------|-----|
|
|
185
|
+
| 背景 | `linear-gradient(7deg, var(--color-grey-1) 5%, rgba(240,242,255,0.44) 98%)` |
|
|
186
|
+
| 标签文字 | "待取"(20px/600) |
|
|
187
|
+
| 数字 | "5"(28px/700,`--color-main-6`) |
|
|
188
|
+
| 单位 | "任务"(18px/400,`--color-black-5`) |
|
|
189
|
+
| 装饰 | 右下角半透明盒子图标 |
|
|
190
|
+
|
|
191
|
+
**待派卡片**:
|
|
192
|
+
| 属性 | 值 |
|
|
193
|
+
|------|-----|
|
|
194
|
+
| 背景 | `linear-gradient(16deg, var(--color-grey-1) 5%, #f3f6ff 99%)` |
|
|
195
|
+
| 标签文字 | "待派"(20px/600) |
|
|
196
|
+
| 数字 | "22"(28px/700,`--color-main-6`) |
|
|
197
|
+
| 单位 | "票"(18px/400,`--color-black-5`) |
|
|
198
|
+
| 装饰 | 右下角半透明盒子图标 |
|
|
199
|
+
|
|
200
|
+
### 5. FunctionGrid — 常用功能网格
|
|
201
|
+
|
|
202
|
+
| 属性 | 值 |
|
|
203
|
+
|------|-----|
|
|
204
|
+
| 布局 | 4 列 flex-wrap |
|
|
205
|
+
| 容器背景 | `--color-grey-1` |
|
|
206
|
+
| 容器圆角 | 4px |
|
|
207
|
+
| 容器边距 | 0 12px |
|
|
208
|
+
| 顶部标题 | "常用功能"(20px/600)+ 右侧「编辑」按钮 |
|
|
209
|
+
| 标题下方分割线 | `1px solid --color-grey-3`,左右边距 16px |
|
|
210
|
+
|
|
211
|
+
**网格项**:
|
|
212
|
+
| 属性 | 值 |
|
|
213
|
+
|------|-----|
|
|
214
|
+
| 宽度 | 25%(4 列) |
|
|
215
|
+
| 图标容器 | 44×44px |
|
|
216
|
+
| 图标尺寸 | 36×36px |
|
|
217
|
+
| 图标颜色 | `--color-main-6` |
|
|
218
|
+
| 文字字号 | 16px/400 |
|
|
219
|
+
| 文字颜色 | `--color-black-6` |
|
|
220
|
+
| 按下态 | `background: --color-main-1` |
|
|
221
|
+
|
|
222
|
+
**默认 4×4 功能列表**(从左到右,从上到下):
|
|
223
|
+
|
|
224
|
+
| 列1 | 列2 | 列3 | 列4 |
|
|
225
|
+
|-----|-----|-----|-----|
|
|
226
|
+
| 代理标签 | 拒收退单 | 交接扫描 | 发件扫描 |
|
|
227
|
+
| 代理标签 | 拒收退单 | 仓库管理 | 发件扫描 |
|
|
228
|
+
| 代理标签 | 拒收退单 | 配载建包 | 自动转运 |
|
|
229
|
+
| 代理标签 | 拒收退单 | 少货管理 | 添加工具 |
|
|
230
|
+
|
|
231
|
+
> 功能网格支持编辑模式(通过右上角「编辑」按钮进入)。编辑模式下可拖拽排序、删除/添加功能项。静态展示时按照上述默认排列。
|
|
232
|
+
|
|
233
|
+
### 6. ApplyBar — 编辑/应用操作栏
|
|
234
|
+
|
|
235
|
+
| 属性 | 值 |
|
|
236
|
+
|------|-----|
|
|
237
|
+
| 布局 | flex,右对齐 |
|
|
238
|
+
| 编辑按钮 | 编辑图标(20×20) + "编辑"文字(18px/400,`--color-main-6`) |
|
|
239
|
+
| 分隔线 | `1px × 11px, --color-main-1` |
|
|
240
|
+
| 全部应用按钮 | 小号按钮,`padding: 6px 12px` |
|
|
241
|
+
| 按钮背景 | `--color-main-6` |
|
|
242
|
+
| 按钮文字 | "全部应用"(16px/400,`--color-grey-1`)+ 右侧箭头图标 |
|
|
243
|
+
|
|
244
|
+
### 7. TabBar — 底部标签栏
|
|
245
|
+
|
|
246
|
+
| 属性 | 值 |
|
|
247
|
+
|------|-----|
|
|
248
|
+
| 高度 | 70px |
|
|
249
|
+
| 背景 | `--color-grey-1` |
|
|
250
|
+
| 顶部边框 | `1px solid --color-grey-3` |
|
|
251
|
+
| 项数 | 4 项,等宽分布 |
|
|
252
|
+
|
|
253
|
+
| 序号 | 标签名 | 图标 | 默认态 |
|
|
254
|
+
|------|--------|------|:------:|
|
|
255
|
+
| 1 | 首页 | ic_tab_home | **选中**(`--color-main-6`) |
|
|
256
|
+
| 2 | 任务 | ic_tab_task | 未选(`--color-black-4`) |
|
|
257
|
+
| 3 | 营地 | ic_tab_apps | 未选(`--color-black-4`) |
|
|
258
|
+
| 4 | 我的 | ic_tab_mine | 未选(`--color-black-4`) |
|
|
259
|
+
|
|
260
|
+
> 底部标签栏规格详见 [tab-bar.md](tab-bar.md)。
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## 布局约束(Layout Constraints)
|
|
265
|
+
|
|
266
|
+
| 约束 | 值 |
|
|
267
|
+
|------|-----|
|
|
268
|
+
| 外层容器 | `width: 100vw; height: 100vh; overflow: hidden`(移动端) |
|
|
269
|
+
| 桌面沙箱 | `@media (min-width: 768px) { width: 412px; height: 844px; border-radius: 16px; box-shadow }` |
|
|
270
|
+
| 内容滚动 | `.page-content { flex: 1; overflow-y: auto }` |
|
|
271
|
+
| 页面级滚动容器 | 必须设 `flex-1` 和 `overflow-y-auto` |
|
|
272
|
+
| 底部 TabBar | `flex-shrink: 0`(固定在底部,不随页面滚动) |
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Tailwind 实现参考
|
|
277
|
+
|
|
278
|
+
```html
|
|
279
|
+
<!-- 结构骨架(Tailwind 类名版本) -->
|
|
280
|
+
<div id="app-shell" class="w-screen h-screen flex flex-col overflow-hidden">
|
|
281
|
+
|
|
282
|
+
<!-- 可滚动内容区 -->
|
|
283
|
+
<div class="flex-1 overflow-y-auto flex flex-col">
|
|
284
|
+
|
|
285
|
+
<!-- Banner -->
|
|
286
|
+
<div class="relative flex-shrink-0 h-[260px] overflow-hidden">
|
|
287
|
+
<div class="absolute inset-0 bg-gradient-to-b from-main-2 to-main-1"></div>
|
|
288
|
+
<div class="absolute inset-0 bg-gradient-to-b from-transparent to-grey-2"></div>
|
|
289
|
+
</div>
|
|
290
|
+
|
|
291
|
+
<!-- Search Bar -->
|
|
292
|
+
<div class="flex items-center h-16 mx-3 px-4 bg-grey-1 border-3 border-black-6 rounded gap-2">
|
|
293
|
+
<svg class="w-[21px] h-[21px] text-main-6"><use href="#ic_scanning"/></svg>
|
|
294
|
+
<span class="text-20 text-black-3">扫运单查件/搜索模块</span>
|
|
295
|
+
</div>
|
|
296
|
+
|
|
297
|
+
<!-- Task Cards -->
|
|
298
|
+
<div class="flex gap-3 mx-3 mt-3">
|
|
299
|
+
<div class="flex-1 h-[109px] rounded border border-grey-1 p-4 bg-gradient-to-br from-grey-1 to-main-1/10">
|
|
300
|
+
<div class="text-20 font-semibold text-black-6">待取</div>
|
|
301
|
+
<div class="flex items-baseline gap-2 mt-2">
|
|
302
|
+
<strong class="text-[28px] font-bold text-main-6">5</strong>
|
|
303
|
+
<span class="text-18 text-black-5">任务</span>
|
|
304
|
+
</div>
|
|
305
|
+
</div>
|
|
306
|
+
<!-- 待派同理 -->
|
|
307
|
+
</div>
|
|
308
|
+
|
|
309
|
+
<!-- Function Grid -->
|
|
310
|
+
<!-- 4×N 网格,每项 25% 宽度 -->
|
|
311
|
+
|
|
312
|
+
</div>
|
|
313
|
+
|
|
314
|
+
<!-- TabBar (flex-shrink: 0) -->
|
|
315
|
+
<div class="flex justify-around h-[70px] bg-grey-1 border-t border-grey-3 flex-shrink-0">
|
|
316
|
+
<!-- 4 项标签 -->
|
|
317
|
+
</div>
|
|
318
|
+
|
|
319
|
+
</div>
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 颜色 Token
|
|
325
|
+
|
|
326
|
+
| Token | 色值 | 使用场景 |
|
|
327
|
+
|-------|------|---------|
|
|
328
|
+
| `--color-main-6` | `#6445d1` | TabBar 选中态、数字高亮、功能图标、编辑按钮 |
|
|
329
|
+
| `--color-main-2` | `#d4c2f4` | Banner 渐变起点 |
|
|
330
|
+
| `--color-main-1` | `#f1e7ff` | Banner 渐变终点、功能网格按下态 |
|
|
331
|
+
| `--color-grey-1` | `#ffffff` | 搜索条背景、功能网格背景、TabBar 背景 |
|
|
332
|
+
| `--color-grey-2` | `#f3f4f6` | 页面底色、Banner 渐变终点 |
|
|
333
|
+
| `--color-grey-3` | `#e0e4f0` | 分割线、TabBar 顶部边框 |
|
|
334
|
+
| `--color-black-6` | `#333333` | 搜索条边框、卡片标签、功能文字 |
|
|
335
|
+
| `--color-black-5` | `#666666` | 任务看板单位文字 |
|
|
336
|
+
| `--color-black-4` | `#888888` | TabBar 未选中态 |
|
|
337
|
+
| `--color-black-3` | `#bbbbbb` | 搜索条占位文字 |
|
|
338
|
+
| `--color-black-7` | `#000000` | StatusBar 时间 |
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## 使用规则(AI 必读)
|
|
343
|
+
|
|
344
|
+
1. **首页为固定样式的特写页面**:本文档定义的 Banner 高度(260px)、搜索条高度(64px)、卡片高度(109px)、功能网格列数(4 列)、TabBar 高度(70px)均为硬性约束
|
|
345
|
+
2. **布局不可破坏**:页面从上到下必须保持 Banner → SearchBar → TaskDashboard → FunctionGrid → TabBar 的顺序
|
|
346
|
+
3. **功能网格最少 4 行**:行数不够时用占位项填充,不可缩减为 2 行或 3 行
|
|
347
|
+
4. **TabBar 固定 4 项**:首页选中态固定为「首页」,其余 3 项为「任务/营地/我的」
|
|
348
|
+
5. **图标必须使用 Sprite**:所有图标通过 `<svg><use href="#icon_name"/></svg>` 调用,不可手写 path
|
|
349
|
+
6. **禁止 Web 居中思维**:壳容器为全屏布局,不可在 body 上 `justify-content: center`
|
|
350
|
+
7. **响应式沙箱**:桌面端自动缩小为 412×844px 预览窗口
|
|
351
|
+
8. **功能网格支持编辑模式**:右上角「编辑」按钮进入编辑态,可排序/增删功能项
|
|
352
|
+
9. **用户欢迎语**:固定格式「{时段}好,{姓名}」,时段根据当前时间自动判断(上午好/下午好/晚上好)
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: input-row
|
|
3
|
+
name: 输入行 Input Row
|
|
4
|
+
category: "表单/Form"
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
source: PDAKit-基础组件
|
|
7
|
+
source_url: https://mastergo.ky-tech.com.cn/goto/UgR7AUO8
|
|
8
|
+
source_doc_id: 103417331857122
|
|
9
|
+
component_count: 1
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 输入行 Input Row
|
|
13
|
+
|
|
14
|
+
表单行容器,支持 **标题 + 输入/选择/标签** 的灵活组合。每条占一行,白色背景,底部 1px 分割线。常用于详情表单、设置页等「标题:值」型列表。
|
|
15
|
+
|
|
16
|
+
> **颜色规则**:全部使用 Token(`--color-{色系}-{色阶}`),禁止 Hex。
|
|
17
|
+
> **字体**:PingFang SC。
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 容器规格
|
|
22
|
+
|
|
23
|
+
| 属性 | 值 |
|
|
24
|
+
|------|-----|
|
|
25
|
+
| 宽度 | `480px`(撑满父容器) |
|
|
26
|
+
| 高度 | `70px` |
|
|
27
|
+
| 背景 | `--color-grey-1`(`#FFFFFF`) |
|
|
28
|
+
| 布局 | 垂直排列(`flex-col`),内容行 + 底部分割线 |
|
|
29
|
+
| 内容行内边距 | `16px` |
|
|
30
|
+
| 内容行间距 | `gap: 16px`(左侧标题 ↔ 右侧内容) |
|
|
31
|
+
| 底部线条 | `1px` 高,`--color-black-2`(`#DDDDDD`),撑满宽度 |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 三种内容模式
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
┌──────────────────────────────────────────────┐
|
|
39
|
+
│ mode 1: 纯输入(带箭头) │
|
|
40
|
+
│ ┌──────────┬──────────────────────┬────────┐ │
|
|
41
|
+
│ │ 标题名称 │ 请输入 │ > │ │
|
|
42
|
+
│ │ (120px) │ (272px placeholder) │ (箭头) │ │
|
|
43
|
+
│ └──────────┴──────────────────────┴────────┘ │
|
|
44
|
+
│ ──────────────────────────────────────────── │ 1px 线
|
|
45
|
+
├──────────────────────────────────────────────┤
|
|
46
|
+
│ mode 2: 选项选择 │
|
|
47
|
+
│ ┌──────────┬───────────────────────────────┐ │
|
|
48
|
+
│ │ 标题名称 ?│ ○ 选项1 ○ 选项2 ○ 选项3 │ │
|
|
49
|
+
│ │ (帮助)│ (radio 图标 28×28) │ │
|
|
50
|
+
│ └──────────┴───────────────────────────────┘ │
|
|
51
|
+
│ ──────────────────────────────────────────── │
|
|
52
|
+
├──────────────────────────────────────────────┤
|
|
53
|
+
│ mode 3: 输入 + 统计标签 │
|
|
54
|
+
│ ┌──────────┬──────────────────────┬────────┐ │
|
|
55
|
+
│ │ 标题名称 │ 请输入 │ [2] > │ │
|
|
56
|
+
│ │ [标签] │ (272px placeholder) │(计数) │ │
|
|
57
|
+
│ └──────────┴──────────────────────┴────────┘ │
|
|
58
|
+
│ ──────────────────────────────────────────── │
|
|
59
|
+
└──────────────────────────────────────────────┘
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Mode 1:纯输入(文本输入 + 箭头)
|
|
63
|
+
|
|
64
|
+
| 属性 | 值 |
|
|
65
|
+
|------|------|
|
|
66
|
+
| **左侧** | 标题,宽 `120px`,`font-size: 20px`,`font-weight: 600`,`color: #333333` |
|
|
67
|
+
| **右侧-输入区** | flex-1,占位符文案 `"请输入"`,`font-size: 20px`,`color: #BBBBBB` |
|
|
68
|
+
| **右侧-图标** | 箭头图标 `common_ic_arrow_right_o.svg`,`24×24` |
|
|
69
|
+
|
|
70
|
+
> 右侧箭头表示可点击进入下一级页面或触发关联组件。
|
|
71
|
+
|
|
72
|
+
### Mode 2:选项选择(Radio 组)
|
|
73
|
+
|
|
74
|
+
| 属性 | 值 |
|
|
75
|
+
|------|------|
|
|
76
|
+
| **左侧** | 标题 + 帮助图标 `common_ic_help_o.svg`(`22×22`) |
|
|
77
|
+
| **右侧** | 选项组,flex-row + `gap: 16px` |
|
|
78
|
+
| **单选项** | Radio 图标(`28×28`)+ 文本(`font-size: 20px`),`gap: 8px` |
|
|
79
|
+
| **未选中 Radio** | `common_ic_radio_o.svg` |
|
|
80
|
+
|
|
81
|
+
### Mode 3:输入 + 统计标签
|
|
82
|
+
|
|
83
|
+
| 属性 | 值 |
|
|
84
|
+
|------|------|
|
|
85
|
+
| **左侧** | 标题 + 标签徽章(详见「标签徽章」子组件) |
|
|
86
|
+
| **右侧-输入区** | 同 Mode 1 |
|
|
87
|
+
| **右侧-统计** | 数字标签(`font-size: 18px`,`color: #383B6F`)+ 箭头图标 `24×24` |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 子组件:标签徽章
|
|
92
|
+
|
|
93
|
+
用于标题旁或统计区的小标签。
|
|
94
|
+
|
|
95
|
+
| 属性 | 值 |
|
|
96
|
+
|------|------|
|
|
97
|
+
| 背景 | `--color-grey-2`(`#F3F4F6`) |
|
|
98
|
+
| 边框 | `1px solid --color-grey-3`(`#E0E4F0`) |
|
|
99
|
+
| 圆角 | `8px` |
|
|
100
|
+
| 内边距 | `4px 8px`(上下 4px,左右 8px) |
|
|
101
|
+
| 文字 | `font-size: 18px`,`line-height: 25px`,`color: --color-grey-7`(`#383B6F`) |
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 尺寸速查
|
|
106
|
+
|
|
107
|
+
| 元素 | 值 |
|
|
108
|
+
|------|------|
|
|
109
|
+
| 容器 | `480 × 70px` |
|
|
110
|
+
| 内容行高度 | `69px`(= 70 - 1px 线) |
|
|
111
|
+
| 内容行 padding | `16px` |
|
|
112
|
+
| 标题宽度 | `120px`(最小) |
|
|
113
|
+
| 标题字号 | `20px / 28px`,Semibold(`600`) |
|
|
114
|
+
| 占位符字号 | `20px / 28px` |
|
|
115
|
+
| 占位符颜色 | `--color-black-3`(`#BBBBBB`) |
|
|
116
|
+
| 右侧图标 | `24 × 24px` |
|
|
117
|
+
| 帮助图标 | `22 × 22px` |
|
|
118
|
+
| Radio 图标 | `28 × 28px` |
|
|
119
|
+
| 标签字号 | `18px / 25px` |
|
|
120
|
+
| 标签圆角 | `8px` |
|
|
121
|
+
| 标签 padding | `4px 8px` |
|
|
122
|
+
| 分割线 | `1px`,`--color-black-2` |
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## HTML 示例
|
|
127
|
+
|
|
128
|
+
### Mode 1:纯输入
|
|
129
|
+
|
|
130
|
+
```html
|
|
131
|
+
<!-- 单行输入 -->
|
|
132
|
+
<div class="input-row">
|
|
133
|
+
<div class="input-row-body">
|
|
134
|
+
<div class="input-row-left">
|
|
135
|
+
<span class="input-title">标题名称</span>
|
|
136
|
+
</div>
|
|
137
|
+
<div class="input-row-right">
|
|
138
|
+
<span class="input-placeholder">请输入</span>
|
|
139
|
+
<img src="./icons/assets/common_ic_arrow_right_o.svg" class="ic-arrow" width="24" height="24" alt="">
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
<div class="input-divider"></div>
|
|
143
|
+
</div>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Mode 2:选项选择
|
|
147
|
+
|
|
148
|
+
```html
|
|
149
|
+
<!-- 单行选择 -->
|
|
150
|
+
<div class="input-row">
|
|
151
|
+
<div class="input-row-body">
|
|
152
|
+
<div class="input-row-left">
|
|
153
|
+
<span class="input-title">标题名称</span>
|
|
154
|
+
<img src="./icons/assets/common_ic_help_o.svg" class="ic-help" width="22" height="22" alt="">
|
|
155
|
+
</div>
|
|
156
|
+
<div class="input-row-right">
|
|
157
|
+
<div class="radio-group">
|
|
158
|
+
<label class="radio-option">
|
|
159
|
+
<img src="./icons/assets/common_ic_radio_o.svg" width="28" height="28" alt="">
|
|
160
|
+
<span>选项1</span>
|
|
161
|
+
</label>
|
|
162
|
+
<label class="radio-option">
|
|
163
|
+
<img src="./icons/assets/common_ic_radio_o.svg" width="28" height="28" alt="">
|
|
164
|
+
<span>选项2</span>
|
|
165
|
+
</label>
|
|
166
|
+
<label class="radio-option">
|
|
167
|
+
<img src="./icons/assets/common_ic_radio_o.svg" width="28" height="28" alt="">
|
|
168
|
+
<span>选项3</span>
|
|
169
|
+
</label>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
</div>
|
|
173
|
+
<div class="input-divider"></div>
|
|
174
|
+
</div>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Mode 3:输入 + 统计标签
|
|
178
|
+
|
|
179
|
+
```html
|
|
180
|
+
<!-- 单行输入 + 统计 -->
|
|
181
|
+
<div class="input-row">
|
|
182
|
+
<div class="input-row-body">
|
|
183
|
+
<div class="input-row-left">
|
|
184
|
+
<span class="input-title">标题名称</span>
|
|
185
|
+
<span class="input-tag">标签</span>
|
|
186
|
+
</div>
|
|
187
|
+
<div class="input-row-right">
|
|
188
|
+
<span class="input-placeholder">请输入</span>
|
|
189
|
+
<div class="input-count">
|
|
190
|
+
<span class="input-tag">2</span>
|
|
191
|
+
<img src="./icons/assets/common_ic_arrow_right_o.svg" width="24" height="24" alt="">
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
</div>
|
|
195
|
+
<div class="input-divider"></div>
|
|
196
|
+
</div>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## CSS
|
|
202
|
+
|
|
203
|
+
```css
|
|
204
|
+
/* 容器 */
|
|
205
|
+
.input-row {
|
|
206
|
+
width: 100%;
|
|
207
|
+
height: 70px;
|
|
208
|
+
display: flex;
|
|
209
|
+
flex-direction: column;
|
|
210
|
+
background: var(--color-grey-1);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/* 底部 1px 分割线 */
|
|
214
|
+
.input-divider {
|
|
215
|
+
width: 100%;
|
|
216
|
+
height: 1px;
|
|
217
|
+
flex-shrink: 0;
|
|
218
|
+
background: var(--color-black-2);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/* 内容行 */
|
|
222
|
+
.input-row-body {
|
|
223
|
+
height: 69px;
|
|
224
|
+
display: flex;
|
|
225
|
+
align-items: center;
|
|
226
|
+
gap: 16px;
|
|
227
|
+
padding: 16px;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* 左侧标题区 */
|
|
231
|
+
.input-row-left {
|
|
232
|
+
display: flex;
|
|
233
|
+
flex-shrink: 0;
|
|
234
|
+
align-items: center;
|
|
235
|
+
gap: 4px;
|
|
236
|
+
padding: 4px 0;
|
|
237
|
+
width: 120px;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* 标题文字 */
|
|
241
|
+
.input-title {
|
|
242
|
+
color: var(--color-black-6);
|
|
243
|
+
font-size: 20px;
|
|
244
|
+
font-weight: 600;
|
|
245
|
+
line-height: 28px;
|
|
246
|
+
font-family: "PingFang SC";
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* 帮助图标 */
|
|
250
|
+
.ic-help {
|
|
251
|
+
width: 22px;
|
|
252
|
+
height: 22px;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/* 右侧内容区 */
|
|
256
|
+
.input-row-right {
|
|
257
|
+
flex: 1;
|
|
258
|
+
display: flex;
|
|
259
|
+
align-items: center;
|
|
260
|
+
justify-content: flex-end;
|
|
261
|
+
gap: 16px;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/* 占位符 */
|
|
265
|
+
.input-placeholder {
|
|
266
|
+
flex: 1;
|
|
267
|
+
color: var(--color-black-3);
|
|
268
|
+
font-size: 20px;
|
|
269
|
+
line-height: 28px;
|
|
270
|
+
font-family: "PingFang SC";
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/* 箭头图标 */
|
|
274
|
+
.ic-arrow {
|
|
275
|
+
width: 24px;
|
|
276
|
+
height: 24px;
|
|
277
|
+
flex-shrink: 0;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/* 统计区 */
|
|
281
|
+
.input-count {
|
|
282
|
+
display: flex;
|
|
283
|
+
align-items: center;
|
|
284
|
+
justify-content: flex-end;
|
|
285
|
+
gap: 4px;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/* 标签徽章 */
|
|
289
|
+
.input-tag {
|
|
290
|
+
display: flex;
|
|
291
|
+
align-items: center;
|
|
292
|
+
padding: 4px 8px;
|
|
293
|
+
background: var(--color-grey-2);
|
|
294
|
+
border: 1px solid var(--color-grey-3);
|
|
295
|
+
border-radius: 8px;
|
|
296
|
+
font-size: 18px;
|
|
297
|
+
line-height: 25px;
|
|
298
|
+
font-family: "PingFang SC";
|
|
299
|
+
color: var(--color-grey-7);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/* 选项组 */
|
|
303
|
+
.radio-group {
|
|
304
|
+
display: flex;
|
|
305
|
+
align-items: center;
|
|
306
|
+
gap: 16px;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/* 单选项 */
|
|
310
|
+
.radio-option {
|
|
311
|
+
display: flex;
|
|
312
|
+
align-items: center;
|
|
313
|
+
gap: 8px;
|
|
314
|
+
cursor: pointer;
|
|
315
|
+
font-size: 20px;
|
|
316
|
+
line-height: 28px;
|
|
317
|
+
font-family: "PingFang SC";
|
|
318
|
+
color: var(--color-black-6);
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 颜色 Token
|
|
325
|
+
|
|
326
|
+
| Token | 色值 | 使用场景 |
|
|
327
|
+
|-------|------|---------|
|
|
328
|
+
| `--color-grey-1` | `#FFFFFF` | 行容器背景 |
|
|
329
|
+
| `--color-grey-2` | `#F3F4F6` | 标签徽章背景 |
|
|
330
|
+
| `--color-grey-3` | `#E0E4F0` | 标签徽章边框 |
|
|
331
|
+
| `--color-grey-7` | `#383B6F` | 标签文字颜色 |
|
|
332
|
+
| `--color-black-2` | `#DDDDDD` | 底部分割线 |
|
|
333
|
+
| `--color-black-3` | `#BBBBBB` | 占位符文字 |
|
|
334
|
+
| `--color-black-6` | `#333333` | 标题、选项文字 |
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## 使用规则(AI 必读)
|
|
339
|
+
|
|
340
|
+
1. **三模式可组合**:左侧(标题 / 标题+帮助 / 标题+标签) + 右侧(输入 / 选项 / 输入+统计)自由组合
|
|
341
|
+
2. **箭头表示可点击**:右侧出现箭头图标时,表示点击该行可进入下一级页面或触发关联操作
|
|
342
|
+
3. **标题固定 `120px`**:保持对齐一致,内容过长可 flex-grow
|
|
343
|
+
4. **底部必有分割线**:每行底部 `1px` `--color-black-2`,最后一行可选隐藏(`.input-row:last-child .input-divider { display: none }`)
|
|
344
|
+
5. **占位符不可省略**:空输入行必须显示 "请输入" 占位符,颜色 `--color-black-3`
|
|
345
|
+
6. **帮助图标可选**:标题后的 `common_ic_help_o` 为可选元素,有补充说明时展示
|
|
346
|
+
7. **标签徽章类型**:左侧用于分类标识(如「标签」),右侧用于统计计数(如「2」)
|