--- name: frontend-design version: "1.0" status: production layer: skill owner: wade last_reviewed: 2026-01-02 description: > 前端设计指导 Skill,用于 UI 组件设计、界面布局、设计系统一致性审查、 CSS/Tailwind 优化、响应式设计和可访问性检查。当需要进行 UI 设计决策、 组件结构规划、设计审查或样式优化时使用此 Skill。 sot_dependencies: required: - docs/3.dev-guides/UI_DESIGN_SYSTEM.md - docs/3.dev-guides/COMPONENT_REGISTRY.md optional: - docs/3.dev-guides/FRONTEND_DEVELOPMENT_RULES.md - docs/3.dev-guides/UI_FLOW_SPEC.md output_boundaries: writable: - frontend/src/components/** - frontend/src/modules/**/components/** - frontend/src/styles/** forbidden: - frontend/node_modules/** - frontend/.next/** allowed-tools: Read, Grep, Glob, Write, Edit --- # Frontend Design Skill - 前端设计指导 ## 1. Purpose 提供前端 UI/UX 设计指导,确保设计系统一致性、组件可复用性和用户体验质量。 **核心职责**: - UI 组件设计和结构规划 - 设计系统一致性审查 - 响应式设计和布局优化 - 可访问性 (a11y) 检查 - CSS/Tailwind 最佳实践 ## 2. Design Principles ### 2.1 设计系统核心原则 | 原则 | 描述 | 检查点 | |------|------|--------| | **一致性** | 统一的视觉语言和交互模式 | 颜色、间距、字体、圆角 | | **层次感** | 清晰的信息层级和视觉重点 | 标题大小、颜色对比、空间分布 | | **可预测** | 用户可预期的交互行为 | 按钮反馈、加载状态、错误提示 | | **可访问** | 符合 WCAG 2.1 AA 标准 | 对比度、键盘导航、屏幕阅读器 | ### 2.2 颜色系统 ```css /* 主色调 - 品牌色 */ --primary: hsl(222, 47%, 11%); /* 深蓝 */ --primary-foreground: hsl(0, 0%, 100%); /* 语义色 */ --success: hsl(142, 71%, 45%); /* 绿色 - 成功 */ --warning: hsl(38, 92%, 50%); /* 橙色 - 警告 */ --destructive: hsl(0, 84%, 60%); /* 红色 - 危险/错误 */ /* 中性色 */ --muted: hsl(210, 40%, 96%); --muted-foreground: hsl(215, 16%, 47%); ``` ### 2.3 间距系统 ```css /* Tailwind 间距规范 */ spacing-1: 0.25rem (4px) /* 紧凑元素间距 */ spacing-2: 0.5rem (8px) /* 小间距 */ spacing-4: 1rem (16px) /* 标准间距 */ spacing-6: 1.5rem (24px) /* 卡片内边距 */ spacing-8: 2rem (32px) /* 区块间距 */ ``` ### 2.4 字体层级 | 级别 | Tailwind Class | 使用场景 | |------|---------------|---------| | H1 | `text-2xl font-bold` | 页面标题 | | H2 | `text-xl font-semibold` | 区块标题 | | H3 | `text-lg font-medium` | 卡片标题 | | Body | `text-sm` | 正文 | | Caption | `text-xs text-muted-foreground` | 辅助说明 | ## 3. Component Patterns ### 3.1 页面布局模式 ```tsx // 标准页面结构
{/* 页面头部 */}

页面标题

{/* 筛选区域 */} 筛选条件 {/* 筛选组件 */} {/* 内容区域 */} {/* 主体内容 */}
``` ### 3.2 卡片组件模式 ```tsx // 数据卡片 标题
数值

辅助说明

// KPI 指标卡
``` ### 3.3 表格组件模式 ```tsx // 使用 DataTable 组件 import { DataTable } from "@/components/ui/data-table/DataTable"; const columns = [ { accessorKey: "id", header: "ID" }, { accessorKey: "name", header: "名称" }, { accessorKey: "status", header: "状态", cell: ({ row }) => ( ), }, { id: "actions", cell: ({ row }) => ( {/* 操作菜单 */} ), }, ]; ``` ### 3.4 表单组件模式 ```tsx // 使用 react-hook-form + zod import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; const schema = z.object({ name: z.string().min(1, "名称不能为空"), amount: z.number().positive("金额必须大于 0"), }); function MyForm() { const form = useForm({ resolver: zodResolver(schema), defaultValues: { name: "", amount: 0 }, }); return (
( 名称 )} /> ); } ``` ## 4. State Display Patterns ### 4.1 状态标签 (StatusBadge) ```tsx // 状态颜色映射 - 对齐设计系统 const statusVariants = { // 日报状态 raw_submitted: { label: "已提交", variant: "outline" }, trend_ok: { label: "趋势正常", variant: "secondary" }, final_confirmed: { label: "已确认", variant: "default" }, // 充值状态 pending: { label: "待处理", variant: "outline" }, approved: { label: "已批准", variant: "default" }, rejected: { label: "已拒绝", variant: "destructive" }, // 账户状态 active: { label: "活跃", variant: "default" }, suspended: { label: "暂停", variant: "warning" }, dead: { label: "死号", variant: "destructive" }, }; ``` ### 4.2 加载和错误状态 ```tsx // 使用 DataStateManager 组件 import { DataStateManager } from "@/components/ui/data-state-manager"; } errorComponent={} emptyComponent={} > ``` ## 5. Responsive Design ### 5.1 断点系统 | 断点 | 尺寸 | 适用设备 | |------|------|---------| | `sm` | 640px | 手机横屏 | | `md` | 768px | 平板竖屏 | | `lg` | 1024px | 平板横屏/小笔记本 | | `xl` | 1280px | 桌面 | | `2xl` | 1536px | 大屏桌面 | ### 5.2 响应式布局模式 ```tsx // 网格布局
{/* 卡片组件 */}
// 侧边栏布局
{/* 主内容 */}
// 隐藏/显示 ``` ## 6. Accessibility Checklist ### 6.1 基础要求 - [ ] 所有交互元素可通过键盘访问 - [ ] 焦点顺序合理且可见 - [ ] 颜色对比度 >= 4.5:1 (正文) / 3:1 (大文本) - [ ] 表单元素有关联的 label - [ ] 图片有 alt 属性 ### 6.2 ARIA 使用 ```tsx // 加载状态
{isLoading ? : }
// 对话框 标题 描述 // 按钮 ``` ## 7. Design Review Checklist ### 7.1 视觉一致性检查 | 检查项 | 验证方法 | 优先级 | |--------|---------|--------| | 颜色使用 | 对照颜色系统变量 | P0 | | 间距一致 | 使用 Tailwind 标准间距 | P0 | | 字体层级 | 对照字体规范 | P0 | | 圆角一致 | 统一使用 `rounded-md` | P1 | | 阴影一致 | Card 使用 `shadow-sm` | P1 | ### 7.2 交互设计检查 | 检查项 | 验证方法 | 优先级 | |--------|---------|--------| | 按钮反馈 | hover/active/disabled 状态 | P0 | | 加载状态 | 有明确的加载指示 | P0 | | 错误提示 | 用户友好的错误信息 | P0 | | 成功反馈 | Toast 或状态更新 | P1 | ### 7.3 组件复用检查 | 检查项 | 验证方法 | 优先级 | |--------|---------|--------| | 使用注册组件 | 对照 COMPONENT_REGISTRY.md | P0 | | 避免重复造轮子 | 检查现有组件库 | P0 | | Props 接口一致 | 使用标准化 Props | P1 | ## 8. Anti-Patterns (禁止模式) ### 8.1 样式禁止 ```tsx // ❌ 内联样式
// ✅ Tailwind 类
// ❌ 硬编码颜色值
// ✅ 使用语义化变量
// ❌ 魔法数字
// ✅ 使用标准尺寸
``` ### 8.2 组件禁止 ```tsx // ❌ 手写表格 ......
// ✅ 使用 DataTable // ❌ 自定义 Loading
...
// ✅ 使用 Skeleton 或 Loader // ❌ 手写 Modal
...
// ✅ 使用 Dialog ... ``` ## 9. Prompt Template ```xml 你是"前端设计 Agent",负责 UI/UX 设计决策和组件结构规划。 必须遵守的规则: 1. 遵循 UI_DESIGN_SYSTEM.md 设计规范 2. 使用 COMPONENT_REGISTRY.md 中的注册组件 3. 优先使用 shadcn/ui 和 Tailwind CSS 4. 确保响应式设计和可访问性 5. 保持设计系统一致性 技术栈: - React 18+ / Next.js 14+ - Tailwind CSS - shadcn/ui 组件库 - TypeScript {{UI_DESIGN_SYSTEM}} {{COMPONENT_REGISTRY}} {{TASK}} 1. **需求分析** - 理解设计目标和用户场景 - 识别需要的组件和布局 2. **设计系统检查** - 对照颜色、间距、字体规范 - 确认可用的组件 3. **组件规划** - 选择合适的组件 - 规划组件层次和数据流 4. **响应式考虑** - 确定断点策略 - 规划不同屏幕布局 5. **可访问性检查** - 确保键盘可访问 - 添加必要的 ARIA 属性 6. **输出设计方案** - 提供代码示例 - 说明设计决策 ``` ## 10. Version History | 版本 | 日期 | 变更 | |------|------|------| | v1.0 | 2026-01-02 | 初始版本 | --- **文档控制**: Owner: wade | Baseline: UI_DESIGN_SYSTEM.md, COMPONENT_REGISTRY.md