@teamix-evo/skills 0.11.0 → 0.11.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.
@@ -2,10 +2,11 @@
2
2
  name: page-rule-form
3
3
  parent: page-rule-system
4
4
  description: >
5
- 表单页(PageType: FormPage)模版规则。包含表单页类型定义、子类型识别、属性模型、
6
- 标准布局骨架、组件推荐规则及约束、页面交互补充。基于 @teamix-evo/ui 表单规范构建。
7
- 触发:需要表单页规则、匹配表单页模板、生成表单页。
8
- Version: 7.0
5
+ 表单页(PageType: FormPage)模版规则。覆盖三类容器:FormPage 全页表单、Dialog 弹窗表单、
6
+ Sheet 抽屉表单、Settings 多列卡片表单。包含子类型识别、属性模型、布局骨架、组件推荐、
7
+ 字段交互、OpenTrek 容器模式(OT-FM-1/2/3)。基于 @teamix-evo/ui 表单规范构建。
8
+ 触发:需要表单页规则、匹配表单页模板、生成表单页(含弹窗/抽屉/设置型表单)。
9
+ Version: 7.1
9
10
  ---
10
11
 
11
12
  # 表单页技能
@@ -335,6 +336,388 @@ description: >
335
336
  PageContainer → ContentWrapper → Breadcrumb + PageHeader + Card[FieldGroup] + Separator + Card[FieldGroup] + SubmitBar
336
337
  ```
337
338
 
339
+ ## 7. OpenTrek 表单容器模式
340
+
341
+ > 本章基于 OpenTrek DEV 平台实际页面截图沉淀,定义 **表单容器级** 组合规则。
342
+ > §1-§6 描述的是 **FormPage(L2 全页表单)** 的规则;本章补充 **Dialog / Sheet / Settings** 三种轻量容器模式。
343
+ > 所有 UI 组件引用均指向 `packages/ui/src/components/`,开发时必须从该路径导入。
344
+
345
+ ### 7.1 表单容器模式速查表
346
+
347
+ | 模式 ID | 名称 | 容器 | 典型页面 | 核心结构 |
348
+ |---------|------|------|----------|----------|
349
+ | **OT-FM-1** | Dialog 表单 | 居中弹窗 | 编辑沙箱规格 / 添加自定义数据源 | Dialog → Title + FormFields + Footer |
350
+ | **OT-FM-2** | Sheet 表单 | 右侧抽屉 | 上架Skill / 新建记忆体 | Sheet(side='right') → Title + FormFields + Footer |
351
+ | **OT-FM-3** | Settings 表单 | 内嵌多列卡片 | 整理策略 | Tabs → CardGrid(3col) → SettingsCard × N |
352
+
353
+ #### 模式选择矩阵
354
+
355
+ | 字段数量 | 操作复杂度 | 推荐模式 | 说明 |
356
+ |----------|-----------|----------|------|
357
+ | 1-4 个 | 简单编辑 | **OT-FM-1** (Dialog) | 快速操作,不离开当前页面 |
358
+ | 5-10 个 | 创建/详细编辑 | **OT-FM-2** (Sheet) | 需要更多空间,支持滚动 |
359
+ | 多组开关/策略 | 配置型 | **OT-FM-3** (Settings) | 多维度同时可见,无显式提交 |
360
+ | >10 个 / 含分步 | 复杂表单 | **FormPage** (§4) 或 **WizardPage** | 全页布局或分步向导 |
361
+
362
+ ### 7.2 OT-FM-1:Dialog 表单(居中弹窗)
363
+
364
+ > 典型页面:编辑沙箱规格、添加自定义数据源
365
+
366
+ #### 布局骨架
367
+
368
+ ```
369
+ ┌─ Backdrop (半透明遮罩 rgba(0,0,0,0.5)) ─────────────────────────────┐
370
+ │ │
371
+ │ ┌─ Dialog (components/dialog → DialogContent) ──────────────┐ │
372
+ │ │ DialogHeader: │ │
373
+ │ │ DialogTitle: "编辑沙箱规格" / "添加自定义数据源" │ │
374
+ │ │ Close Button (×) — 右上角 │ │
375
+ │ │ │ │
376
+ │ │ DialogBody (form fields): │ │
377
+ │ │ ┌─ FormField ──────────────────────────────────────┐ │ │
378
+ │ │ │ Label: "沙箱名称" / "数据源名称 *" │ │ │
379
+ │ │ │ Input (full width) │ │ │
380
+ │ │ └──────────────────────────────────────────────────┘ │ │
381
+ │ │ ┌─ FormField (2-col) ──────────────────────────────┐ │ │
382
+ │ │ │ Label: "CPU" │ Label: "内存" │ │ │
383
+ │ │ │ Select ▼ │ Select ▼ │ │ │
384
+ │ │ └──────────────────────────────────────────────────┘ │ │
385
+ │ │ [*可选* 引导区块 / Checkbox / Alert] │ │
386
+ │ │ │ │
387
+ │ │ DialogFooter (right-aligned): │ │
388
+ │ │ [取消] [保存/添加] │ │
389
+ │ └────────────────────────────────────────────────────────────┘ │
390
+ └─────────────────────────────────────────────────────────────────────┘
391
+ ```
392
+
393
+ #### Dialog 尺寸 / Header / Footer 规格
394
+
395
+ | 属性 | 值 | token / 引用 |
396
+ |------|---|-------------|
397
+ | width (小型, ≤4 字段) | 540px | — |
398
+ | width (中型, 5-8 字段) | 640px | — |
399
+ | max-height | `calc(100vh - 120px)` | 超长内容滚动 |
400
+ | border-radius | 12px | `var(--radius-lg)` |
401
+ | padding | 24px | — |
402
+ | backdrop | `rgba(0,0,0,0.5)` | — |
403
+ | title font | 16px / 600 (semibold) | `DialogTitle` |
404
+ | title color | `var(--gray-primary)` | — |
405
+ | close button | 24×24, 右上角, `var(--gray-tertiary)` | `DialogContent` 自带 |
406
+ | header → body 间距 | 20px | — |
407
+ | footer layout | flex, justify-end, gap 12px | — |
408
+ | footer 按钮顺序 | `[取消(outline)] [主操作(default+primary)]` | 右对齐 |
409
+ | footer 距 body | 24px (margin-top) | 无 border-top |
410
+
411
+ #### 字段规格(Dialog)
412
+
413
+ | 属性 | 值 | 说明 |
414
+ |------|---|------|
415
+ | field 垂直间距 | 20px | — |
416
+ | label font | 14px / 500, color `var(--gray-primary)` | — |
417
+ | label → control 间距 | 8px | — |
418
+ | required 标识 | 红色 `*`, color `var(--destructive)` | 紧跟 label |
419
+ | Input/Select height | 36px | `size='default'` |
420
+ | placeholder color | `var(--gray-quaternary)` | — |
421
+
422
+ #### 2-column 字段布局(Dialog 内)
423
+
424
+ > 截图实证:编辑沙箱规格 CPU + 内存 并排
425
+
426
+ ```css
427
+ .dialog-field-row--2col {
428
+ display: grid;
429
+ grid-template-columns: 1fr 1fr;
430
+ gap: 16px;
431
+ }
432
+ ```
433
+
434
+ 适用条件:同类字段可并排(CPU/内存、宽/高)。
435
+
436
+ #### 扩展元素(中型 Dialog)
437
+
438
+ | 元素 | 规格 | UI 组件 |
439
+ |------|------|---------|
440
+ | 引导区块 | 标题 14px/500 + 描述 12px/`var(--gray-tertiary)` + 链接卡片 | — |
441
+ | 链接卡片 | border 1px solid `var(--gray-border)`, radius 8px, padding 12px 16px | `Button` variant='outline' 或自定义 |
442
+ | Checkbox 确认 | 16px checkbox + 14px label | `components/checkbox` → `Checkbox` |
443
+ | Alert 横幅 | variant='warning', 12px, ⚠️ icon, yellow bg | `components/alert` → `Alert` |
444
+
445
+ #### Dialog 表单实例
446
+
447
+ | 页面 | 标题 | 字段 | 主操作 |
448
+ |------|------|------|--------|
449
+ | 沙箱管理 > 编辑 | 编辑沙箱规格 | 沙箱名称(Input) + CPU(Select) + 内存(Select, 2col) | 保存 |
450
+ | 数据源管理 > 添加 | 添加自定义数据源 | 数据源名称*(Input) + 引导区块 + Checkbox + Alert | 添加 |
451
+
452
+ ### 7.3 OT-FM-2:Sheet 表单(右侧抽屉)
453
+
454
+ > 典型页面:上架Skill、新建记忆体
455
+
456
+ #### 布局骨架
457
+
458
+ ```
459
+ ┌─ 原页面(左侧, 被遮罩) ─┬─ Sheet (components/sheet) ─────────────┐
460
+ │ │ SheetHeader: │
461
+ │ │ SheetTitle: "上架Skill" / "新建记忆体" │
462
+ │ │ Close (×) │
463
+ │ │ │
464
+ │ │ SheetBody (scrollable): │
465
+ │ │ FormField → Label + Upload/Input/... │
466
+ │ │ FormField → Label + Select+Settings │
467
+ │ │ FormField → Label + RadioGroup │
468
+ │ │ [Alert warning/info inline] │
469
+ │ │ │
470
+ │ │ SheetFooter (sticky bottom): │
471
+ │ │ [创建/确认上架] [取消] │
472
+ └──────────────────────────┴─────────────────────────────────────────┘
473
+ ```
474
+
475
+ #### Sheet 尺寸 / Header / Footer 规格
476
+
477
+ | 属性 | 值 | token / 引用 |
478
+ |------|---|-------------|
479
+ | side | `right` | 从右滑入 |
480
+ | width (标准) | 480px (~33% viewport) | 字段较少 |
481
+ | width (宽) | 560px (~40% viewport) | 含上传/复杂字段 |
482
+ | height | 100vh | 全屏高 |
483
+ | border-left | 1px solid `var(--gray-border)` | — |
484
+ | shadow | `var(--shadow-lg)` | — |
485
+ | padding | 24px | — |
486
+ | background | `var(--card)` (white) | — |
487
+ | title font | 18px / 600 | `SheetTitle` |
488
+ | header → body 间距 | 24px | — |
489
+ | 右上角辅助文字 | 12px / `var(--primary)` link-style | 可选, 如 "上传文件后将进行扫描" |
490
+ | footer position | sticky bottom: 0 | — |
491
+ | footer border-top | 1px solid `var(--gray-line)` | — |
492
+ | footer padding | 16px 24px | — |
493
+ | footer background | `var(--card)` | 防止内容穿透 |
494
+ | **footer 按钮顺序** | `[主操作(default+primary)] [取消(outline)]` | **主操作在左(与 Dialog 相反)** |
495
+
496
+ #### 字段规格(Sheet)
497
+
498
+ | 属性 | 值 | 说明 |
499
+ |------|---|------|
500
+ | field 垂直间距 | 24px | 比 Dialog 宽松 |
501
+ | label font | 14px / 500, color `var(--gray-primary)` | — |
502
+ | label → control 间距 | 8px | — |
503
+ | required 标识 | 红色 `*`, color `var(--destructive)` | — |
504
+ | description font | 12px / 400, color `var(--gray-tertiary)` | label 下 4px 或 control 下 8px |
505
+
506
+ #### Upload Zone 规格(OT-FM-2 扩展)
507
+
508
+ > 截图实证:上架Skill 的文件上传区
509
+
510
+ | 属性 | 值 | UI 组件 |
511
+ |------|---|---------|
512
+ | border | 1px dashed `var(--gray-border)` | `components/upload` → `Upload` |
513
+ | border-radius | 8px (`var(--radius-md)`) | — |
514
+ | padding | 32px | — |
515
+ | background | `var(--gray-fill-light)` | — |
516
+ | 中心图标 | upload arrow 24px, `var(--gray-tertiary)` | lucide `upload` |
517
+ | 提示文字 | 14px / `var(--gray-secondary)` | "拖拽上传,支持.zip" |
518
+ | 操作按钮 | `Button`(variant='default', color='primary', size='sm') | "查看本地文件" |
519
+ | hover 态 | border-color: `var(--primary)` | — |
520
+
521
+ #### Select + 设置按钮组合(OT-FM-2 扩展)
522
+
523
+ > 截图实证:新建记忆体 - 检索记忆向量模型
524
+
525
+ ```
526
+ ┌─ Select + SettingsButton ───────────────────┐
527
+ │ ┌─ Select (flex: 1) ──────┐ ┌─ IconBtn ─┐ │
528
+ │ │ 选择模型 ▼ │ │ ⚙️ │ │
529
+ │ └─────────────────────────┘ └───────────┘ │
530
+ └─────────────────────────────────────────────┘
531
+ ```
532
+
533
+ | 属性 | 值 | UI 组件 |
534
+ |------|---|---------|
535
+ | layout | flex, gap: 8px | — |
536
+ | Select | flex: 1 | `components/select` → `Select` |
537
+ | SettingsButton | 36×36, variant='outline', icon-only | `Button` + lucide `settings-2` |
538
+
539
+ #### 字段内 Alert 规格
540
+
541
+ > 截图实证:新建记忆体字段下方的提示
542
+
543
+ | 变体 | background | text color | 图标 | UI 组件 |
544
+ |------|-----------|-----------|------|---------|
545
+ | warning (橙) | `hsl(var(--warning) / 0.08)` | `var(--warning)` 或 `var(--destructive)` | ⚠ | `Alert` |
546
+ | info (蓝) | `hsl(var(--primary) / 0.05)` | `var(--gray-secondary)` | ℹ | `Alert` |
547
+
548
+ | 属性 | 值 |
549
+ |------|---|
550
+ | border-radius | `var(--radius-md)` (8px) |
551
+ | padding | 10px 12px |
552
+ | font-size | 12px |
553
+ | margin-top | 8px (距上方 control) |
554
+ | icon size / gap | 14px / 8px |
555
+
556
+ #### Sheet 表单实例
557
+
558
+ | 页面 | 标题 | 字段 | 主操作 |
559
+ |------|------|------|--------|
560
+ | 内置资产 > 上架Skill | 上架Skill | 上传文件*(Upload) + 备注名称(Input) + 分类标签(Select) | 确认上架 |
561
+ | 记忆体 > 新建 | 新建记忆体 | 名称*(Input) + 描述(Textarea) + 模型*(Select+Settings ×2) + 属性*(RadioGroup) | 创建 |
562
+
563
+ ### 7.4 OT-FM-3:Settings 表单(多列配置卡片)
564
+
565
+ > 典型页面:记忆体 > 整理策略
566
+
567
+ #### 布局骨架
568
+
569
+ ```
570
+ ┌─ PageShell ──────────────────────────────────────────────────────┐
571
+ │ sidebar: Sidebar │
572
+ │ children: │
573
+ │ ┌─ Card(白卡容器) ────────────────────────────────────────────┐ │
574
+ │ │ Breadcrumb: 记忆体 > 空间共用 │ │
575
+ │ │ Tabs (variant='line'): │ │
576
+ │ │ [记忆总览 | 生成策略 | **整理策略** | 记忆动态] │ │
577
+ │ │ │ │
578
+ │ │ ┌── SettingsCardGrid (3-col) ──────────────────────────┐ │ │
579
+ │ │ │ ┌─SettingsCard─┐ ┌─SettingsCard─┐ ┌─SettingsCard─┐ │ │ │
580
+ │ │ │ │ [🟦] 常驻 │ │ [🟦] 检索 │ │ [🟦] 用户 │ │ │ │
581
+ │ │ │ │ 记忆整理 │ │ 记忆整理 │ │ 记忆整理 │ │ │ │
582
+ │ │ │ │ ──────────── │ │ ──────────── │ │ ──────────── │ │ │ │
583
+ │ │ │ │ 智能合并 [○] │ │ 自动清除 [●] │ │ 智能合并 [○] │ │ │ │
584
+ │ │ │ │ 自动清除 [●] │ │ ... │ │ 自动清除 [●] │ │ │ │
585
+ │ │ │ │ └ 清除策略 │ │ │ │ └ 清除策略 │ │ │ │
586
+ │ │ │ │ └ [Alert] │ │ │ │ └ [Alert] │ │ │ │
587
+ │ │ │ │ └ 最大保留 │ │ │ │ └ 最大保留 │ │ │ │
588
+ │ │ │ │ └ [☑]优先 │ │ │ │ └ [☑]优先 │ │ │ │
589
+ │ │ │ │ 冲突处理 [○] │ │ 冲突处理 [○] │ │ 冲突处理 [○] │ │ │ │
590
+ │ │ │ │ ─────────── │ │ ─────────── │ │ │ │ │ │
591
+ │ │ │ │ 整理触发时机 │ │ 整理触发时机 │ │ 整理触发时机 │ │ │ │
592
+ │ │ │ │ [定时|空闲|…] │ │ [定时|空闲|…] │ │ (描述文字) │ │ │ │
593
+ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │
594
+ │ │ └──────────────────────────────────────────────────────┘ │ │
595
+ │ └─────────────────────────────────────────────────────────────┘ │
596
+ └──────────────────────────────────────────────────────────────────┘
597
+ ```
598
+
599
+ #### SettingsCardGrid 规格
600
+
601
+ | 属性 | 值 |
602
+ |------|---|
603
+ | layout | `grid-template-columns: repeat(3, 1fr)` |
604
+ | gap | 16px (`var(--card-gap)`) |
605
+ | responsive | ≥1200px: 3col / 768-1200: 2col / <768: 1col |
606
+
607
+ #### SettingsCard 规格
608
+
609
+ | 属性 | 值 | UI 组件 |
610
+ |------|---|---------|
611
+ | border | 1px solid `var(--gray-border)` | `components/card` → `Card` |
612
+ | border-radius | 12px (`var(--radius-lg)`) | — |
613
+ | padding | 20px | — |
614
+ | background | `var(--card)` (white) | — |
615
+
616
+ #### SettingsCard Header 规格
617
+
618
+ | 属性 | 值 | UI 组件 |
619
+ |------|---|---------|
620
+ | icon 容器 | 32×32 圆角矩形, bg `var(--primary)`, 白色图标 | `components/avatar` → `Avatar` + `AvatarFallback` |
621
+ | icon border-radius | 8px (`var(--input-radius)`) | — |
622
+ | title font | 16px / 600, color `var(--gray-primary)` | — |
623
+ | icon → title gap | 12px | — |
624
+ | header → body gap | 20px | — |
625
+
626
+ #### Switch + Label 行规格
627
+
628
+ ```
629
+ ┌─ SwitchRow (flex, justify-between, align-center) ────────────────┐
630
+ │ Label (14px/500) + Tooltip(ⓘ) Switch [○/●] │
631
+ └──────────────────────────────────────────────────────────────────┘
632
+ ```
633
+
634
+ | 属性 | 值 | UI 组件 |
635
+ |------|---|---------|
636
+ | layout | flex, space-between, align-center | — |
637
+ | label | 14px / 500, color `var(--gray-primary)` | — |
638
+ | tooltip icon | 14px ⓘ, `var(--gray-quaternary)`, gap 4px | `components/tooltip` |
639
+ | switch size | 36×20 (default) | `components/switch` → `Switch` |
640
+ | switch active | `var(--primary)` | — |
641
+ | switch inactive | `var(--gray-border)` | — |
642
+ | row 间距 | 16px | — |
643
+
644
+ #### 条件字段(Switch ON 时展示)
645
+
646
+ > 截图实证:自动清除开启后显示清除策略、最大保留等子字段
647
+
648
+ | 属性 | 值 |
649
+ |------|---|
650
+ | indent | padding-left: 0(同级对齐,不缩进) |
651
+ | show/hide | `display: none`,带过渡动画 |
652
+ | margin-top | 12px (距 Switch 行) |
653
+ | 子字段间距 | 12px |
654
+
655
+ #### 条件字段内部控件
656
+
657
+ | 控件 | 规格 | UI 组件 |
658
+ |------|------|---------|
659
+ | Select (策略选择) | height 36px, full-width | `Select` |
660
+ | Alert (说明) | variant='warning', yellow bg, 12px | `Alert` |
661
+ | NumberInput + 后缀 | `Input(type='number')` width 80px + "条" 文字 | `Input` |
662
+ | Checkbox | 16px + label 14px/400 | `Checkbox` |
663
+
664
+ #### ToggleGroup(触发时机选择)
665
+
666
+ > 截图实证:整理触发时机 [定时整理 | 空闲整理 | 跟随记忆加工触发]
667
+
668
+ | 属性 | 值 | UI 组件 |
669
+ |------|---|---------|
670
+ | type | `single` (互斥) | `components/toggle-group` |
671
+ | 选中态 | bg `var(--primary)`, color white | — |
672
+ | 未选中态 | bg transparent, color `var(--gray-secondary)`, border 1px solid `var(--gray-border)` | — |
673
+ | height | 32px | — |
674
+ | padding | 0 12px | — |
675
+ | border-radius | `var(--radius-md)` (6px) | — |
676
+ | gap | 0 (紧密排列) | — |
677
+
678
+ #### 时间选择器(条件显示)
679
+
680
+ > 截图实证:定时整理选中后显示 "整理时间 [03时 ▼] [00分 ▼]"
681
+
682
+ | 属性 | 值 |
683
+ |------|---|
684
+ | layout | flex, align-center, gap 8px |
685
+ | label | "整理时间" 14px/400 `var(--gray-secondary)` |
686
+ | hour Select | width 80px, suffix "时" |
687
+ | minute Select | width 80px, suffix "分" |
688
+ | margin-top | 12px |
689
+
690
+ #### Settings 特殊规则
691
+
692
+ | 规则 | 说明 |
693
+ |------|------|
694
+ | 无显式提交按钮 | 设置即生效(auto-save),无 SubmitBar |
695
+ | 分隔线 | 不同功能区块间使用 `Separator` |
696
+ | 多卡片独立 | 每张 SettingsCard 内的表单状态独立 |
697
+
698
+ ### 7.5 OpenTrek 容器模式 UI 组件索引
699
+
700
+ > 基础路径:`packages/ui/src/components/`
701
+
702
+ | 容器/场景 | 必需组件 | 路径 |
703
+ |----------|---------|------|
704
+ | OT-FM-1 Dialog | `Dialog`, `DialogContent`, `DialogHeader`, `DialogTitle`, `DialogFooter`, `DialogClose` | `components/dialog` |
705
+ | OT-FM-2 Sheet | `Sheet`, `SheetContent`, `SheetHeader`, `SheetTitle`, `SheetFooter`, `SheetClose` | `components/sheet` |
706
+ | OT-FM-3 Settings | `Card`, `CardHeader`, `CardContent`, `Tabs`, `Avatar`, `Separator` | `components/{card,tabs,avatar,separator}` |
707
+ | 字段控件 | 见 §5 可选组件表 | `components/{input,textarea,select,switch,checkbox,radio-group,toggle-group}` |
708
+ | 文件上传 (OT-FM-2) | `Upload` | `components/upload` |
709
+ | 字段内提示 | `Alert`, `Tooltip` | `components/{alert,tooltip}` |
710
+
711
+ ### 7.6 各页面截图 → 模式映射表
712
+
713
+ | 页面 | 容器类型 | 模式 | 字段构成 | 主操作 |
714
+ |------|----------|------|----------|--------|
715
+ | 内置服务 > 沙箱管理 > 编辑 | Dialog (540px) | OT-FM-1 | 沙箱名称(Input) + CPU/内存(2col Select) | 保存 |
716
+ | 内置服务 > 数据源管理 > 添加 | Dialog (640px) | OT-FM-1 | 数据源名称*(Input) + 引导区块 + Checkbox + Alert | 添加 |
717
+ | 内置资产 > 上架Skill | Sheet (right, 560px) | OT-FM-2 | 上传文件*(Upload) + 备注名称(Input) + 分类标签(Select) | 确认上架 |
718
+ | 记忆体 > 新建 | Sheet (right, 480px) | OT-FM-2 | 名称*(Input) + 描述(Textarea) + 模型*(Select×2) + 属性*(Radio) | 创建 |
719
+ | 记忆体 > 空间共用 > 整理策略 | Inline (3-col cards) | OT-FM-3 | Switch×3 + 条件字段 + ToggleGroup + TimePicker | 无(auto-save) |
720
+
338
721
  ## 规范引用
339
722
 
340
723
  - **读取路径**:见根技能 `../../SKILL.md` §4.5 三阶段读取决策树
@@ -344,7 +727,7 @@ PageContainer → ContentWrapper → Breadcrumb + PageHeader + Card[FieldGroup]
344
727
 
345
728
  > `rules/design-tokens.css` 是设计 Token 的唯一真相源(:root 变量定义):生成 HTML 原型时需将 :root 变量块嵌入页面 `<style>` 标签;生成 React/TSX 需确保项目已通过 `@import` 引入该 CSS 文件。
346
729
 
347
- ## 7. 验证清单 (Validation Checklist)
730
+ ## 8. 验证清单 (Validation Checklist)
348
731
 
349
732
  > **通用检查项**(布局分区/颜色Token/间距/字体/尺寸/禁用样式/异步操作/空数据/加载中)见根技能 `../../docs/validation-workflow.md` 验证清单。此处仅列出表单页特有检查项。
350
733
 
@@ -360,3 +743,38 @@ PageContainer → ContentWrapper → Breadcrumb + PageHeader + Card[FieldGroup]
360
743
  | 取消确认 | 未保存内容时 Dialog确认 | 正确 |
361
744
  | 按钮 loading | SubmitBar 按钮 disabled + Spinner(C4) | 正确 |
362
745
  | 分区表单 | Card 分组、Separator 分隔 | 正确 |
746
+
747
+ ### OT-FM-1 Dialog 容器特有检查项
748
+
749
+ | 检查项 | 检查点 | 目标 |
750
+ |--------|--------|------|
751
+ | 容器组件 | 使用 `components/dialog` 全套(DialogContent/Header/Title/Footer) | 正确 |
752
+ | Dialog 尺寸 | width 540px(≤4 字段) / 640px(5-8 字段), max-height `calc(100vh - 120px)` | 符合 |
753
+ | Footer 按钮顺序 | `[取消(outline)] [主操作(default+primary)]`,右对齐 | 正确 |
754
+ | 字段间距 | 垂直 20px,2-col 横向 gap 16px | 符合 |
755
+ | 圆角 / 内边距 | radius 12px (`var(--radius-lg)`), padding 24px | 符合 |
756
+
757
+ ### OT-FM-2 Sheet 容器特有检查项
758
+
759
+ | 检查项 | 检查点 | 目标 |
760
+ |--------|--------|------|
761
+ | 容器组件 | 使用 `components/sheet` 全套,side='right' | 正确 |
762
+ | Sheet 宽度 | 480px(标准) / 560px(含上传) | 符合 |
763
+ | Footer 按钮顺序 | `[主操作(default+primary)] [取消(outline)]`(**主操作在左,与 Dialog 相反**) | 正确 |
764
+ | Footer 固定 | sticky bottom: 0 + border-top + bg `var(--card)` | 符合 |
765
+ | 字段间距 | 垂直 24px(比 Dialog 宽松) | 符合 |
766
+ | Upload Zone | dashed border + 32px padding + 中心 icon (仅含上传场景) | 符合 |
767
+ | 字段内 Alert | margin-top 8px, padding 10px 12px, font 12px | 符合 |
768
+
769
+ ### OT-FM-3 Settings 容器特有检查项
770
+
771
+ | 检查项 | 检查点 | 目标 |
772
+ |--------|--------|------|
773
+ | 网格布局 | `grid-template-columns: repeat(3, 1fr)` + gap 16px,响应式降级 | 正确 |
774
+ | SettingsCard | radius 12px + padding 20px + 1px solid `var(--gray-border)` | 符合 |
775
+ | Header icon | 32×32, radius 8px, bg `var(--primary)` (`Avatar` + `AvatarFallback`) | 正确 |
776
+ | Switch 行 | flex justify-between,label 左 + Switch 右 | 正确 |
777
+ | 条件字段 | Switch ON 时展示,不缩进,margin-top 12px | 正确 |
778
+ | ToggleGroup | type='single', height 32px, gap 0 | 正确 |
779
+ | 无 SubmitBar | auto-save 模式,禁止出现提交按钮 | 0 个 SubmitBar |
780
+