ccgx-workflow 1.0.0
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/LICENSE +22 -0
- package/README.md +469 -0
- package/README.zh-CN.md +466 -0
- package/bin/ccg.mjs +2 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.mjs +173 -0
- package/dist/index.d.mts +1774 -0
- package/dist/index.d.ts +1774 -0
- package/dist/index.mjs +2029 -0
- package/dist/shared/ccgx-workflow.WgUzkiC3.mjs +5248 -0
- package/package.json +129 -0
- package/templates/commands/agents/assumptions-analyzer.md +129 -0
- package/templates/commands/agents/code-fixer.md +292 -0
- package/templates/commands/agents/codebase-mapper.md +152 -0
- package/templates/commands/agents/debug-session-manager.md +247 -0
- package/templates/commands/agents/debugger.md +111 -0
- package/templates/commands/agents/eval-auditor.md +171 -0
- package/templates/commands/agents/framework-selector.md +152 -0
- package/templates/commands/agents/get-current-datetime.md +29 -0
- package/templates/commands/agents/init-architect.md +114 -0
- package/templates/commands/agents/integration-checker.md +163 -0
- package/templates/commands/agents/interface-auditor.md +170 -0
- package/templates/commands/agents/nyquist-auditor.md +131 -0
- package/templates/commands/agents/pattern-mapper.md +111 -0
- package/templates/commands/agents/phase-runner.md +321 -0
- package/templates/commands/agents/plan-checker.md +255 -0
- package/templates/commands/agents/planner.md +320 -0
- package/templates/commands/agents/team-architect.md +186 -0
- package/templates/commands/agents/team-qa.md +121 -0
- package/templates/commands/agents/team-reviewer.md +157 -0
- package/templates/commands/agents/ui-ux-designer.md +573 -0
- package/templates/commands/agents/verifier.md +274 -0
- package/templates/commands/analyze.md +210 -0
- package/templates/commands/autonomous.md +792 -0
- package/templates/commands/cancel.md +132 -0
- package/templates/commands/clean-branches.md +117 -0
- package/templates/commands/codex-exec.md +404 -0
- package/templates/commands/commit.md +151 -0
- package/templates/commands/context.md +332 -0
- package/templates/commands/debate.md +165 -0
- package/templates/commands/debug.md +226 -0
- package/templates/commands/enhance.md +64 -0
- package/templates/commands/execute.md +380 -0
- package/templates/commands/init.md +123 -0
- package/templates/commands/optimize.md +217 -0
- package/templates/commands/plan.md +373 -0
- package/templates/commands/result.md +106 -0
- package/templates/commands/review.md +338 -0
- package/templates/commands/rollback.md +116 -0
- package/templates/commands/spec-impl.md +139 -0
- package/templates/commands/spec-init.md +101 -0
- package/templates/commands/spec-plan.md +210 -0
- package/templates/commands/spec-research.md +152 -0
- package/templates/commands/spec-review.md +120 -0
- package/templates/commands/status.md +206 -0
- package/templates/commands/team-exec.md +265 -0
- package/templates/commands/test.md +236 -0
- package/templates/commands/verify-work.md +338 -0
- package/templates/commands/verify.md +66 -0
- package/templates/commands/workflow.md +190 -0
- package/templates/commands/worktree.md +128 -0
- package/templates/hooks/ccg-context-monitor.js +159 -0
- package/templates/hooks/ccg-session-state.cjs +510 -0
- package/templates/hooks/ccg-statusline.js +142 -0
- package/templates/output-styles/abyss-command.md +56 -0
- package/templates/output-styles/abyss-concise.md +89 -0
- package/templates/output-styles/abyss-cultivator.md +302 -0
- package/templates/output-styles/abyss-ritual.md +70 -0
- package/templates/output-styles/engineer-professional.md +89 -0
- package/templates/output-styles/laowang-engineer.md +127 -0
- package/templates/output-styles/nekomata-engineer.md +120 -0
- package/templates/output-styles/ojousama-engineer.md +121 -0
- package/templates/prompts/claude/analyzer.md +59 -0
- package/templates/prompts/claude/architect.md +54 -0
- package/templates/prompts/claude/debugger.md +71 -0
- package/templates/prompts/claude/optimizer.md +73 -0
- package/templates/prompts/claude/reviewer.md +63 -0
- package/templates/prompts/claude/tester.md +69 -0
- package/templates/prompts/codex/analyzer.md +58 -0
- package/templates/prompts/codex/architect.md +54 -0
- package/templates/prompts/codex/debugger.md +74 -0
- package/templates/prompts/codex/optimizer.md +81 -0
- package/templates/prompts/codex/reviewer.md +73 -0
- package/templates/prompts/codex/tester.md +62 -0
- package/templates/prompts/gemini/analyzer.md +61 -0
- package/templates/prompts/gemini/architect.md +55 -0
- package/templates/prompts/gemini/debugger.md +78 -0
- package/templates/prompts/gemini/frontend.md +64 -0
- package/templates/prompts/gemini/optimizer.md +84 -0
- package/templates/prompts/gemini/reviewer.md +80 -0
- package/templates/prompts/gemini/tester.md +68 -0
- package/templates/rules/ccg-skill-routing.md +83 -0
- package/templates/rules/ccg-skills.md +71 -0
- package/templates/scripts/ccg-phase-runner-launcher.mjs +467 -0
- package/templates/scripts/invoke-model.mjs +949 -0
- package/templates/scripts/repatch-gemini-plugin.mjs +194 -0
- package/templates/skills/SKILL.md +92 -0
- package/templates/skills/domains/ai/SKILL.md +35 -0
- package/templates/skills/domains/ai/agent-dev.md +242 -0
- package/templates/skills/domains/ai/llm-security.md +288 -0
- package/templates/skills/domains/ai/prompt-and-eval.md +279 -0
- package/templates/skills/domains/ai/rag-system.md +542 -0
- package/templates/skills/domains/architecture/SKILL.md +43 -0
- package/templates/skills/domains/architecture/api-design.md +225 -0
- package/templates/skills/domains/architecture/caching.md +299 -0
- package/templates/skills/domains/architecture/cloud-native.md +285 -0
- package/templates/skills/domains/architecture/message-queue.md +329 -0
- package/templates/skills/domains/architecture/security-arch.md +297 -0
- package/templates/skills/domains/data-engineering/SKILL.md +208 -0
- package/templates/skills/domains/development/SKILL.md +47 -0
- package/templates/skills/domains/development/cpp.md +246 -0
- package/templates/skills/domains/development/go.md +323 -0
- package/templates/skills/domains/development/java.md +277 -0
- package/templates/skills/domains/development/python.md +288 -0
- package/templates/skills/domains/development/rust.md +313 -0
- package/templates/skills/domains/development/shell.md +313 -0
- package/templates/skills/domains/development/typescript.md +277 -0
- package/templates/skills/domains/devops/SKILL.md +40 -0
- package/templates/skills/domains/devops/cost-optimization.md +272 -0
- package/templates/skills/domains/devops/database.md +217 -0
- package/templates/skills/domains/devops/devsecops.md +198 -0
- package/templates/skills/domains/devops/git-workflow.md +181 -0
- package/templates/skills/domains/devops/observability.md +280 -0
- package/templates/skills/domains/devops/performance.md +336 -0
- package/templates/skills/domains/devops/testing.md +283 -0
- package/templates/skills/domains/frontend-design/SKILL.md +244 -0
- package/templates/skills/domains/frontend-design/agents/openai.yaml +4 -0
- package/templates/skills/domains/frontend-design/claymorphism/SKILL.md +121 -0
- package/templates/skills/domains/frontend-design/claymorphism/references/tokens.css +52 -0
- package/templates/skills/domains/frontend-design/component-patterns.md +202 -0
- package/templates/skills/domains/frontend-design/engineering.md +287 -0
- package/templates/skills/domains/frontend-design/glassmorphism/SKILL.md +142 -0
- package/templates/skills/domains/frontend-design/glassmorphism/references/tokens.css +32 -0
- package/templates/skills/domains/frontend-design/liquid-glass/SKILL.md +139 -0
- package/templates/skills/domains/frontend-design/liquid-glass/references/tokens.css +81 -0
- package/templates/skills/domains/frontend-design/neubrutalism/SKILL.md +145 -0
- package/templates/skills/domains/frontend-design/neubrutalism/references/tokens.css +44 -0
- package/templates/skills/domains/frontend-design/reference/color-and-contrast.md +132 -0
- package/templates/skills/domains/frontend-design/reference/interaction-design.md +195 -0
- package/templates/skills/domains/frontend-design/reference/motion-design.md +99 -0
- package/templates/skills/domains/frontend-design/reference/responsive-design.md +114 -0
- package/templates/skills/domains/frontend-design/reference/spatial-design.md +100 -0
- package/templates/skills/domains/frontend-design/reference/typography.md +133 -0
- package/templates/skills/domains/frontend-design/reference/ux-writing.md +107 -0
- package/templates/skills/domains/frontend-design/state-management.md +680 -0
- package/templates/skills/domains/frontend-design/ui-aesthetics.md +110 -0
- package/templates/skills/domains/frontend-design/ux-principles.md +156 -0
- package/templates/skills/domains/infrastructure/SKILL.md +201 -0
- package/templates/skills/domains/mobile/SKILL.md +225 -0
- package/templates/skills/domains/orchestration/SKILL.md +30 -0
- package/templates/skills/domains/orchestration/multi-agent.md +263 -0
- package/templates/skills/domains/security/SKILL.md +73 -0
- package/templates/skills/domains/security/blue-team.md +436 -0
- package/templates/skills/domains/security/code-audit.md +265 -0
- package/templates/skills/domains/security/pentest.md +226 -0
- package/templates/skills/domains/security/red-team.md +374 -0
- package/templates/skills/domains/security/threat-intel.md +372 -0
- package/templates/skills/domains/security/vuln-research.md +369 -0
- package/templates/skills/impeccable/adapt/SKILL.md +201 -0
- package/templates/skills/impeccable/animate/SKILL.md +176 -0
- package/templates/skills/impeccable/arrange/SKILL.md +126 -0
- package/templates/skills/impeccable/audit/SKILL.md +149 -0
- package/templates/skills/impeccable/bolder/SKILL.md +118 -0
- package/templates/skills/impeccable/clarify/SKILL.md +185 -0
- package/templates/skills/impeccable/colorize/SKILL.md +144 -0
- package/templates/skills/impeccable/critique/SKILL.md +203 -0
- package/templates/skills/impeccable/critique/reference/cognitive-load.md +106 -0
- package/templates/skills/impeccable/critique/reference/heuristics-scoring.md +234 -0
- package/templates/skills/impeccable/critique/reference/personas.md +178 -0
- package/templates/skills/impeccable/delight/SKILL.md +305 -0
- package/templates/skills/impeccable/distill/SKILL.md +123 -0
- package/templates/skills/impeccable/extract/SKILL.md +94 -0
- package/templates/skills/impeccable/harden/SKILL.md +357 -0
- package/templates/skills/impeccable/normalize/SKILL.md +72 -0
- package/templates/skills/impeccable/onboard/SKILL.md +248 -0
- package/templates/skills/impeccable/optimize/SKILL.md +268 -0
- package/templates/skills/impeccable/overdrive/SKILL.md +143 -0
- package/templates/skills/impeccable/polish/SKILL.md +205 -0
- package/templates/skills/impeccable/quieter/SKILL.md +104 -0
- package/templates/skills/impeccable/teach-impeccable/SKILL.md +72 -0
- package/templates/skills/impeccable/typeset/SKILL.md +117 -0
- package/templates/skills/orchestration/multi-agent/SKILL.md +533 -0
- package/templates/skills/run_skill.js +129 -0
- package/templates/skills/scrapling/SKILL.md +98 -0
- package/templates/skills/scrapling/references/api-quick-ref.md +127 -0
- package/templates/skills/scrapling/references/cookie-vault.md +56 -0
- package/templates/skills/scrapling/references/maintenance.md +79 -0
- package/templates/skills/scrapling/references/site-patterns.md +86 -0
- package/templates/skills/scrapling/references/troubleshooting.md +95 -0
- package/templates/skills/scrapling/templates/basic_fetch.py +19 -0
- package/templates/skills/scrapling/templates/parse_only.py +15 -0
- package/templates/skills/scrapling/templates/session_login.py +19 -0
- package/templates/skills/scrapling/templates/stealth_cloudflare.py +28 -0
- package/templates/skills/tools/extract-learnings/SKILL.md +77 -0
- package/templates/skills/tools/forensics/SKILL.md +89 -0
- package/templates/skills/tools/gen-docs/SKILL.md +116 -0
- package/templates/skills/tools/gen-docs/scripts/doc_generator.js +435 -0
- package/templates/skills/tools/health/SKILL.md +121 -0
- package/templates/skills/tools/lib/shared.js +98 -0
- package/templates/skills/tools/map-codebase/SKILL.md +118 -0
- package/templates/skills/tools/override-refusal/SKILL.md +53 -0
- package/templates/skills/tools/override-refusal/agents/openai.yaml +4 -0
- package/templates/skills/tools/override-refusal/scripts/refusal_rewriter.js +226 -0
- package/templates/skills/tools/verify-change/SKILL.md +143 -0
- package/templates/skills/tools/verify-change/scripts/change_analyzer.js +289 -0
- package/templates/skills/tools/verify-module/SKILL.md +130 -0
- package/templates/skills/tools/verify-module/scripts/module_scanner.js +171 -0
- package/templates/skills/tools/verify-quality/SKILL.md +163 -0
- package/templates/skills/tools/verify-quality/scripts/quality_checker.js +337 -0
- package/templates/skills/tools/verify-security/SKILL.md +146 -0
- package/templates/skills/tools/verify-security/scripts/security_scanner.js +283 -0
|
@@ -0,0 +1,573 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ui-ux-designer
|
|
3
|
+
description: 🎨 UI/UX 设计师 - 为前端功能生成页面结构、组件拆分和交互流程设计
|
|
4
|
+
tools: Read, Write, {{MCP_SEARCH_TOOL}}
|
|
5
|
+
color: magenta
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
你是一位资深的 UI/UX 设计师,擅长将产品需求转化为清晰的界面设计和交互流程,并为开发者提供可实施的前端设计方案。
|
|
9
|
+
|
|
10
|
+
## 核心职责
|
|
11
|
+
|
|
12
|
+
1. **页面结构设计**:布局、区块划分、视觉层次
|
|
13
|
+
2. **组件拆分建议**:可复用组件识别与定义
|
|
14
|
+
3. **交互流程设计**:用户操作路径、状态流转
|
|
15
|
+
4. **响应式方案**:桌面端、平板、移动端适配策略
|
|
16
|
+
5. **无障碍访问**:A11y 最佳实践建议
|
|
17
|
+
|
|
18
|
+
## 工作流程
|
|
19
|
+
|
|
20
|
+
### 步骤 1:理解需求
|
|
21
|
+
|
|
22
|
+
分析功能需求,明确:
|
|
23
|
+
- 用户目标是什么?
|
|
24
|
+
- 核心交互是什么?
|
|
25
|
+
- 需要哪些页面/视图?
|
|
26
|
+
- 有哪些状态(loading、success、error)?
|
|
27
|
+
|
|
28
|
+
### 步骤 2:检索现有组件(如有需要)
|
|
29
|
+
|
|
30
|
+
如果项目已有组件库,使用 ace-tool 检索:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
{{MCP_SEARCH_TOOL}} {
|
|
34
|
+
"project_root_path": "{{项目路径}}",
|
|
35
|
+
"query": "可复用的 UI 组件、按钮、表单、卡片、布局组件"
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 步骤 3:设计方案输出
|
|
40
|
+
|
|
41
|
+
按照以下结构输出设计文档。
|
|
42
|
+
|
|
43
|
+
## 输出模板
|
|
44
|
+
|
|
45
|
+
```markdown
|
|
46
|
+
# UI/UX 设计方案:{{功能名称}}
|
|
47
|
+
|
|
48
|
+
**设计时间**:{{当前时间}}
|
|
49
|
+
**目标平台**:Web / Mobile / 跨平台
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 1. 设计目标
|
|
54
|
+
|
|
55
|
+
### 1.1 用户目标
|
|
56
|
+
用户希望通过这个功能达成什么目的?
|
|
57
|
+
|
|
58
|
+
**示例**:
|
|
59
|
+
- 快速完成登录
|
|
60
|
+
- 查看账户余额
|
|
61
|
+
- 提交订单
|
|
62
|
+
|
|
63
|
+
### 1.2 业务目标
|
|
64
|
+
产品/业务希望通过这个功能达成什么?
|
|
65
|
+
|
|
66
|
+
**示例**:
|
|
67
|
+
- 降低注册流失率
|
|
68
|
+
- 提升转化率
|
|
69
|
+
- 增强品牌信任感
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 2. 页面结构设计
|
|
74
|
+
|
|
75
|
+
### 2.1 布局草图(ASCII Art)
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
+-----------------------------------------------+
|
|
79
|
+
| Header |
|
|
80
|
+
| [Logo] [Nav Links] [Profile] |
|
|
81
|
+
+-----------------------------------------------+
|
|
82
|
+
| |
|
|
83
|
+
| +------------------+ |
|
|
84
|
+
| | Main Content | Sidebar (可选) |
|
|
85
|
+
| | | +------------------+ |
|
|
86
|
+
| | {{核心区块}} | | {{辅助信息}} | |
|
|
87
|
+
| | | | | |
|
|
88
|
+
| | [CTA Button] | +------------------+ |
|
|
89
|
+
| +------------------+ |
|
|
90
|
+
| |
|
|
91
|
+
+-----------------------------------------------+
|
|
92
|
+
| Footer |
|
|
93
|
+
| [Links] [Copyright] [Social] |
|
|
94
|
+
+-----------------------------------------------+
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 2.2 区块说明
|
|
98
|
+
|
|
99
|
+
| 区块 | 用途 | 优先级 |
|
|
100
|
+
|------|------|--------|
|
|
101
|
+
| Header | 导航、品牌展示 | 高 |
|
|
102
|
+
| Main Content | 核心功能区 | 高 |
|
|
103
|
+
| Sidebar | 辅助信息、推荐 | 中 |
|
|
104
|
+
| Footer | 次要链接、版权 | 低 |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 3. 组件拆分
|
|
109
|
+
|
|
110
|
+
### 3.1 组件树结构
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
{{PageName}}
|
|
114
|
+
├── PageHeader
|
|
115
|
+
│ ├── Logo
|
|
116
|
+
│ ├── NavigationMenu
|
|
117
|
+
│ └── UserProfile
|
|
118
|
+
├── MainContent
|
|
119
|
+
│ ├── {{FeatureComponent}}
|
|
120
|
+
│ │ ├── {{SubComponent1}}
|
|
121
|
+
│ │ └── {{SubComponent2}}
|
|
122
|
+
│ └── CTAButton
|
|
123
|
+
├── Sidebar (可选)
|
|
124
|
+
│ ├── RecommendationCard
|
|
125
|
+
│ └── AdBanner
|
|
126
|
+
└── PageFooter
|
|
127
|
+
├── FooterLinks
|
|
128
|
+
└── SocialIcons
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 3.2 组件详细定义
|
|
132
|
+
|
|
133
|
+
#### 组件 A: `{{ComponentName}}`
|
|
134
|
+
|
|
135
|
+
**职责**:{{组件的核心功能}}
|
|
136
|
+
|
|
137
|
+
**Props 接口**(TypeScript 示例):
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
interface {{ComponentName}}Props {
|
|
141
|
+
// 必填属性
|
|
142
|
+
title: string
|
|
143
|
+
onSubmit: (data: FormData) => void
|
|
144
|
+
|
|
145
|
+
// 可选属性
|
|
146
|
+
isLoading?: boolean
|
|
147
|
+
errorMessage?: string
|
|
148
|
+
variant?: 'primary' | 'secondary'
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**状态管理**:
|
|
153
|
+
|
|
154
|
+
- `isSubmitting: boolean` - 提交中状态
|
|
155
|
+
- `validationErrors: Record<string, string>` - 表单验证错误
|
|
156
|
+
|
|
157
|
+
**样式要点**:
|
|
158
|
+
|
|
159
|
+
- 使用 Tailwind CSS / CSS Modules
|
|
160
|
+
- 响应式:`sm:`, `md:`, `lg:` breakpoints
|
|
161
|
+
- Dark mode 支持:`dark:` 前缀
|
|
162
|
+
|
|
163
|
+
**示例代码结构**:
|
|
164
|
+
|
|
165
|
+
```tsx
|
|
166
|
+
export function {{ComponentName}}({ title, onSubmit }: {{ComponentName}}Props) {
|
|
167
|
+
const [isSubmitting, setIsSubmitting] = useState(false)
|
|
168
|
+
|
|
169
|
+
const handleSubmit = async (e: FormEvent) => {
|
|
170
|
+
e.preventDefault()
|
|
171
|
+
setIsSubmitting(true)
|
|
172
|
+
// ...
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return (
|
|
176
|
+
<div className="{{样式类}}">
|
|
177
|
+
<h2>{title}</h2>
|
|
178
|
+
<form onSubmit={handleSubmit}>
|
|
179
|
+
{/* 表单内容 */}
|
|
180
|
+
</form>
|
|
181
|
+
</div>
|
|
182
|
+
)
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
#### 组件 B: `{{ComponentName}}`
|
|
187
|
+
|
|
188
|
+
{{重复上述结构}}
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 4. 交互流程设计
|
|
193
|
+
|
|
194
|
+
### 4.1 用户旅程图
|
|
195
|
+
|
|
196
|
+
```mermaid
|
|
197
|
+
graph TD
|
|
198
|
+
Start[用户进入页面] --> A[查看页面内容]
|
|
199
|
+
A --> B{是否登录?}
|
|
200
|
+
B -->|未登录| C[显示登录提示]
|
|
201
|
+
B -->|已登录| D[显示完整功能]
|
|
202
|
+
|
|
203
|
+
C --> E[点击登录按钮]
|
|
204
|
+
E --> F[跳转到登录页]
|
|
205
|
+
|
|
206
|
+
D --> G[用户填写表单]
|
|
207
|
+
G --> H[点击提交]
|
|
208
|
+
H --> I{验证是否通过?}
|
|
209
|
+
|
|
210
|
+
I -->|失败| J[显示错误提示]
|
|
211
|
+
J --> G
|
|
212
|
+
|
|
213
|
+
I -->|成功| K[显示 Loading]
|
|
214
|
+
K --> L{请求是否成功?}
|
|
215
|
+
|
|
216
|
+
L -->|失败| M[显示错误消息]
|
|
217
|
+
M --> G
|
|
218
|
+
|
|
219
|
+
L -->|成功| N[显示成功提示]
|
|
220
|
+
N --> O[跳转到下一页]
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### 4.2 状态转换
|
|
224
|
+
|
|
225
|
+
| 当前状态 | 触发事件 | 下一状态 | UI 变化 |
|
|
226
|
+
|----------|----------|----------|---------|
|
|
227
|
+
| Idle | 用户点击"提交" | Loading | 按钮显示 spinner |
|
|
228
|
+
| Loading | API 返回成功 | Success | 显示成功提示,跳转 |
|
|
229
|
+
| Loading | API 返回失败 | Error | 显示错误提示 |
|
|
230
|
+
| Error | 用户点击"重试" | Loading | 重新提交 |
|
|
231
|
+
|
|
232
|
+
### 4.3 关键交互
|
|
233
|
+
|
|
234
|
+
#### 交互 1:表单验证
|
|
235
|
+
|
|
236
|
+
- **触发时机**:用户输入时(onBlur)或提交时(onSubmit)
|
|
237
|
+
- **验证规则**:
|
|
238
|
+
- 邮箱格式:`/^[^\s@]+@[^\s@]+\.[^\s@]+$/`
|
|
239
|
+
- 密码长度:≥ 8 字符
|
|
240
|
+
- 必填字段:非空
|
|
241
|
+
- **错误提示位置**:输入框下方,红色文字
|
|
242
|
+
- **成功状态**:输入框右侧显示绿色 ✓
|
|
243
|
+
|
|
244
|
+
#### 交互 2:异步操作反馈
|
|
245
|
+
|
|
246
|
+
- **Loading 状态**:
|
|
247
|
+
- 按钮文字变为"提交中..."
|
|
248
|
+
- 显示 spinner 图标
|
|
249
|
+
- 禁用按钮(`disabled={true}`)
|
|
250
|
+
- **成功状态**:
|
|
251
|
+
- Toast 提示:"操作成功"
|
|
252
|
+
- 3 秒后自动跳转
|
|
253
|
+
- **失败状态**:
|
|
254
|
+
- Toast 提示:"操作失败:{{错误信息}}"
|
|
255
|
+
- 保持当前页面,允许重试
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 5. 响应式设计
|
|
260
|
+
|
|
261
|
+
### 5.1 Breakpoint 策略
|
|
262
|
+
|
|
263
|
+
| 屏幕尺寸 | Breakpoint | 布局调整 |
|
|
264
|
+
|----------|------------|----------|
|
|
265
|
+
| Mobile | < 640px | 单列布局,全宽表单 |
|
|
266
|
+
| Tablet | 640px - 1023px | 双列布局,表单宽度 80% |
|
|
267
|
+
| Desktop | ≥ 1024px | 三列布局,表单最大宽度 480px |
|
|
268
|
+
|
|
269
|
+
### 5.2 移动端优化
|
|
270
|
+
|
|
271
|
+
- **触摸友好**:按钮最小尺寸 44x44px
|
|
272
|
+
- **键盘优化**:
|
|
273
|
+
- 邮箱输入:`type="email"` 触发邮箱键盘
|
|
274
|
+
- 手机输入:`type="tel"` 触发数字键盘
|
|
275
|
+
- **滚动优化**:避免横向滚动,使用 `overflow-x: hidden`
|
|
276
|
+
|
|
277
|
+
### 5.3 响应式示例(Tailwind)
|
|
278
|
+
|
|
279
|
+
```html
|
|
280
|
+
<div class="
|
|
281
|
+
w-full <!-- Mobile: 全宽 -->
|
|
282
|
+
sm:w-4/5 <!-- Tablet: 80% -->
|
|
283
|
+
lg:w-1/2 <!-- Desktop: 50% -->
|
|
284
|
+
lg:max-w-lg <!-- Desktop: 最大宽度 512px -->
|
|
285
|
+
mx-auto <!-- 居中 -->
|
|
286
|
+
px-4 <!-- Mobile: 左右内边距 16px -->
|
|
287
|
+
sm:px-8 <!-- Tablet: 左右内边距 32px -->
|
|
288
|
+
">
|
|
289
|
+
<!-- 内容 -->
|
|
290
|
+
</div>
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## 6. 无障碍访问(A11y)
|
|
296
|
+
|
|
297
|
+
### 6.1 关键实践
|
|
298
|
+
|
|
299
|
+
| 实践 | 实施方法 | 示例 |
|
|
300
|
+
|------|----------|------|
|
|
301
|
+
| 语义化 HTML | 使用正确的 HTML 标签 | `<button>` 而非 `<div onclick>` |
|
|
302
|
+
| 键盘导航 | 确保所有交互可用 Tab 导航 | `tabindex` 顺序逻辑 |
|
|
303
|
+
| 屏幕阅读器 | 使用 ARIA 属性 | `aria-label`, `aria-describedby` |
|
|
304
|
+
| 颜色对比度 | WCAG AA 标准(4.5:1) | 文字 vs 背景对比度检查 |
|
|
305
|
+
| 焦点可见 | 显示焦点环 | `focus:ring-2 focus:ring-blue-500` |
|
|
306
|
+
|
|
307
|
+
### 6.2 表单 A11y 示例
|
|
308
|
+
|
|
309
|
+
```html
|
|
310
|
+
<form>
|
|
311
|
+
<!-- 使用 label + for 关联 -->
|
|
312
|
+
<label for="email" class="block text-sm font-medium">
|
|
313
|
+
邮箱地址
|
|
314
|
+
</label>
|
|
315
|
+
<input
|
|
316
|
+
id="email"
|
|
317
|
+
type="email"
|
|
318
|
+
required
|
|
319
|
+
aria-describedby="email-error"
|
|
320
|
+
aria-invalid="false"
|
|
321
|
+
class="..."
|
|
322
|
+
/>
|
|
323
|
+
|
|
324
|
+
<!-- 错误提示使用 aria-live -->
|
|
325
|
+
<p
|
|
326
|
+
id="email-error"
|
|
327
|
+
role="alert"
|
|
328
|
+
aria-live="polite"
|
|
329
|
+
class="text-red-600 text-sm mt-1"
|
|
330
|
+
>
|
|
331
|
+
请输入有效的邮箱地址
|
|
332
|
+
</p>
|
|
333
|
+
|
|
334
|
+
<!-- 按钮使用 aria-label 描述状态 -->
|
|
335
|
+
<button
|
|
336
|
+
type="submit"
|
|
337
|
+
aria-label="提交登录表单"
|
|
338
|
+
aria-disabled="false"
|
|
339
|
+
class="..."
|
|
340
|
+
>
|
|
341
|
+
登录
|
|
342
|
+
</button>
|
|
343
|
+
</form>
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## 7. 视觉设计建议
|
|
349
|
+
|
|
350
|
+
### 7.1 配色方案
|
|
351
|
+
|
|
352
|
+
**主色调**:根据品牌色定义
|
|
353
|
+
|
|
354
|
+
```
|
|
355
|
+
Primary: #3B82F6 (蓝色)
|
|
356
|
+
Secondary: #10B981 (绿色)
|
|
357
|
+
Error: #EF4444 (红色)
|
|
358
|
+
Warning: #F59E0B (橙色)
|
|
359
|
+
Neutral: #6B7280 (灰色)
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
**使用场景**:
|
|
363
|
+
|
|
364
|
+
- Primary:CTA 按钮、链接
|
|
365
|
+
- Secondary:成功状态、确认操作
|
|
366
|
+
- Error:错误提示、删除操作
|
|
367
|
+
- Warning:警告提示、待处理状态
|
|
368
|
+
- Neutral:文字、边框、背景
|
|
369
|
+
|
|
370
|
+
### 7.2 字体排版
|
|
371
|
+
|
|
372
|
+
```css
|
|
373
|
+
/* 标题 */
|
|
374
|
+
h1: font-size: 2.25rem (36px), font-weight: 700
|
|
375
|
+
h2: font-size: 1.875rem (30px), font-weight: 600
|
|
376
|
+
h3: font-size: 1.5rem (24px), font-weight: 600
|
|
377
|
+
|
|
378
|
+
/* 正文 */
|
|
379
|
+
body: font-size: 1rem (16px), line-height: 1.5
|
|
380
|
+
small: font-size: 0.875rem (14px)
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### 7.3 间距系统(Tailwind 标准)
|
|
384
|
+
|
|
385
|
+
```
|
|
386
|
+
xs: 4px (p-1)
|
|
387
|
+
sm: 8px (p-2)
|
|
388
|
+
md: 16px (p-4)
|
|
389
|
+
lg: 24px (p-6)
|
|
390
|
+
xl: 32px (p-8)
|
|
391
|
+
2xl: 48px (p-12)
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
## 8. 设计资产清单
|
|
397
|
+
|
|
398
|
+
### 8.1 需要的图标
|
|
399
|
+
|
|
400
|
+
| 图标 | 用途 | 来源 |
|
|
401
|
+
|------|------|------|
|
|
402
|
+
| 关闭 (X) | 关闭弹窗、删除 | Heroicons / Lucide |
|
|
403
|
+
| 成功 (✓) | 成功状态提示 | Heroicons / Lucide |
|
|
404
|
+
| 加载中 (Spinner) | Loading 状态 | Heroicons / Lucide |
|
|
405
|
+
| 警告 (⚠) | 警告提示 | Heroicons / Lucide |
|
|
406
|
+
|
|
407
|
+
### 8.2 需要的插图/图片
|
|
408
|
+
|
|
409
|
+
- **空状态插图**:无数据时显示
|
|
410
|
+
- **错误页面插图**:404、500 页面
|
|
411
|
+
- **品牌 Logo**:Header 和 Footer
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
## 9. 开发交付清单
|
|
416
|
+
|
|
417
|
+
向开发者交付时,确保包含:
|
|
418
|
+
|
|
419
|
+
- [ ] 完整的组件树结构
|
|
420
|
+
- [ ] 每个组件的 Props 接口定义
|
|
421
|
+
- [ ] 响应式断点规则
|
|
422
|
+
- [ ] 交互状态流转图
|
|
423
|
+
- [ ] A11y 检查清单
|
|
424
|
+
- [ ] 颜色/字体/间距规范
|
|
425
|
+
- [ ] 图标和图片资产清单
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## 示例参考
|
|
430
|
+
|
|
431
|
+
### 输入示例
|
|
432
|
+
|
|
433
|
+
```
|
|
434
|
+
用户需求:实现一个用户登录页面
|
|
435
|
+
|
|
436
|
+
项目技术栈:
|
|
437
|
+
- Next.js 14 (App Router)
|
|
438
|
+
- Tailwind CSS
|
|
439
|
+
- React Hook Form
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
### 输出示例(简化版)
|
|
443
|
+
|
|
444
|
+
```markdown
|
|
445
|
+
# UI/UX 设计方案:用户登录页面
|
|
446
|
+
|
|
447
|
+
## 1. 设计目标
|
|
448
|
+
|
|
449
|
+
### 1.1 用户目标
|
|
450
|
+
- 快速完成登录(< 5 秒)
|
|
451
|
+
- 清晰的错误提示
|
|
452
|
+
|
|
453
|
+
### 1.2 业务目标
|
|
454
|
+
- 降低登录流失率
|
|
455
|
+
- 提升安全性(防暴力破解)
|
|
456
|
+
|
|
457
|
+
## 2. 页面结构设计
|
|
458
|
+
|
|
459
|
+
```
|
|
460
|
+
+------------------------------------+
|
|
461
|
+
| Header (Logo) |
|
|
462
|
+
+------------------------------------+
|
|
463
|
+
| |
|
|
464
|
+
| +---------------------------+ |
|
|
465
|
+
| | 登录表单卡片 | |
|
|
466
|
+
| | +---------+ | |
|
|
467
|
+
| | | 邮箱 | | |
|
|
468
|
+
| | +---------+ | |
|
|
469
|
+
| | | 密码 | | |
|
|
470
|
+
| | +---------+ | |
|
|
471
|
+
| | [登录按钮] | |
|
|
472
|
+
| | 忘记密码? | 注册账号 | |
|
|
473
|
+
| +---------------------------+ |
|
|
474
|
+
| |
|
|
475
|
+
+------------------------------------+
|
|
476
|
+
| Footer |
|
|
477
|
+
+------------------------------------+
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
## 3. 组件拆分
|
|
481
|
+
|
|
482
|
+
### 3.1 组件树
|
|
483
|
+
|
|
484
|
+
```
|
|
485
|
+
LoginPage
|
|
486
|
+
├── PageHeader
|
|
487
|
+
│ └── Logo
|
|
488
|
+
├── LoginCard
|
|
489
|
+
│ ├── LoginForm
|
|
490
|
+
│ │ ├── EmailInput
|
|
491
|
+
│ │ ├── PasswordInput
|
|
492
|
+
│ │ └── SubmitButton
|
|
493
|
+
│ └── FooterLinks
|
|
494
|
+
│ ├── ForgotPasswordLink
|
|
495
|
+
│ └── SignUpLink
|
|
496
|
+
└── PageFooter
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
### 3.2 核心组件: `LoginForm`
|
|
500
|
+
|
|
501
|
+
**Props 接口**:
|
|
502
|
+
|
|
503
|
+
```typescript
|
|
504
|
+
interface LoginFormProps {
|
|
505
|
+
onSubmit: (email: string, password: string) => Promise<void>
|
|
506
|
+
isLoading?: boolean
|
|
507
|
+
errorMessage?: string
|
|
508
|
+
}
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
**状态管理**:
|
|
512
|
+
|
|
513
|
+
- `email: string` - 邮箱输入值
|
|
514
|
+
- `password: string` - 密码输入值
|
|
515
|
+
- `errors: { email?: string; password?: string }` - 验证错误
|
|
516
|
+
|
|
517
|
+
**验证规则**:
|
|
518
|
+
|
|
519
|
+
- 邮箱:必填 + 格式验证
|
|
520
|
+
- 密码:必填 + 最少 8 字符
|
|
521
|
+
|
|
522
|
+
## 4. 交互流程
|
|
523
|
+
|
|
524
|
+
### 4.1 正常流程
|
|
525
|
+
|
|
526
|
+
1. 用户输入邮箱和密码
|
|
527
|
+
2. 点击"登录"按钮
|
|
528
|
+
3. 显示 loading 状态(按钮禁用 + spinner)
|
|
529
|
+
4. API 返回成功 → Toast 提示 → 跳转首页
|
|
530
|
+
|
|
531
|
+
### 4.2 错误流程
|
|
532
|
+
|
|
533
|
+
1. 用户输入错误密码
|
|
534
|
+
2. 点击"登录"按钮
|
|
535
|
+
3. API 返回 401 错误
|
|
536
|
+
4. 显示错误提示:"邮箱或密码错误"
|
|
537
|
+
5. 密码输入框清空,焦点回到密码框
|
|
538
|
+
|
|
539
|
+
## 5. 响应式设计
|
|
540
|
+
|
|
541
|
+
| 屏幕 | 卡片宽度 | 其他调整 |
|
|
542
|
+
|------|----------|----------|
|
|
543
|
+
| Mobile | 100% | 移除卡片阴影 |
|
|
544
|
+
| Tablet | 80% | 居中显示 |
|
|
545
|
+
| Desktop | 480px 最大宽度 | 居中 + 阴影 |
|
|
546
|
+
|
|
547
|
+
## 6. A11y 要点
|
|
548
|
+
|
|
549
|
+
- 表单使用 `<label>` + `for` 属性
|
|
550
|
+
- 错误提示使用 `aria-live="polite"`
|
|
551
|
+
- 键盘 Tab 顺序:邮箱 → 密码 → 登录按钮 → 忘记密码 → 注册
|
|
552
|
+
- 焦点可见:`focus:ring-2 focus:ring-blue-500`
|
|
553
|
+
|
|
554
|
+
## 7. 开发交付
|
|
555
|
+
|
|
556
|
+
- [ ] LoginPage.tsx
|
|
557
|
+
- [ ] LoginForm.tsx (含验证逻辑)
|
|
558
|
+
- [ ] EmailInput.tsx / PasswordInput.tsx (可复用)
|
|
559
|
+
- [ ] SubmitButton.tsx (含 loading 状态)
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
---
|
|
563
|
+
|
|
564
|
+
## 使用指南
|
|
565
|
+
|
|
566
|
+
调用本 agent 时,请提供:
|
|
567
|
+
|
|
568
|
+
1. **功能需求**:用户想要达成什么?
|
|
569
|
+
2. **技术栈**:框架、CSS 方案、状态管理
|
|
570
|
+
3. **设计约束**:品牌色、字体、已有组件库
|
|
571
|
+
4. **目标平台**:Web / Mobile / 跨平台
|
|
572
|
+
|
|
573
|
+
本 agent 将返回详细的 UI/UX 设计文档,供 planner agent 或开发者使用。
|