cc-devflow 1.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/.claude/CLAUDE.md +83 -0
- package/.claude/agents/architecture-designer.md +443 -0
- package/.claude/agents/bug-analyzer.md +382 -0
- package/.claude/agents/checklist-agent.md +175 -0
- package/.claude/agents/clarify-analyst.md +50 -0
- package/.claude/agents/code-reviewer.md +71 -0
- package/.claude/agents/codex-analyzer.md +39 -0
- package/.claude/agents/compatibility-checker.md +580 -0
- package/.claude/agents/consistency-checker.md +532 -0
- package/.claude/agents/impact-analyzer.md +441 -0
- package/.claude/agents/planner.md +230 -0
- package/.claude/agents/prd-writer.md +320 -0
- package/.claude/agents/project-guidelines-generator.md +1329 -0
- package/.claude/agents/qa-tester.md +313 -0
- package/.claude/agents/release-manager.md +295 -0
- package/.claude/agents/security-reviewer.md +314 -0
- package/.claude/agents/style-guide-generator.md +458 -0
- package/.claude/agents/tech-architect.md +516 -0
- package/.claude/agents/ui-designer.md +485 -0
- package/.claude/commands/code-review-high.md +58 -0
- package/.claude/commands/core-architecture.md +429 -0
- package/.claude/commands/core-guidelines.md +486 -0
- package/.claude/commands/core-roadmap.md +439 -0
- package/.claude/commands/core-style.md +293 -0
- package/.claude/commands/flow-archive.md +245 -0
- package/.claude/commands/flow-checklist.md +260 -0
- package/.claude/commands/flow-clarify.md +136 -0
- package/.claude/commands/flow-constitution.md +82 -0
- package/.claude/commands/flow-dev.md +134 -0
- package/.claude/commands/flow-epic.md +150 -0
- package/.claude/commands/flow-fix.md +104 -0
- package/.claude/commands/flow-ideate.md +214 -0
- package/.claude/commands/flow-init.md +313 -0
- package/.claude/commands/flow-new.md +394 -0
- package/.claude/commands/flow-prd.md +131 -0
- package/.claude/commands/flow-qa.md +93 -0
- package/.claude/commands/flow-release.md +92 -0
- package/.claude/commands/flow-restart.md +98 -0
- package/.claude/commands/flow-status.md +64 -0
- package/.claude/commands/flow-tech.md +142 -0
- package/.claude/commands/flow-ui.md +189 -0
- package/.claude/commands/flow-update.md +111 -0
- package/.claude/commands/flow-upgrade.md +115 -0
- package/.claude/commands/flow-verify.md +96 -0
- package/.claude/commands/problem-analyzer.md +60 -0
- package/.claude/config/quality-rules.yml +161 -0
- package/.claude/docs/SPEC_KIT_CONSTITUTION_ANALYSIS.md +426 -0
- package/.claude/docs/design/consistency-conflict-detection-algorithms.md +658 -0
- package/.claude/docs/design/intent-driven-input-design.md +380 -0
- package/.claude/docs/design/prd-version-management-design.md +437 -0
- package/.claude/docs/guides/INIT_TROUBLESHOOTING.md +117 -0
- package/.claude/docs/guides/NEW_TROUBLESHOOTING.md +151 -0
- package/.claude/docs/guides/ROADMAP_TROUBLESHOOTING.md +188 -0
- package/.claude/docs/guides/TASK_COMPLETION_MARKING.md +338 -0
- package/.claude/docs/templates/ARCHITECTURE_TEMPLATE.md +633 -0
- package/.claude/docs/templates/BACKLOG_TEMPLATE.md +261 -0
- package/.claude/docs/templates/CHECKLIST_TEMPLATE.md +52 -0
- package/.claude/docs/templates/CLARIFICATION_REPORT_TEMPLATE.md +206 -0
- package/.claude/docs/templates/CODE_REVIEW_TEMPLATE.md +71 -0
- package/.claude/docs/templates/EPIC_TEMPLATE.md +805 -0
- package/.claude/docs/templates/INIT_FLOW_TEMPLATE.md +213 -0
- package/.claude/docs/templates/INTENT_CLARIFICATION_TEMPLATE.md +57 -0
- package/.claude/docs/templates/NEW_ORCHESTRATION_TEMPLATE.md +148 -0
- package/.claude/docs/templates/PRD_TEMPLATE.md +562 -0
- package/.claude/docs/templates/RESEARCH_TEMPLATE.md +276 -0
- package/.claude/docs/templates/REVIEW-HIGH.md +57 -0
- package/.claude/docs/templates/ROADMAP_DIALOGUE_TEMPLATE.md +198 -0
- package/.claude/docs/templates/ROADMAP_TEMPLATE.md +310 -0
- package/.claude/docs/templates/STYLE_TEMPLATE.md +1266 -0
- package/.claude/docs/templates/TASKS_TEMPLATE.md +523 -0
- package/.claude/docs/templates/TECH_DESIGN_TEMPLATE.md +1019 -0
- package/.claude/docs/templates/UI_PROTOTYPE_TEMPLATE.md +1436 -0
- package/.claude/guides/agent-guides/agent-coordination-guide.md +459 -0
- package/.claude/guides/project-guidelines-system.md +463 -0
- package/.claude/guides/technical-guides/datetime-handling-guide.md +563 -0
- package/.claude/guides/technical-guides/git-github-guide.md +642 -0
- package/.claude/guides/technical-guides/test-execution-guide.md +618 -0
- package/.claude/guides/workflow-guides/bug-fix-orchestrator.md +217 -0
- package/.claude/guides/workflow-guides/flow-orchestrator.md +282 -0
- package/.claude/hooks/checklist-gate.js +397 -0
- package/.claude/hooks/error-handling-reminder.sh +12 -0
- package/.claude/hooks/error-handling-reminder.ts +459 -0
- package/.claude/hooks/post-tool-use-tracker.sh +280 -0
- package/.claude/hooks/pre-tool-use-guardrail.sh +36 -0
- package/.claude/hooks/pre-tool-use-guardrail.ts +342 -0
- package/.claude/hooks/skill-activation-prompt.sh +36 -0
- package/.claude/hooks/skill-activation-prompt.ts +214 -0
- package/.claude/hooks/state/skills-used-test-guard.json +3 -0
- package/.claude/rules/devflow-conventions.md +305 -0
- package/.claude/rules/project-constitution.md +748 -0
- package/.claude/schemas/constitution.schema.json +43 -0
- package/.claude/scripts/analyze-upgrade-impact.sh +200 -0
- package/.claude/scripts/archive-requirement.sh +351 -0
- package/.claude/scripts/calculate-checklist-completion.sh +243 -0
- package/.claude/scripts/calculate-quarter.sh +206 -0
- package/.claude/scripts/check-dependencies.sh +409 -0
- package/.claude/scripts/check-prerequisites.sh +232 -0
- package/.claude/scripts/check-task-status.sh +264 -0
- package/.claude/scripts/checklist-errors.sh +131 -0
- package/.claude/scripts/common.sh +570 -0
- package/.claude/scripts/consolidate-research.sh +182 -0
- package/.claude/scripts/create-requirement.sh +426 -0
- package/.claude/scripts/export-contracts.sh +117 -0
- package/.claude/scripts/extract-data-model.sh +78 -0
- package/.claude/scripts/generate-clarification-questions.sh +377 -0
- package/.claude/scripts/generate-clarification-report.sh +463 -0
- package/.claude/scripts/generate-quickstart.sh +146 -0
- package/.claude/scripts/generate-research-tasks.sh +157 -0
- package/.claude/scripts/generate-status-report.sh +523 -0
- package/.claude/scripts/generate-tech-analysis.sh +46 -0
- package/.claude/scripts/locate-requirement-in-roadmap.sh +233 -0
- package/.claude/scripts/manage-constitution.sh +602 -0
- package/.claude/scripts/mark-task-complete.sh +198 -0
- package/.claude/scripts/populate-research-tasks.sh +259 -0
- package/.claude/scripts/recover-workflow.sh +460 -0
- package/.claude/scripts/run-clarify-scan.sh +601 -0
- package/.claude/scripts/run-high-review.sh +62 -0
- package/.claude/scripts/run-problem-analysis.sh +68 -0
- package/.claude/scripts/setup-epic.sh +173 -0
- package/.claude/scripts/sync-roadmap-progress.sh +300 -0
- package/.claude/scripts/sync-task-marks.sh +199 -0
- package/.claude/scripts/test-clarify-scan.sh +515 -0
- package/.claude/scripts/update-agent-context.sh +806 -0
- package/.claude/scripts/validate-constitution.sh +567 -0
- package/.claude/scripts/validate-hooks.sh +487 -0
- package/.claude/scripts/validate-research.sh +332 -0
- package/.claude/scripts/validate-scope-boundary.sh +493 -0
- package/.claude/scripts/verify-setup.sh +37 -0
- package/.claude/settings.json +76 -0
- package/.claude/skills/_reference-implementations/README.md +96 -0
- package/.claude/skills/_reference-implementations/backend-express-prisma/SKILL.md +302 -0
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/architecture-overview.md +451 -0
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/async-and-errors.md +307 -0
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/complete-examples.md +638 -0
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/configuration.md +275 -0
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/database-patterns.md +224 -0
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/middleware-guide.md +213 -0
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/routing-and-controllers.md +756 -0
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/sentry-and-monitoring.md +336 -0
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/services-and-repositories.md +789 -0
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/testing-guide.md +235 -0
- package/.claude/skills/_reference-implementations/backend-express-prisma/resources/validation-patterns.md +754 -0
- package/.claude/skills/_reference-implementations/frontend-react-mui/SKILL.md +399 -0
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/common-patterns.md +331 -0
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/complete-examples.md +872 -0
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/component-patterns.md +502 -0
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/data-fetching.md +767 -0
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/file-organization.md +502 -0
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/loading-and-error-states.md +501 -0
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/performance.md +406 -0
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/routing-guide.md +364 -0
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/styling-guide.md +428 -0
- package/.claude/skills/_reference-implementations/frontend-react-mui/resources/typescript-standards.md +418 -0
- package/.claude/skills/cc-devflow-orchestrator/SKILL.md +229 -0
- package/.claude/skills/constitution-guardian/SKILL.md +306 -0
- package/.claude/skills/devflow-constitution-quick-ref/SKILL.md +374 -0
- package/.claude/skills/devflow-file-standards/SKILL.md +353 -0
- package/.claude/skills/devflow-tdd-enforcer/SKILL.md +192 -0
- package/.claude/skills/skill-developer/ADVANCED.md +197 -0
- package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +306 -0
- package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +152 -0
- package/.claude/skills/skill-developer/SKILL.md +426 -0
- package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +315 -0
- package/.claude/skills/skill-developer/TRIGGER_TYPES.md +305 -0
- package/.claude/skills/skill-developer/TROUBLESHOOTING.md +514 -0
- package/.claude/skills/skill-rules.json +213 -0
- package/.claude/tests/README.md +300 -0
- package/.claude/tests/TODO.md +69 -0
- package/.claude/tests/__pycache__/test_analyze_upgrade_impact.cpython-311-pytest-7.2.2.pyc +0 -0
- package/.claude/tests/__pycache__/test_consolidate_research.cpython-311-pytest-7.2.2.pyc +0 -0
- package/.claude/tests/__pycache__/test_export_contracts.cpython-311-pytest-7.2.2.pyc +0 -0
- package/.claude/tests/__pycache__/test_extract_data_model.cpython-311-pytest-7.2.2.pyc +0 -0
- package/.claude/tests/__pycache__/test_generate_quickstart.cpython-311-pytest-7.2.2.pyc +0 -0
- package/.claude/tests/__pycache__/test_generate_research_tasks.cpython-311-pytest-7.2.2.pyc +0 -0
- package/.claude/tests/constitution/run_all_constitution_tests.sh +111 -0
- package/.claude/tests/constitution/test_agent_assignment.sh +207 -0
- package/.claude/tests/constitution/test_article_coverage.sh +201 -0
- package/.claude/tests/constitution/test_template_completeness.sh +150 -0
- package/.claude/tests/constitution/test_version_consistency.sh +120 -0
- package/.claude/tests/fixtures/spec_delta_full.md +16 -0
- package/.claude/tests/fixtures/tasks_progress_sample.md +5 -0
- package/.claude/tests/run-all-tests.sh +229 -0
- package/.claude/tests/scripts/run.sh +30 -0
- package/.claude/tests/scripts/test-framework.sh +128 -0
- package/.claude/tests/scripts/test_check_prerequisites.sh +511 -0
- package/.claude/tests/scripts/test_check_prerequisites.sh.bak +504 -0
- package/.claude/tests/scripts/test_check_prerequisites.sh.bak2 +505 -0
- package/.claude/tests/scripts/test_check_prerequisites.sh.bak3 +506 -0
- package/.claude/tests/scripts/test_check_prerequisites.sh.bak4 +507 -0
- package/.claude/tests/scripts/test_check_prerequisites.sh.bak5 +508 -0
- package/.claude/tests/scripts/test_check_task_status.sh +499 -0
- package/.claude/tests/scripts/test_common.sh +244 -0
- package/.claude/tests/scripts/test_generate_status_report.sh +71 -0
- package/.claude/tests/scripts/test_mark_task_complete.sh +441 -0
- package/.claude/tests/scripts/test_mark_task_complete.sh.backup +410 -0
- package/.claude/tests/scripts/test_recover_workflow.sh +304 -0
- package/.claude/tests/scripts/test_setup_epic.sh +437 -0
- package/.claude/tests/scripts/test_sync_task_marks.sh +196 -0
- package/.claude/tests/scripts/test_validate_constitution.sh +74 -0
- package/.claude/tests/scripts/test_validate_research.sh +462 -0
- package/.claude/tests/slugify.bats +82 -0
- package/.claude/tests/test-framework.sh +732 -0
- package/.claude/tests/test_analyze_upgrade_impact.py +34 -0
- package/.claude/tests/test_consolidate_research.py +48 -0
- package/.claude/tests/test_export_contracts.py +43 -0
- package/.claude/tests/test_extract_data_model.py +33 -0
- package/.claude/tests/test_generate_quickstart.py +50 -0
- package/.claude/tests/test_generate_research_tasks.py +52 -0
- package/.claude/tsc-cache/6e64f818-6398-49ca-8623-581a9af85c44/edited-files.log +1 -0
- package/.claude/tsc-cache/795ba6e3-b98a-423b-bab2-51aa62812569/affected-repos.txt +1 -0
- package/.claude/tsc-cache/795ba6e3-b98a-423b-bab2-51aa62812569/edited-files.log +1 -0
- package/.claude/tsc-cache/ae335694-be5a-4ba4-a1a0-b676c09a7906/affected-repos.txt +1 -0
- package/.claude/tsc-cache/ae335694-be5a-4ba4-a1a0-b676c09a7906/edited-files.log +1 -0
- package/CHANGELOG.md +507 -0
- package/LICENSE +21 -0
- package/README.md +534 -0
- package/README.zh-CN.md +530 -0
- package/bin/adapt.js +240 -0
- package/bin/cc-devflow-cli.js +185 -0
- package/bin/cc-devflow.js +78 -0
- package/config/adapters.yml +5 -0
- package/config/schema/adapters.schema.json +44 -0
- package/docs/CLAUDE.md +26 -0
- package/docs/commands/README.md +61 -0
- package/docs/commands/README.zh-CN.md +55 -0
- package/docs/commands/core-roadmap.md +106 -0
- package/docs/commands/core-roadmap.zh-CN.md +102 -0
- package/docs/commands/core-style.md +405 -0
- package/docs/commands/core-style.zh-CN.md +405 -0
- package/docs/commands/flow-init.md +134 -0
- package/docs/commands/flow-init.zh-CN.md +163 -0
- package/docs/commands/flow-new.md +274 -0
- package/docs/commands/flow-new.zh-CN.md +270 -0
- package/docs/guides/getting-started.md +204 -0
- package/docs/guides/getting-started.zh-CN.md +152 -0
- package/lib/adapters/adapter-interface.js +57 -0
- package/lib/adapters/claude-adapter.js +74 -0
- package/lib/adapters/codex-adapter.js +40 -0
- package/lib/adapters/config-validator.js +68 -0
- package/lib/adapters/logger.js +42 -0
- package/lib/adapters/registry.js +153 -0
- package/lib/compiler/CLAUDE.md +92 -0
- package/lib/compiler/__tests__/drift.test.js +215 -0
- package/lib/compiler/__tests__/errors.test.js +184 -0
- package/lib/compiler/__tests__/incremental.test.js +174 -0
- package/lib/compiler/__tests__/integration.test.js +174 -0
- package/lib/compiler/__tests__/manifest.test.js +233 -0
- package/lib/compiler/__tests__/parser.test.js +456 -0
- package/lib/compiler/__tests__/schemas.test.js +301 -0
- package/lib/compiler/__tests__/skills-registry.test.js +125 -0
- package/lib/compiler/__tests__/transformer.test.js +286 -0
- package/lib/compiler/emitters/antigravity-emitter.js +171 -0
- package/lib/compiler/emitters/base-emitter.js +73 -0
- package/lib/compiler/emitters/codex-emitter.js +52 -0
- package/lib/compiler/emitters/cursor-emitter.js +31 -0
- package/lib/compiler/emitters/index.js +50 -0
- package/lib/compiler/emitters/qwen-emitter.js +39 -0
- package/lib/compiler/errors.js +119 -0
- package/lib/compiler/index.js +256 -0
- package/lib/compiler/manifest.js +242 -0
- package/lib/compiler/parser.js +258 -0
- package/lib/compiler/platforms.js +113 -0
- package/lib/compiler/resource-copier.js +320 -0
- package/lib/compiler/rules-emitters/__tests__/antigravity-rules-emitter.test.js +191 -0
- package/lib/compiler/rules-emitters/__tests__/codex-rules-emitter.test.js +109 -0
- package/lib/compiler/rules-emitters/__tests__/cursor-rules-emitter.test.js +123 -0
- package/lib/compiler/rules-emitters/__tests__/qwen-rules-emitter.test.js +123 -0
- package/lib/compiler/rules-emitters/antigravity-rules-emitter.js +253 -0
- package/lib/compiler/rules-emitters/base-rules-emitter.js +83 -0
- package/lib/compiler/rules-emitters/codex-rules-emitter.js +116 -0
- package/lib/compiler/rules-emitters/cursor-rules-emitter.js +98 -0
- package/lib/compiler/rules-emitters/index.js +71 -0
- package/lib/compiler/rules-emitters/qwen-rules-emitter.js +70 -0
- package/lib/compiler/schemas.js +144 -0
- package/lib/compiler/skills-registry.js +225 -0
- package/lib/compiler/transformer.js +236 -0
- package/package.json +50 -0
|
@@ -0,0 +1,1436 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: UI Prototype Template
|
|
3
|
+
description: Self-executable template for generating interactive HTML prototypes from PRD
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
created: 2025-01-10
|
|
6
|
+
updated: 2025-01-10
|
|
7
|
+
type: self-executable-template
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# UI Prototype Template - 自执行原型生成模板
|
|
11
|
+
|
|
12
|
+
**目的**: 从PRD需求文档生成完整的HTML交互原型,融合艺术设计灵感,输出可直接用于开发实现的高质量原型。
|
|
13
|
+
|
|
14
|
+
**使用者**: ui-designer研究型代理
|
|
15
|
+
**输入**: PRD.md (产品需求文档)
|
|
16
|
+
**输出**: UI_PROTOTYPE.html (完整单文件HTML原型)
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## ⚠️ CRITICAL ANTI-GENERIC-DESIGN RULES
|
|
21
|
+
|
|
22
|
+
### 强制约束
|
|
23
|
+
1. **NO PLACEHOLDER IMAGES**: 必须使用Picsum真实图片资源
|
|
24
|
+
2. **NO GENERIC PURPLE/BLUE**: 禁止千篇一律的紫色/蓝色AI风格
|
|
25
|
+
3. **NO EMOJI ICONS**: 使用SVG图标或图标库(Lucide/Heroicons/Tabler)
|
|
26
|
+
4. **NO LOREM IPSUM**: 使用真实业务场景内容
|
|
27
|
+
5. **COMPLETE INTERACTIONS**: 所有交互元素必须有完整状态(hover/active/disabled/error)
|
|
28
|
+
6. **ARTISTIC INSPIRATION**: 必须从灵感池采样2位大师并转译风格
|
|
29
|
+
|
|
30
|
+
### 质量标准
|
|
31
|
+
- [ ] HTML文件可独立运行(无外部依赖文件)
|
|
32
|
+
- [ ] 响应式布局在三种断点正常显示(320px/768px/1024px)
|
|
33
|
+
- [ ] 所有PRD用户故事都有对应UI页面或组件
|
|
34
|
+
- [ ] 设计系统完整(色彩/字体/栅格/间距/组件)
|
|
35
|
+
- [ ] 通过Constitution检查(NO PARTIAL IMPLEMENTATION)
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Execution Flow (10 Phases)
|
|
40
|
+
|
|
41
|
+
本模板的Execution Flow定义了ui-designer代理必须遵循的10个阶段。
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
### Phase 1: Product Analysis (产品经理分析)
|
|
46
|
+
|
|
47
|
+
**目标**: 从PRD中提取核心功能、用户流程和UI需求
|
|
48
|
+
|
|
49
|
+
**输入**: PRD.md
|
|
50
|
+
**输出**: 产品分析报告(嵌入HTML注释)
|
|
51
|
+
|
|
52
|
+
**执行步骤**:
|
|
53
|
+
```markdown
|
|
54
|
+
1.1 读取PRD.md文档
|
|
55
|
+
→ 使用 check-prerequisites.sh 获取文件路径
|
|
56
|
+
|
|
57
|
+
1.2 提取关键信息:
|
|
58
|
+
- 目标用户画像(从"背景与目标"章节)
|
|
59
|
+
- 核心功能列表(从"用户故事"章节)
|
|
60
|
+
- 关键任务流程(从"验收标准"章节)
|
|
61
|
+
- UI相关的非功能需求(性能/可访问性/响应式)
|
|
62
|
+
|
|
63
|
+
1.3 识别页面类型:
|
|
64
|
+
- 认证页面(登录/注册/重置密码)
|
|
65
|
+
- 仪表盘/主界面
|
|
66
|
+
- 列表/表格页面
|
|
67
|
+
- 详情/编辑页面
|
|
68
|
+
- 表单/创建页面
|
|
69
|
+
- 设置/配置页面
|
|
70
|
+
|
|
71
|
+
1.4 构建信息架构草图:
|
|
72
|
+
页面层级
|
|
73
|
+
└─ 导航结构
|
|
74
|
+
└─ 核心交互路径
|
|
75
|
+
|
|
76
|
+
1.5 输出产品分析报告(存储为变量,稍后写入HTML注释):
|
|
77
|
+
"""
|
|
78
|
+
## Product Analysis
|
|
79
|
+
- Target Users: {用户画像}
|
|
80
|
+
- Core Features: {功能列表}
|
|
81
|
+
- Page Types: {页面类型}
|
|
82
|
+
- Critical Flows: {关键流程}
|
|
83
|
+
"""
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**验证点**:
|
|
87
|
+
- [x] 至少识别出3个核心功能
|
|
88
|
+
- [x] 明确定义了主要用户角色
|
|
89
|
+
- [x] 识别出至少2个关键任务流程
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
### Phase 2: Design Inspiration Sampling (设计灵感采样)
|
|
94
|
+
|
|
95
|
+
**目标**: 从80+位艺术家/设计师/建筑师中随机采样2位,生成风格转译说明
|
|
96
|
+
|
|
97
|
+
**输入**: 灵感来源池(见下方)
|
|
98
|
+
**输出**: 设计灵感报告(2位大师+转译说明)
|
|
99
|
+
|
|
100
|
+
**执行步骤**:
|
|
101
|
+
```markdown
|
|
102
|
+
2.1 随机采样策略:
|
|
103
|
+
- 从不同类别中选择(避免风格过于相似)
|
|
104
|
+
- 优先组合: 现代主义 + 生成艺术, 建筑 + 平面设计
|
|
105
|
+
- 避免组合: 同类别内的大师(如两位都是建筑师)
|
|
106
|
+
|
|
107
|
+
2.2 为每位大师生成转译说明:
|
|
108
|
+
模板:
|
|
109
|
+
"""
|
|
110
|
+
**灵感来源X**: {艺术家姓名} ({类别})
|
|
111
|
+
**核心特质**: {艺术家代表性特点,1-2句话}
|
|
112
|
+
**网页转译**:
|
|
113
|
+
- 色彩: {具体色值} → {应用场景}
|
|
114
|
+
- 版式: {布局策略} → {CSS实现方式}
|
|
115
|
+
- 形态: {视觉元素} → {HTML/CSS实现}
|
|
116
|
+
- 动效: {动态特征} → {CSS/JS实现}
|
|
117
|
+
**禁止模仿**: 不复刻{具体作品名称}的{具体元素}
|
|
118
|
+
"""
|
|
119
|
+
|
|
120
|
+
2.3 生成设计关键词:
|
|
121
|
+
从转译说明中提取3-5个关键设计方向
|
|
122
|
+
示例: ["网格秩序", "高对比撞色", "曲线切割", "200ms过渡动效"]
|
|
123
|
+
|
|
124
|
+
2.4 定义配色方案基调:
|
|
125
|
+
根据灵感来源确定主色调
|
|
126
|
+
避免: #6B46C1(常见AI紫), #3B82F6(常见AI蓝)
|
|
127
|
+
推荐: 基于大师作品的特征色,但调整明度/饱和度
|
|
128
|
+
|
|
129
|
+
2.5 输出设计灵感报告(存储为变量):
|
|
130
|
+
包含2位大师的完整转译说明
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**灵感来源池** (80+ Masters):
|
|
134
|
+
|
|
135
|
+
#### 类别1: 影视片头 / 动态叙事
|
|
136
|
+
Saul Bass, Maurice Binder, Pablo Ferro, Dan Perri, Kyle Cooper
|
|
137
|
+
|
|
138
|
+
#### 类别2: 平面 / 字体 / 后现代图形
|
|
139
|
+
Paula Scher, Neville Brody, April Greiman, David Carson, Jamie Reid, Push Pin Studios (Seymour Chwast)
|
|
140
|
+
|
|
141
|
+
#### 类别3: 现代主义信息设计 / 网格系统
|
|
142
|
+
Massimo Vignelli, Josef Müller-Brockmann, Otl Aicher, Armin Hofmann, Karl Gerstner, Muriel Cooper
|
|
143
|
+
|
|
144
|
+
#### 类别4: 几何与抽象艺术 / 光学艺术
|
|
145
|
+
Piet Mondrian, Sonia Delaunay, Josef Albers, Victor Vasarely, Bridget Riley, M. C. Escher, Paul Klee, Kazimir Malevich, Joan Miró, Henri Matisse, Mark Rothko, René Magritte, Salvador Dalí
|
|
146
|
+
|
|
147
|
+
#### 类别5: 亚洲与当代艺术
|
|
148
|
+
Yayoi Kusama, Takashi Murakami, Katsushika Hokusai(葛饰北斋), Xu Bing(徐冰), Zao Wou-Ki(赵无极)
|
|
149
|
+
|
|
150
|
+
#### 类别6: 生成艺术 / 新媒体
|
|
151
|
+
John Maeda, Casey Reas, Zach Lieberman, Vera Molnár, Manfred Mohr, Refik Anadol, Sougwen Chung
|
|
152
|
+
|
|
153
|
+
#### 类别7: 建筑 / 空间形态
|
|
154
|
+
Zaha Hadid, Bjarke Ingels (BIG), Thomas Heatherwick, Olafur Eliasson, Le Corbusier, Ludwig Mies van der Rohe, Frank Lloyd Wright, Alvar Aalto, Louis Kahn, Norman Foster, Renzo Piano, Herzog & de Meuron, OMA/Rem Koolhaas, Tadao Ando(安藤忠雄), SANAA(Sejima & Nishizawa), Kengo Kuma(隈研吾), Kenzo Tange(丹下健三), Lina Bo Bardi, Luis Barragán
|
|
155
|
+
|
|
156
|
+
#### 类别8: 工业 / 硬件设备设计
|
|
157
|
+
Dieter Rams(Braun), Jony Ive(Apple), Naoto Fukasawa(无印良品), Jasper Morrison, Marc Newson, Yves Béhar, Hartmut Esslinger(frog), Raymond Loewy, Richard Sapper(ThinkPad), Charles & Ray Eames, Sori Yanagi, Kenji Ekuan(龟甲万壶/新干线), Nendo(Oki Sato), Philippe Starck, F. A. Porsche, James Dyson, Teenage Engineering, Susan Kare(界面图标语义)
|
|
158
|
+
|
|
159
|
+
**验证点**:
|
|
160
|
+
- [x] 采样了2位来自不同类别的大师
|
|
161
|
+
- [x] 每位大师都有明确的转译说明(色彩/版式/形态/动效)
|
|
162
|
+
- [x] 明确了禁止模仿的具体作品/元素
|
|
163
|
+
- [x] 生成了配色方案基调(非常见AI紫/蓝)
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
### Phase 3: Design System Definition (设计系统定义)
|
|
168
|
+
|
|
169
|
+
**目标**: 基于设计灵感,定义完整的设计系统(色彩/字体/栅格/间距/组件)
|
|
170
|
+
|
|
171
|
+
**输入**: Phase 2的设计灵感报告
|
|
172
|
+
**输出**: Design Tokens (CSS变量形式)
|
|
173
|
+
|
|
174
|
+
**执行步骤**:
|
|
175
|
+
```markdown
|
|
176
|
+
3.1 色彩系统 (Color Palette):
|
|
177
|
+
基于Phase 2的配色基调,定义:
|
|
178
|
+
- 主色 (Primary): 1个主色 + 3个深浅变体
|
|
179
|
+
- 辅色 (Secondary): 1-2个辅色 + 变体
|
|
180
|
+
- 中性色 (Neutral): 灰度7-9级(50/100/200/.../900)
|
|
181
|
+
- 状态色 (Semantic): 成功/警告/错误/信息(各3个变体)
|
|
182
|
+
- 表面色 (Surface): 背景/卡片/浮层
|
|
183
|
+
|
|
184
|
+
示例:
|
|
185
|
+
--primary-500: #0066CC;
|
|
186
|
+
--primary-600: #0052A3;
|
|
187
|
+
--primary-400: #3385D6;
|
|
188
|
+
|
|
189
|
+
⚠️ 禁止使用:
|
|
190
|
+
- 纯黑 #000000
|
|
191
|
+
- 纯白 #FFFFFF
|
|
192
|
+
- 常见AI紫 #6B46C1
|
|
193
|
+
- 常见AI蓝 #3B82F6
|
|
194
|
+
|
|
195
|
+
3.2 字体系统 (Typography):
|
|
196
|
+
- 字体栈: 优先Google Fonts,备用系统字体
|
|
197
|
+
- 中英文混排: 英文字体 + 中文备用(思源黑体/苹方)
|
|
198
|
+
- 字号系统: 6-8级 (12/14/16/18/20/24/32/48px)
|
|
199
|
+
- 字重: 400 Regular, 500 Medium, 600 Semi-Bold, 700 Bold
|
|
200
|
+
- 行高: 标题1.2-1.3, 正文1.5-1.6, 小字1.4
|
|
201
|
+
|
|
202
|
+
示例:
|
|
203
|
+
--font-base: 'Inter', 'Noto Sans SC', system-ui, sans-serif;
|
|
204
|
+
--font-size-base: 16px;
|
|
205
|
+
--font-size-lg: 18px;
|
|
206
|
+
--line-height-base: 1.5;
|
|
207
|
+
|
|
208
|
+
3.3 间距系统 (Spacing):
|
|
209
|
+
基于8px栅格或4px栅格
|
|
210
|
+
- 基础单位: 4px或8px
|
|
211
|
+
- 间距级别: 1/2/3/4/6/8/12/16/24/32/48/64
|
|
212
|
+
|
|
213
|
+
示例:
|
|
214
|
+
--space-1: 0.25rem; /* 4px */
|
|
215
|
+
--space-2: 0.5rem; /* 8px */
|
|
216
|
+
--space-4: 1rem; /* 16px */
|
|
217
|
+
--space-8: 2rem; /* 32px */
|
|
218
|
+
|
|
219
|
+
3.4 栅格系统 (Grid):
|
|
220
|
+
- 容器最大宽度: 1200px或1280px
|
|
221
|
+
- 列数: 12列
|
|
222
|
+
- 间距: 16px或24px
|
|
223
|
+
- 响应式断点:
|
|
224
|
+
* Mobile: 320px-767px
|
|
225
|
+
* Tablet: 768px-1023px
|
|
226
|
+
* Desktop: 1024px+
|
|
227
|
+
|
|
228
|
+
3.5 圆角与阴影 (Border Radius & Shadow):
|
|
229
|
+
- 圆角: 4px/8px/12px/16px/9999px(圆形)
|
|
230
|
+
- 阴影层级: 3-4级(小/中/大/超大)
|
|
231
|
+
|
|
232
|
+
示例:
|
|
233
|
+
--radius-sm: 4px;
|
|
234
|
+
--radius-md: 8px;
|
|
235
|
+
--shadow-sm: 0 1px 2px rgba(0,0,0,0.05);
|
|
236
|
+
--shadow-md: 0 4px 6px rgba(0,0,0,0.1);
|
|
237
|
+
|
|
238
|
+
3.6 动效系统 (Animation):
|
|
239
|
+
- 过渡时长: 150ms/200ms/300ms
|
|
240
|
+
- 缓动函数: ease/ease-in-out/cubic-bezier
|
|
241
|
+
- 支持 prefers-reduced-motion 静态回退
|
|
242
|
+
|
|
243
|
+
示例:
|
|
244
|
+
--transition-fast: 150ms ease;
|
|
245
|
+
--transition-base: 200ms ease;
|
|
246
|
+
--easing-smooth: cubic-bezier(0.4, 0, 0.2, 1);
|
|
247
|
+
|
|
248
|
+
3.7 输出Design Tokens:
|
|
249
|
+
将上述系统整理为CSS :root 变量
|
|
250
|
+
准备稍后嵌入HTML <style> 标签
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
**验证点**:
|
|
254
|
+
- [x] 色彩系统包含至少8个色值(主/辅/中性/状态)
|
|
255
|
+
- [x] 字体系统支持中英文混排
|
|
256
|
+
- [x] 间距系统基于统一基准(4px或8px)
|
|
257
|
+
- [x] 定义了响应式断点(至少3个)
|
|
258
|
+
- [x] 动效支持无障碍(prefers-reduced-motion)
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
### Phase 4: Information Architecture (信息架构设计)
|
|
263
|
+
|
|
264
|
+
**目标**: 根据PRD用户故事,规划页面结构和导航体系
|
|
265
|
+
|
|
266
|
+
**输入**: Phase 1的产品分析报告
|
|
267
|
+
**输出**: 站点地图 + 导航结构
|
|
268
|
+
|
|
269
|
+
**执行步骤**:
|
|
270
|
+
```markdown
|
|
271
|
+
4.1 站点地图 (Sitemap):
|
|
272
|
+
根据PRD用户故事列出所有页面:
|
|
273
|
+
|
|
274
|
+
示例:
|
|
275
|
+
/ (首页/仪表盘)
|
|
276
|
+
/auth/login (登录)
|
|
277
|
+
/auth/register (注册)
|
|
278
|
+
/orders (订单列表)
|
|
279
|
+
/orders/:id (订单详情)
|
|
280
|
+
/orders/create (创建订单)
|
|
281
|
+
/profile (用户资料)
|
|
282
|
+
/settings (设置)
|
|
283
|
+
|
|
284
|
+
4.2 导航结构:
|
|
285
|
+
- 主导航 (Primary Nav): 顶部导航栏,3-7个主菜单
|
|
286
|
+
- 次级导航 (Secondary Nav): 侧边栏或标签页
|
|
287
|
+
- 面包屑 (Breadcrumb): 用于深层页面
|
|
288
|
+
|
|
289
|
+
示例:
|
|
290
|
+
主导航:
|
|
291
|
+
- 首页
|
|
292
|
+
- 订单管理
|
|
293
|
+
- 数据报表
|
|
294
|
+
- 系统设置
|
|
295
|
+
|
|
296
|
+
4.3 用户流程图:
|
|
297
|
+
为每个核心用户故事绘制流程:
|
|
298
|
+
|
|
299
|
+
示例:
|
|
300
|
+
创建订单流程:
|
|
301
|
+
订单列表页 → 点击"新建" → 填写表单 → 预览确认 → 提交成功 → 跳转详情
|
|
302
|
+
|
|
303
|
+
4.4 页面优先级:
|
|
304
|
+
- P0: 必须实现的核心页面(登录/主界面/核心功能)
|
|
305
|
+
- P1: 重要但非关键的页面
|
|
306
|
+
- P2: 辅助功能页面
|
|
307
|
+
|
|
308
|
+
4.5 输出站点地图文档:
|
|
309
|
+
存储为变量,稍后嵌入HTML注释
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
**验证点**:
|
|
313
|
+
- [x] 站点地图覆盖所有PRD用户故事
|
|
314
|
+
- [x] 主导航菜单数量合理(3-7个)
|
|
315
|
+
- [x] 至少1个核心用户流程被完整定义
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
### Phase 5: Component Inventory (组件清单生成)
|
|
320
|
+
|
|
321
|
+
**目标**: 根据页面需求,列出所有需要的UI组件及其状态
|
|
322
|
+
|
|
323
|
+
**输入**: Phase 4的站点地图
|
|
324
|
+
**输出**: 组件清单 + 状态定义
|
|
325
|
+
|
|
326
|
+
**执行步骤**:
|
|
327
|
+
```markdown
|
|
328
|
+
5.1 基础组件 (Atoms):
|
|
329
|
+
- Button (按钮): 主按钮/次要按钮/文本按钮/图标按钮
|
|
330
|
+
- Input (输入框): 文本/数字/密码/搜索/多行文本
|
|
331
|
+
- Checkbox (复选框)
|
|
332
|
+
- Radio (单选框)
|
|
333
|
+
- Select (下拉选择)
|
|
334
|
+
- Switch (开关)
|
|
335
|
+
- Icon (图标): 使用Lucide或Heroicons
|
|
336
|
+
|
|
337
|
+
5.2 组合组件 (Molecules):
|
|
338
|
+
- Form Field (表单字段): Label + Input + Error Message
|
|
339
|
+
- Search Bar (搜索栏): Input + Icon + Button
|
|
340
|
+
- Card (卡片): Header + Body + Footer
|
|
341
|
+
- List Item (列表项): Avatar + Title + Subtitle + Action
|
|
342
|
+
- Pagination (分页器)
|
|
343
|
+
- Breadcrumb (面包屑)
|
|
344
|
+
|
|
345
|
+
5.3 复杂组件 (Organisms):
|
|
346
|
+
- Navigation Bar (导航栏): Logo + Menu + User Avatar
|
|
347
|
+
- Sidebar (侧边栏): Menu + Collapse
|
|
348
|
+
- Table (表格): Header + Rows + Pagination + Actions
|
|
349
|
+
- Modal (模态框): Overlay + Content + Close
|
|
350
|
+
- Toast (通知提示)
|
|
351
|
+
- Dropdown Menu (下拉菜单)
|
|
352
|
+
|
|
353
|
+
5.4 状态定义 (States):
|
|
354
|
+
为每个交互组件定义状态:
|
|
355
|
+
- Default (默认)
|
|
356
|
+
- Hover (悬停)
|
|
357
|
+
- Active (激活)
|
|
358
|
+
- Focus (聚焦)
|
|
359
|
+
- Disabled (禁用)
|
|
360
|
+
- Error (错误)
|
|
361
|
+
- Loading (加载中)
|
|
362
|
+
- Empty (空状态)
|
|
363
|
+
|
|
364
|
+
5.5 输出组件清单:
|
|
365
|
+
组织为表格形式,包含:
|
|
366
|
+
组件名称 | 类型 | 状态列表 | 使用页面
|
|
367
|
+
|
|
368
|
+
示例:
|
|
369
|
+
| Button | Atom | default, hover, active, disabled | 所有页面 |
|
|
370
|
+
| Modal | Organism | default, open, closing | 订单创建,设置 |
|
|
371
|
+
|
|
372
|
+
5.6 确定图标库:
|
|
373
|
+
选择 Lucide Icons 或 Heroicons 或 Tabler Icons
|
|
374
|
+
记录CDN链接,稍后嵌入HTML
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
**验证点**:
|
|
378
|
+
- [x] 至少定义了10个基础组件
|
|
379
|
+
- [x] 所有交互组件都定义了至少3种状态
|
|
380
|
+
- [x] 选定了图标库并记录了CDN链接
|
|
381
|
+
- [x] 组件清单与PRD用户故事对齐
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
### Phase 6: HTML Structure (HTML结构编写)
|
|
386
|
+
|
|
387
|
+
**目标**: 编写语义化的HTML5结构,包含所有页面内容
|
|
388
|
+
|
|
389
|
+
**输入**: Phase 4的站点地图 + Phase 5的组件清单
|
|
390
|
+
**输出**: 完整的HTML结构(无样式)
|
|
391
|
+
|
|
392
|
+
**执行步骤**:
|
|
393
|
+
```markdown
|
|
394
|
+
6.1 HTML文档结构:
|
|
395
|
+
<!DOCTYPE html>
|
|
396
|
+
<html lang="zh-CN">
|
|
397
|
+
<head>
|
|
398
|
+
<meta charset="UTF-8">
|
|
399
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
400
|
+
<meta name="color-scheme" content="light dark">
|
|
401
|
+
<title>{需求标题} - 原型</title>
|
|
402
|
+
|
|
403
|
+
<!-- 设计系统元数据 (来自Phase 1/2/3) -->
|
|
404
|
+
<!--
|
|
405
|
+
Generated: {ISO 8601 timestamp}
|
|
406
|
+
REQ-ID: {REQ_ID}
|
|
407
|
+
Design Inspirations: {Phase 2输出}
|
|
408
|
+
Product Analysis: {Phase 1输出}
|
|
409
|
+
-->
|
|
410
|
+
|
|
411
|
+
<!-- CDN资源: Google Fonts + 图标库 -->
|
|
412
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
413
|
+
<script src="https://unpkg.com/lucide@latest"></script>
|
|
414
|
+
|
|
415
|
+
<style>
|
|
416
|
+
/* Phase 7 将在这里填充CSS */
|
|
417
|
+
</style>
|
|
418
|
+
</head>
|
|
419
|
+
<body>
|
|
420
|
+
<!-- Phase 6 将在这里填充HTML -->
|
|
421
|
+
</body>
|
|
422
|
+
</html>
|
|
423
|
+
|
|
424
|
+
6.2 语义化标签:
|
|
425
|
+
使用HTML5语义标签:
|
|
426
|
+
- <header> - 页面头部/导航
|
|
427
|
+
- <nav> - 导航菜单
|
|
428
|
+
- <main> - 主要内容区
|
|
429
|
+
- <section> - 内容分段
|
|
430
|
+
- <article> - 独立内容单元
|
|
431
|
+
- <aside> - 侧边栏/辅助信息
|
|
432
|
+
- <footer> - 页面底部
|
|
433
|
+
|
|
434
|
+
6.3 可访问性 (Accessibility):
|
|
435
|
+
- ARIA标签: aria-label, aria-labelledby, aria-describedby
|
|
436
|
+
- 键盘导航: tabindex属性
|
|
437
|
+
- 语义化按钮: <button> 而非 <div onclick>
|
|
438
|
+
- 表单标签: <label for="input-id">
|
|
439
|
+
|
|
440
|
+
6.4 多页面处理策略:
|
|
441
|
+
选项A: 单页应用(SPA)风格
|
|
442
|
+
- 所有页面作为<section>嵌入同一HTML
|
|
443
|
+
- 使用CSS显示/隐藏切换页面 (.page-active)
|
|
444
|
+
- JavaScript路由模拟
|
|
445
|
+
|
|
446
|
+
选项B: 选择1个核心页面深度实现
|
|
447
|
+
- 如果页面过多(>5个),选择最重要的1个页面
|
|
448
|
+
- 其他页面用简化卡片展示
|
|
449
|
+
|
|
450
|
+
推荐: 选项A (SPA风格)
|
|
451
|
+
|
|
452
|
+
6.5 页面结构示例:
|
|
453
|
+
<body>
|
|
454
|
+
<!-- Global Header -->
|
|
455
|
+
<header class="header">
|
|
456
|
+
<nav class="nav-primary">
|
|
457
|
+
<div class="nav-logo">{Logo}</div>
|
|
458
|
+
<ul class="nav-menu">
|
|
459
|
+
<li><a href="#home">首页</a></li>
|
|
460
|
+
<li><a href="#orders">订单</a></li>
|
|
461
|
+
</ul>
|
|
462
|
+
<div class="nav-user">{User Avatar}</div>
|
|
463
|
+
</nav>
|
|
464
|
+
</header>
|
|
465
|
+
|
|
466
|
+
<!-- Main Content Area -->
|
|
467
|
+
<main class="main">
|
|
468
|
+
<!-- Page 1: Dashboard -->
|
|
469
|
+
<section id="page-dashboard" class="page page-active">
|
|
470
|
+
<h1>仪表盘</h1>
|
|
471
|
+
<!-- Dashboard content -->
|
|
472
|
+
</section>
|
|
473
|
+
|
|
474
|
+
<!-- Page 2: Orders List -->
|
|
475
|
+
<section id="page-orders" class="page">
|
|
476
|
+
<h1>订单列表</h1>
|
|
477
|
+
<div class="table-container">
|
|
478
|
+
<table><!-- Table rows --></table>
|
|
479
|
+
</div>
|
|
480
|
+
</section>
|
|
481
|
+
|
|
482
|
+
<!-- More pages... -->
|
|
483
|
+
</main>
|
|
484
|
+
|
|
485
|
+
<!-- Global Footer -->
|
|
486
|
+
<footer class="footer">
|
|
487
|
+
<p>© 2025 {Project Name}</p>
|
|
488
|
+
</footer>
|
|
489
|
+
|
|
490
|
+
<script>
|
|
491
|
+
/* Phase 8 将在这里填充JavaScript */
|
|
492
|
+
</script>
|
|
493
|
+
</body>
|
|
494
|
+
|
|
495
|
+
6.6 内容填充:
|
|
496
|
+
- 使用真实的业务场景内容(来自PRD)
|
|
497
|
+
- 图片使用Picsum: https://picsum.photos/id/{id}/{width}/{height}
|
|
498
|
+
- 数据使用模拟真实数据(如订单编号/用户名/日期)
|
|
499
|
+
- 禁止使用Lorem Ipsum占位文本
|
|
500
|
+
|
|
501
|
+
6.7 组件实例化:
|
|
502
|
+
根据Phase 5的组件清单,在HTML中实例化所有组件
|
|
503
|
+
确保每个状态都有对应的HTML示例(可用CSS类名切换)
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
**验证点**:
|
|
507
|
+
- [x] 使用HTML5语义化标签
|
|
508
|
+
- [x] 包含ARIA标签和可访问性属性
|
|
509
|
+
- [x] 所有图片使用Picsum真实资源
|
|
510
|
+
- [x] 无Lorem Ipsum占位文本
|
|
511
|
+
- [x] 至少2个完整页面被实现
|
|
512
|
+
|
|
513
|
+
---
|
|
514
|
+
|
|
515
|
+
### Phase 7: CSS Styling (CSS样式实现)
|
|
516
|
+
|
|
517
|
+
**目标**: 基于Phase 3的设计系统,编写完整的CSS样式
|
|
518
|
+
|
|
519
|
+
**输入**: Phase 6的HTML结构 + Phase 3的Design Tokens
|
|
520
|
+
**输出**: 完整的CSS样式(嵌入<style>标签)
|
|
521
|
+
|
|
522
|
+
**执行步骤**:
|
|
523
|
+
```markdown
|
|
524
|
+
7.1 CSS架构:
|
|
525
|
+
组织为以下模块:
|
|
526
|
+
1. Design System (CSS变量)
|
|
527
|
+
2. Reset & Base Styles
|
|
528
|
+
3. Layout (Grid/Flexbox)
|
|
529
|
+
4. Components (按Phase 5组件清单)
|
|
530
|
+
5. Pages (页面特定样式)
|
|
531
|
+
6. Utilities (工具类)
|
|
532
|
+
7. Responsive (媒体查询)
|
|
533
|
+
8. Animations (动效)
|
|
534
|
+
9. Dark Mode (可选)
|
|
535
|
+
|
|
536
|
+
7.2 Design System (CSS Variables):
|
|
537
|
+
将Phase 3的Design Tokens写入:root
|
|
538
|
+
|
|
539
|
+
:root {
|
|
540
|
+
/* Colors */
|
|
541
|
+
--primary-500: #0066CC;
|
|
542
|
+
--neutral-50: #F9FAFB;
|
|
543
|
+
|
|
544
|
+
/* Typography */
|
|
545
|
+
--font-base: 'Inter', system-ui, sans-serif;
|
|
546
|
+
--font-size-base: 16px;
|
|
547
|
+
|
|
548
|
+
/* Spacing */
|
|
549
|
+
--space-2: 0.5rem;
|
|
550
|
+
--space-4: 1rem;
|
|
551
|
+
|
|
552
|
+
/* Transitions */
|
|
553
|
+
--transition-fast: 200ms ease;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
7.3 Reset & Base Styles:
|
|
557
|
+
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
558
|
+
body {
|
|
559
|
+
font-family: var(--font-base);
|
|
560
|
+
font-size: var(--font-size-base);
|
|
561
|
+
line-height: 1.5;
|
|
562
|
+
color: var(--neutral-900);
|
|
563
|
+
background: var(--neutral-50);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
7.4 Layout System:
|
|
567
|
+
使用Flexbox或Grid实现响应式布局
|
|
568
|
+
|
|
569
|
+
.container {
|
|
570
|
+
max-width: 1200px;
|
|
571
|
+
margin: 0 auto;
|
|
572
|
+
padding: 0 var(--space-4);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
.grid {
|
|
576
|
+
display: grid;
|
|
577
|
+
grid-template-columns: repeat(12, 1fr);
|
|
578
|
+
gap: var(--space-4);
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
7.5 Component Styles:
|
|
582
|
+
为Phase 5的每个组件编写样式,包含所有状态
|
|
583
|
+
|
|
584
|
+
示例:
|
|
585
|
+
.btn {
|
|
586
|
+
display: inline-flex;
|
|
587
|
+
padding: var(--space-2) var(--space-4);
|
|
588
|
+
border: none;
|
|
589
|
+
border-radius: var(--radius-md);
|
|
590
|
+
background: var(--primary-500);
|
|
591
|
+
color: white;
|
|
592
|
+
cursor: pointer;
|
|
593
|
+
transition: all var(--transition-fast);
|
|
594
|
+
}
|
|
595
|
+
.btn:hover {
|
|
596
|
+
background: var(--primary-600);
|
|
597
|
+
transform: translateY(-2px);
|
|
598
|
+
}
|
|
599
|
+
.btn:active {
|
|
600
|
+
transform: translateY(0);
|
|
601
|
+
}
|
|
602
|
+
.btn:disabled {
|
|
603
|
+
opacity: 0.5;
|
|
604
|
+
cursor: not-allowed;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
7.6 Page-Specific Styles:
|
|
608
|
+
为每个页面编写特定样式
|
|
609
|
+
|
|
610
|
+
.page {
|
|
611
|
+
display: none; /* 默认隐藏 */
|
|
612
|
+
}
|
|
613
|
+
.page-active {
|
|
614
|
+
display: block; /* 激活页面显示 */
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
7.7 Responsive Design:
|
|
618
|
+
使用媒体查询实现三断点响应式
|
|
619
|
+
|
|
620
|
+
/* Mobile: 320px-767px (默认) */
|
|
621
|
+
.nav-menu {
|
|
622
|
+
flex-direction: column;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
/* Tablet: 768px-1023px */
|
|
626
|
+
@media (min-width: 768px) {
|
|
627
|
+
.nav-menu {
|
|
628
|
+
flex-direction: row;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
/* Desktop: 1024px+ */
|
|
633
|
+
@media (min-width: 1024px) {
|
|
634
|
+
.container {
|
|
635
|
+
max-width: 1200px;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
7.8 Animations:
|
|
640
|
+
基于Phase 2的设计灵感添加动效
|
|
641
|
+
|
|
642
|
+
@keyframes fadeIn {
|
|
643
|
+
from { opacity: 0; transform: translateY(20px); }
|
|
644
|
+
to { opacity: 1; transform: translateY(0); }
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
.card {
|
|
648
|
+
animation: fadeIn var(--transition-base);
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/* 无障碍: 禁用动效 */
|
|
652
|
+
@media (prefers-reduced-motion: reduce) {
|
|
653
|
+
* {
|
|
654
|
+
animation: none !important;
|
|
655
|
+
transition: none !important;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
7.9 Dark Mode (可选):
|
|
660
|
+
@media (prefers-color-scheme: dark) {
|
|
661
|
+
:root {
|
|
662
|
+
--neutral-50: #111827;
|
|
663
|
+
--neutral-900: #F9FAFB;
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
7.10 Utilities:
|
|
668
|
+
.text-center { text-align: center; }
|
|
669
|
+
.mt-4 { margin-top: var(--space-4); }
|
|
670
|
+
.hidden { display: none; }
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
**验证点**:
|
|
674
|
+
- [x] 使用CSS变量实现Design System
|
|
675
|
+
- [x] 所有组件都有完整的状态样式
|
|
676
|
+
- [x] 响应式布局在三种断点正常显示
|
|
677
|
+
- [x] 动效时长在150-300ms之间
|
|
678
|
+
- [x] 支持prefers-reduced-motion
|
|
679
|
+
|
|
680
|
+
---
|
|
681
|
+
|
|
682
|
+
### Phase 8: JavaScript Interactions (JavaScript交互实现)
|
|
683
|
+
|
|
684
|
+
**目标**: 实现所有交互逻辑和状态管理
|
|
685
|
+
|
|
686
|
+
**输入**: Phase 6的HTML结构 + Phase 7的CSS样式
|
|
687
|
+
**输出**: 完整的JavaScript代码(嵌入<script>标签)
|
|
688
|
+
|
|
689
|
+
**执行步骤**:
|
|
690
|
+
```markdown
|
|
691
|
+
8.1 基础初始化:
|
|
692
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
693
|
+
// 初始化图标库
|
|
694
|
+
lucide.createIcons();
|
|
695
|
+
|
|
696
|
+
// 初始化路由
|
|
697
|
+
initRouter();
|
|
698
|
+
|
|
699
|
+
// 初始化事件监听
|
|
700
|
+
initEventListeners();
|
|
701
|
+
});
|
|
702
|
+
|
|
703
|
+
8.2 SPA路由系统:
|
|
704
|
+
const routes = {
|
|
705
|
+
'home': 'page-dashboard',
|
|
706
|
+
'orders': 'page-orders',
|
|
707
|
+
'settings': 'page-settings'
|
|
708
|
+
};
|
|
709
|
+
|
|
710
|
+
function navigateTo(routeName) {
|
|
711
|
+
// 隐藏所有页面
|
|
712
|
+
document.querySelectorAll('.page').forEach(page => {
|
|
713
|
+
page.classList.remove('page-active');
|
|
714
|
+
});
|
|
715
|
+
|
|
716
|
+
// 显示目标页面
|
|
717
|
+
const targetPageId = routes[routeName];
|
|
718
|
+
document.getElementById(targetPageId).classList.add('page-active');
|
|
719
|
+
|
|
720
|
+
// 更新URL (使用hash)
|
|
721
|
+
window.location.hash = routeName;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
function initRouter() {
|
|
725
|
+
// 监听hash变化
|
|
726
|
+
window.addEventListener('hashchange', () => {
|
|
727
|
+
const route = window.location.hash.slice(1) || 'home';
|
|
728
|
+
navigateTo(route);
|
|
729
|
+
});
|
|
730
|
+
|
|
731
|
+
// 初始化路由
|
|
732
|
+
const initialRoute = window.location.hash.slice(1) || 'home';
|
|
733
|
+
navigateTo(initialRoute);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
8.3 导航交互:
|
|
737
|
+
document.querySelectorAll('.nav-menu a').forEach(link => {
|
|
738
|
+
link.addEventListener('click', (e) => {
|
|
739
|
+
e.preventDefault();
|
|
740
|
+
const route = link.getAttribute('href').slice(1);
|
|
741
|
+
navigateTo(route);
|
|
742
|
+
|
|
743
|
+
// 更新活动状态
|
|
744
|
+
document.querySelectorAll('.nav-menu a').forEach(a => {
|
|
745
|
+
a.classList.remove('active');
|
|
746
|
+
});
|
|
747
|
+
link.classList.add('active');
|
|
748
|
+
});
|
|
749
|
+
});
|
|
750
|
+
|
|
751
|
+
8.4 表单验证:
|
|
752
|
+
document.querySelectorAll('form').forEach(form => {
|
|
753
|
+
form.addEventListener('submit', (e) => {
|
|
754
|
+
e.preventDefault();
|
|
755
|
+
|
|
756
|
+
// 简单验证示例
|
|
757
|
+
const inputs = form.querySelectorAll('input[required]');
|
|
758
|
+
let isValid = true;
|
|
759
|
+
|
|
760
|
+
inputs.forEach(input => {
|
|
761
|
+
if (!input.value.trim()) {
|
|
762
|
+
input.classList.add('error');
|
|
763
|
+
isValid = false;
|
|
764
|
+
} else {
|
|
765
|
+
input.classList.remove('error');
|
|
766
|
+
}
|
|
767
|
+
});
|
|
768
|
+
|
|
769
|
+
if (isValid) {
|
|
770
|
+
showToast('提交成功!', 'success');
|
|
771
|
+
form.reset();
|
|
772
|
+
} else {
|
|
773
|
+
showToast('请填写所有必填字段', 'error');
|
|
774
|
+
}
|
|
775
|
+
});
|
|
776
|
+
});
|
|
777
|
+
|
|
778
|
+
8.5 模态框 (Modal):
|
|
779
|
+
function openModal(modalId) {
|
|
780
|
+
const modal = document.getElementById(modalId);
|
|
781
|
+
modal.classList.add('modal-open');
|
|
782
|
+
document.body.style.overflow = 'hidden';
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
function closeModal(modalId) {
|
|
786
|
+
const modal = document.getElementById(modalId);
|
|
787
|
+
modal.classList.remove('modal-open');
|
|
788
|
+
document.body.style.overflow = '';
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
// 点击遮罩关闭
|
|
792
|
+
document.querySelectorAll('.modal-overlay').forEach(overlay => {
|
|
793
|
+
overlay.addEventListener('click', (e) => {
|
|
794
|
+
if (e.target === overlay) {
|
|
795
|
+
closeModal(overlay.closest('.modal').id);
|
|
796
|
+
}
|
|
797
|
+
});
|
|
798
|
+
});
|
|
799
|
+
|
|
800
|
+
8.6 Toast 通知:
|
|
801
|
+
function showToast(message, type = 'info') {
|
|
802
|
+
const toast = document.createElement('div');
|
|
803
|
+
toast.className = `toast toast-${type}`;
|
|
804
|
+
toast.textContent = message;
|
|
805
|
+
document.body.appendChild(toast);
|
|
806
|
+
|
|
807
|
+
// 动画显示
|
|
808
|
+
setTimeout(() => toast.classList.add('toast-show'), 10);
|
|
809
|
+
|
|
810
|
+
// 3秒后移除
|
|
811
|
+
setTimeout(() => {
|
|
812
|
+
toast.classList.remove('toast-show');
|
|
813
|
+
setTimeout(() => toast.remove(), 300);
|
|
814
|
+
}, 3000);
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
8.7 表格排序 (Table Sorting):
|
|
818
|
+
document.querySelectorAll('.table-sortable th').forEach(th => {
|
|
819
|
+
th.addEventListener('click', () => {
|
|
820
|
+
const table = th.closest('table');
|
|
821
|
+
const columnIndex = Array.from(th.parentNode.children).indexOf(th);
|
|
822
|
+
const rows = Array.from(table.querySelectorAll('tbody tr'));
|
|
823
|
+
|
|
824
|
+
rows.sort((a, b) => {
|
|
825
|
+
const aText = a.children[columnIndex].textContent;
|
|
826
|
+
const bText = b.children[columnIndex].textContent;
|
|
827
|
+
return aText.localeCompare(bText);
|
|
828
|
+
});
|
|
829
|
+
|
|
830
|
+
// 重新插入排序后的行
|
|
831
|
+
rows.forEach(row => table.querySelector('tbody').appendChild(row));
|
|
832
|
+
});
|
|
833
|
+
});
|
|
834
|
+
|
|
835
|
+
8.8 模拟数据加载:
|
|
836
|
+
function simulateDataLoad(callback, delay = 1000) {
|
|
837
|
+
// 显示加载状态
|
|
838
|
+
const loader = document.createElement('div');
|
|
839
|
+
loader.className = 'loader';
|
|
840
|
+
loader.textContent = '加载中...';
|
|
841
|
+
document.querySelector('.main').appendChild(loader);
|
|
842
|
+
|
|
843
|
+
// 模拟异步加载
|
|
844
|
+
setTimeout(() => {
|
|
845
|
+
loader.remove();
|
|
846
|
+
callback();
|
|
847
|
+
}, delay);
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
8.9 搜索功能:
|
|
851
|
+
const searchInput = document.querySelector('.search-input');
|
|
852
|
+
if (searchInput) {
|
|
853
|
+
searchInput.addEventListener('input', (e) => {
|
|
854
|
+
const query = e.target.value.toLowerCase();
|
|
855
|
+
const items = document.querySelectorAll('.searchable-item');
|
|
856
|
+
|
|
857
|
+
items.forEach(item => {
|
|
858
|
+
const text = item.textContent.toLowerCase();
|
|
859
|
+
item.style.display = text.includes(query) ? '' : 'none';
|
|
860
|
+
});
|
|
861
|
+
});
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
8.10 防抖/节流 (Debounce/Throttle):
|
|
865
|
+
function debounce(func, wait) {
|
|
866
|
+
let timeout;
|
|
867
|
+
return function(...args) {
|
|
868
|
+
clearTimeout(timeout);
|
|
869
|
+
timeout = setTimeout(() => func.apply(this, args), wait);
|
|
870
|
+
};
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
// 应用于搜索
|
|
874
|
+
searchInput.addEventListener('input', debounce((e) => {
|
|
875
|
+
console.log('搜索:', e.target.value);
|
|
876
|
+
}, 300));
|
|
877
|
+
```
|
|
878
|
+
|
|
879
|
+
**验证点**:
|
|
880
|
+
- [x] SPA路由系统正常工作
|
|
881
|
+
- [x] 所有按钮/链接有点击交互
|
|
882
|
+
- [x] 表单有验证逻辑
|
|
883
|
+
- [x] 模态框可打开/关闭
|
|
884
|
+
- [x] Toast通知可显示
|
|
885
|
+
- [x] 至少1个复杂交互(排序/搜索/过滤)
|
|
886
|
+
|
|
887
|
+
---
|
|
888
|
+
|
|
889
|
+
### Phase 9: Responsive Adaptation (响应式适配)
|
|
890
|
+
|
|
891
|
+
**目标**: 确保所有页面和组件在三种断点下正常显示和交互
|
|
892
|
+
|
|
893
|
+
**输入**: Phase 6/7/8的完整HTML/CSS/JS
|
|
894
|
+
**输出**: 响应式测试报告(嵌入HTML注释)
|
|
895
|
+
|
|
896
|
+
**执行步骤**:
|
|
897
|
+
```markdown
|
|
898
|
+
9.1 三断点测试:
|
|
899
|
+
- Mobile (320px-767px): 竖屏手机
|
|
900
|
+
- Tablet (768px-1023px): 平板/横屏手机
|
|
901
|
+
- Desktop (1024px+): 桌面/笔记本
|
|
902
|
+
|
|
903
|
+
9.2 Mobile优化:
|
|
904
|
+
- 导航: 汉堡菜单或底部Tab导航
|
|
905
|
+
- 表格: 卡片化展示或横向滚动
|
|
906
|
+
- 表单: 全宽输入框
|
|
907
|
+
- 图片: 响应式图片(srcset或object-fit)
|
|
908
|
+
- 字体: 稍小的基准字号(14px)
|
|
909
|
+
|
|
910
|
+
9.3 Tablet优化:
|
|
911
|
+
- 导航: 折叠式侧边栏或顶部导航
|
|
912
|
+
- 表格: 简化列数或固定关键列
|
|
913
|
+
- 布局: 2列网格
|
|
914
|
+
|
|
915
|
+
9.4 Desktop优化:
|
|
916
|
+
- 导航: 完整顶部导航+侧边栏
|
|
917
|
+
- 表格: 完整列数+排序/过滤
|
|
918
|
+
- 布局: 3-4列网格
|
|
919
|
+
|
|
920
|
+
9.5 Touch Targets:
|
|
921
|
+
确保所有可点击元素在移动端至少44x44px
|
|
922
|
+
|
|
923
|
+
.btn, .nav-link {
|
|
924
|
+
min-height: 44px;
|
|
925
|
+
min-width: 44px;
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
9.6 Viewport Meta:
|
|
929
|
+
已在Phase 6添加:
|
|
930
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
931
|
+
|
|
932
|
+
9.7 测试清单:
|
|
933
|
+
在每个断点测试:
|
|
934
|
+
- [ ] 页面布局正常
|
|
935
|
+
- [ ] 导航可用
|
|
936
|
+
- [ ] 表单可填写
|
|
937
|
+
- [ ] 按钮可点击
|
|
938
|
+
- [ ] 图片正常显示
|
|
939
|
+
- [ ] 文字可读(不截断)
|
|
940
|
+
- [ ] 滚动流畅
|
|
941
|
+
- [ ] 无水平滚动条
|
|
942
|
+
|
|
943
|
+
9.8 输出测试报告:
|
|
944
|
+
将测试结果记录为HTML注释
|
|
945
|
+
<!-- Responsive Test Report
|
|
946
|
+
Mobile (375px): ✅ Layout OK, ✅ Nav OK, ✅ Forms OK
|
|
947
|
+
Tablet (768px): ✅ Layout OK, ✅ Nav OK, ✅ Tables OK
|
|
948
|
+
Desktop (1280px): ✅ Layout OK, ✅ Nav OK, ✅ All features OK
|
|
949
|
+
-->
|
|
950
|
+
```
|
|
951
|
+
|
|
952
|
+
**验证点**:
|
|
953
|
+
- [x] 在320px宽度下页面可用
|
|
954
|
+
- [x] 在768px宽度下页面可用
|
|
955
|
+
- [x] 在1280px宽度下页面可用
|
|
956
|
+
- [x] 所有Touch Targets ≥ 44px
|
|
957
|
+
- [x] 无水平滚动条
|
|
958
|
+
|
|
959
|
+
---
|
|
960
|
+
|
|
961
|
+
### Phase 10: Constitution & Quality Check (宪法与质量检查)
|
|
962
|
+
|
|
963
|
+
**目标**: 验证原型符合所有Constitution条款和质量标准
|
|
964
|
+
|
|
965
|
+
**输入**: 完整的UI_PROTOTYPE.html
|
|
966
|
+
**输出**: Constitution检查报告
|
|
967
|
+
|
|
968
|
+
**执行步骤**:
|
|
969
|
+
```markdown
|
|
970
|
+
10.1 Constitution检查:
|
|
971
|
+
|
|
972
|
+
Article I - Quality First (质量至上):
|
|
973
|
+
- [ ] I.1 Complete Implementation: HTML无占位符,所有页面完整
|
|
974
|
+
- [ ] I.2 No Simplification: 交互逻辑完整,非简化版本
|
|
975
|
+
- [ ] I.4 Quality Gates: 通过HTML验证,无console错误
|
|
976
|
+
|
|
977
|
+
Article III - Security First (安全优先):
|
|
978
|
+
- [ ] III.1 No Hardcoded Secrets: 无API密钥硬编码
|
|
979
|
+
- [ ] III.2 Input Validation: 表单有验证逻辑
|
|
980
|
+
- [ ] III.4 Secure by Default: 使用HTTPS CDN资源
|
|
981
|
+
|
|
982
|
+
Article V - Maintainability (可维护性):
|
|
983
|
+
- [ ] V.3 Documentation: HTML注释包含设计文档
|
|
984
|
+
- [ ] V.4 File Size Limits: 单文件HTML ≤ 2000行(可接受)
|
|
985
|
+
|
|
986
|
+
Article X - Requirement Boundary (需求边界):
|
|
987
|
+
- [ ] X.1 No Speculation: 仅实现PRD明确的功能
|
|
988
|
+
- [ ] X.2 No Speculative Features: 无"未来可能需要"的功能
|
|
989
|
+
|
|
990
|
+
10.2 质量检查清单:
|
|
991
|
+
|
|
992
|
+
HTML质量:
|
|
993
|
+
- [ ] 使用HTML5语义化标签
|
|
994
|
+
- [ ] 无未闭合标签
|
|
995
|
+
- [ ] ARIA标签完整
|
|
996
|
+
- [ ] 无重复ID
|
|
997
|
+
|
|
998
|
+
CSS质量:
|
|
999
|
+
- [ ] 使用CSS变量(Design System)
|
|
1000
|
+
- [ ] 响应式媒体查询正常
|
|
1001
|
+
- [ ] 无!important滥用
|
|
1002
|
+
- [ ] 命名规范(BEM或一致的命名)
|
|
1003
|
+
|
|
1004
|
+
JavaScript质量:
|
|
1005
|
+
- [ ] 无全局变量污染
|
|
1006
|
+
- [ ] 事件监听器正确绑定
|
|
1007
|
+
- [ ] 无内存泄漏(事件监听器移除)
|
|
1008
|
+
- [ ] Console无错误
|
|
1009
|
+
|
|
1010
|
+
可访问性:
|
|
1011
|
+
- [ ] 色彩对比度 ≥ 4.5:1
|
|
1012
|
+
- [ ] 键盘导航可用
|
|
1013
|
+
- [ ] 屏幕阅读器友好
|
|
1014
|
+
- [ ] focus状态可见
|
|
1015
|
+
|
|
1016
|
+
性能:
|
|
1017
|
+
- [ ] CDN资源加载<1s
|
|
1018
|
+
- [ ] 首屏渲染<2s
|
|
1019
|
+
- [ ] 交互响应<100ms
|
|
1020
|
+
- [ ] 无不必要的重绘/回流
|
|
1021
|
+
|
|
1022
|
+
10.3 PRD对齐检查:
|
|
1023
|
+
遍历PRD中的每个用户故事:
|
|
1024
|
+
- [ ] 用户故事1: {标题} → UI页面/组件: {对应实现}
|
|
1025
|
+
- [ ] 用户故事2: {标题} → UI页面/组件: {对应实现}
|
|
1026
|
+
...
|
|
1027
|
+
|
|
1028
|
+
确保所有用户故事都有对应的UI实现
|
|
1029
|
+
|
|
1030
|
+
10.4 设计灵感验证:
|
|
1031
|
+
- [ ] 采样了2位大师
|
|
1032
|
+
- [ ] 转译说明清晰可执行
|
|
1033
|
+
- [ ] 实际样式符合转译说明
|
|
1034
|
+
- [ ] 禁止模仿的元素未出现
|
|
1035
|
+
|
|
1036
|
+
10.5 Anti-Generic-Design验证:
|
|
1037
|
+
- [ ] 无占位图片(Picsum图片正常加载)
|
|
1038
|
+
- [ ] 无常见AI紫/蓝配色
|
|
1039
|
+
- [ ] 无Emoji图标(使用SVG/图标库)
|
|
1040
|
+
- [ ] 无Lorem Ipsum文本
|
|
1041
|
+
|
|
1042
|
+
10.6 运行Constitution验证脚本:
|
|
1043
|
+
bash .claude/scripts/validate-constitution.sh --type ui --severity warning
|
|
1044
|
+
|
|
1045
|
+
解析输出:
|
|
1046
|
+
- 如果有ERROR级别违规 → 必须修复
|
|
1047
|
+
- 如果有WARNING级别违规 → 记录到报告
|
|
1048
|
+
|
|
1049
|
+
10.7 输出Constitution检查报告:
|
|
1050
|
+
嵌入HTML注释:
|
|
1051
|
+
<!-- Constitution Check Report
|
|
1052
|
+
Generated: {timestamp}
|
|
1053
|
+
Status: PASS / WARN / FAIL
|
|
1054
|
+
|
|
1055
|
+
Article I - Quality First: ✅ PASS
|
|
1056
|
+
Article III - Security First: ✅ PASS
|
|
1057
|
+
Article V - Maintainability: ⚠️ WARN (文件略大,但可接受)
|
|
1058
|
+
Article X - Requirement Boundary: ✅ PASS
|
|
1059
|
+
|
|
1060
|
+
Quality Checklist:
|
|
1061
|
+
- HTML: ✅ 18/18 checks passed
|
|
1062
|
+
- CSS: ✅ 12/12 checks passed
|
|
1063
|
+
- JavaScript: ✅ 8/8 checks passed
|
|
1064
|
+
- Accessibility: ⚠️ 7/8 checks passed (1 minor issue)
|
|
1065
|
+
- Performance: ✅ 4/4 checks passed
|
|
1066
|
+
|
|
1067
|
+
PRD Alignment:
|
|
1068
|
+
- User Story 1: ✅ Implemented in page-orders
|
|
1069
|
+
- User Story 2: ✅ Implemented in modal-create-order
|
|
1070
|
+
- User Story 3: ✅ Implemented in page-settings
|
|
1071
|
+
|
|
1072
|
+
Design Inspirations:
|
|
1073
|
+
- Inspiration 1: ✅ Applied (grid system from Müller-Brockmann)
|
|
1074
|
+
- Inspiration 2: ✅ Applied (color palette from Kusama)
|
|
1075
|
+
|
|
1076
|
+
Anti-Generic-Design:
|
|
1077
|
+
- ✅ Real images (Picsum)
|
|
1078
|
+
- ✅ Unique color palette (避免AI紫)
|
|
1079
|
+
- ✅ SVG icons (Lucide)
|
|
1080
|
+
- ✅ Real content (no Lorem Ipsum)
|
|
1081
|
+
|
|
1082
|
+
Overall Status: READY FOR HANDOFF
|
|
1083
|
+
-->
|
|
1084
|
+
|
|
1085
|
+
10.8 最终文件输出:
|
|
1086
|
+
将完整的HTML写入:
|
|
1087
|
+
devflow/requirements/${reqId}/UI_PROTOTYPE.html
|
|
1088
|
+
|
|
1089
|
+
10.9 更新状态:
|
|
1090
|
+
orchestration_status.json:
|
|
1091
|
+
{
|
|
1092
|
+
"phase": "ui_complete",
|
|
1093
|
+
"uiPrototypeGenerated": true,
|
|
1094
|
+
"uiPrototypeFile": "UI_PROTOTYPE.html",
|
|
1095
|
+
"constitutionCheckPassed": true
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
10.10 记录事件:
|
|
1099
|
+
log_event "$REQ_ID" "UI prototype generation completed"
|
|
1100
|
+
```
|
|
1101
|
+
|
|
1102
|
+
**验证点**:
|
|
1103
|
+
- [x] Constitution检查通过(或仅WARNING)
|
|
1104
|
+
- [x] 质量检查清单至少90%通过
|
|
1105
|
+
- [x] 所有PRD用户故事都有对应UI实现
|
|
1106
|
+
- [x] 设计灵感已应用且可验证
|
|
1107
|
+
- [x] Anti-Generic-Design规则全部遵守
|
|
1108
|
+
|
|
1109
|
+
---
|
|
1110
|
+
|
|
1111
|
+
## Output Format (最终输出格式)
|
|
1112
|
+
|
|
1113
|
+
### UI_PROTOTYPE.html Structure:
|
|
1114
|
+
|
|
1115
|
+
```html
|
|
1116
|
+
<!DOCTYPE html>
|
|
1117
|
+
<html lang="zh-CN">
|
|
1118
|
+
<head>
|
|
1119
|
+
<meta charset="UTF-8">
|
|
1120
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
1121
|
+
<meta name="color-scheme" content="light dark">
|
|
1122
|
+
<title>{REQ_ID} - {需求标题} - UI原型</title>
|
|
1123
|
+
|
|
1124
|
+
<!-- === Design System Metadata === -->
|
|
1125
|
+
<!--
|
|
1126
|
+
Generated: {ISO 8601 timestamp}
|
|
1127
|
+
REQ-ID: {REQ_ID}
|
|
1128
|
+
Template Version: 1.0.0
|
|
1129
|
+
|
|
1130
|
+
=== Product Analysis ===
|
|
1131
|
+
{Phase 1 输出}
|
|
1132
|
+
|
|
1133
|
+
=== Design Inspirations ===
|
|
1134
|
+
{Phase 2 输出: 2位大师+转译说明}
|
|
1135
|
+
|
|
1136
|
+
=== Design System ===
|
|
1137
|
+
{Phase 3 输出: 色彩/字体/间距系统}
|
|
1138
|
+
|
|
1139
|
+
=== Information Architecture ===
|
|
1140
|
+
{Phase 4 输出: 站点地图+导航结构}
|
|
1141
|
+
|
|
1142
|
+
=== Component Inventory ===
|
|
1143
|
+
{Phase 5 输出: 组件清单}
|
|
1144
|
+
|
|
1145
|
+
=== Constitution Check Report ===
|
|
1146
|
+
{Phase 10 输出: 完整检查报告}
|
|
1147
|
+
-->
|
|
1148
|
+
|
|
1149
|
+
<!-- CDN Resources -->
|
|
1150
|
+
<link href="https://fonts.googleapis.com/css2?family={选定字体}&display=swap" rel="stylesheet">
|
|
1151
|
+
<script src="https://unpkg.com/lucide@latest"></script>
|
|
1152
|
+
|
|
1153
|
+
<style>
|
|
1154
|
+
/* === Design System (CSS Variables) === */
|
|
1155
|
+
:root {
|
|
1156
|
+
/* Phase 3 的 Design Tokens */
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
/* === Reset & Base Styles === */
|
|
1160
|
+
/* Phase 7.3 */
|
|
1161
|
+
|
|
1162
|
+
/* === Layout System === */
|
|
1163
|
+
/* Phase 7.4 */
|
|
1164
|
+
|
|
1165
|
+
/* === Components === */
|
|
1166
|
+
/* Phase 7.5 - 所有组件样式 */
|
|
1167
|
+
|
|
1168
|
+
/* === Pages === */
|
|
1169
|
+
/* Phase 7.6 - 页面特定样式 */
|
|
1170
|
+
|
|
1171
|
+
/* === Responsive === */
|
|
1172
|
+
/* Phase 7.7 - 媒体查询 */
|
|
1173
|
+
|
|
1174
|
+
/* === Animations === */
|
|
1175
|
+
/* Phase 7.8 - 动效 */
|
|
1176
|
+
|
|
1177
|
+
/* === Utilities === */
|
|
1178
|
+
/* Phase 7.10 - 工具类 */
|
|
1179
|
+
</style>
|
|
1180
|
+
</head>
|
|
1181
|
+
<body>
|
|
1182
|
+
<!-- === Global Header === -->
|
|
1183
|
+
<header class="header">
|
|
1184
|
+
<!-- Phase 6.5 - 导航栏 -->
|
|
1185
|
+
</header>
|
|
1186
|
+
|
|
1187
|
+
<!-- === Main Content === -->
|
|
1188
|
+
<main class="main">
|
|
1189
|
+
<!-- Page 1 -->
|
|
1190
|
+
<section id="page-{name}" class="page page-active">
|
|
1191
|
+
<!-- Phase 6.5 - 页面内容 -->
|
|
1192
|
+
</section>
|
|
1193
|
+
|
|
1194
|
+
<!-- Page 2 -->
|
|
1195
|
+
<section id="page-{name}" class="page">
|
|
1196
|
+
<!-- More pages... -->
|
|
1197
|
+
</section>
|
|
1198
|
+
</main>
|
|
1199
|
+
|
|
1200
|
+
<!-- === Global Footer === -->
|
|
1201
|
+
<footer class="footer">
|
|
1202
|
+
<!-- Phase 6.5 - 页脚 -->
|
|
1203
|
+
</footer>
|
|
1204
|
+
|
|
1205
|
+
<!-- === Modals === -->
|
|
1206
|
+
<div id="modal-{name}" class="modal">
|
|
1207
|
+
<!-- Phase 6.5 - 模态框 -->
|
|
1208
|
+
</div>
|
|
1209
|
+
|
|
1210
|
+
<script>
|
|
1211
|
+
/* === Initialization === */
|
|
1212
|
+
/* Phase 8.1 */
|
|
1213
|
+
|
|
1214
|
+
/* === SPA Router === */
|
|
1215
|
+
/* Phase 8.2 */
|
|
1216
|
+
|
|
1217
|
+
/* === Navigation === */
|
|
1218
|
+
/* Phase 8.3 */
|
|
1219
|
+
|
|
1220
|
+
/* === Forms === */
|
|
1221
|
+
/* Phase 8.4 */
|
|
1222
|
+
|
|
1223
|
+
/* === Modals === */
|
|
1224
|
+
/* Phase 8.5 */
|
|
1225
|
+
|
|
1226
|
+
/* === Toast === */
|
|
1227
|
+
/* Phase 8.6 */
|
|
1228
|
+
|
|
1229
|
+
/* === Table Sorting === */
|
|
1230
|
+
/* Phase 8.7 */
|
|
1231
|
+
|
|
1232
|
+
/* === More Interactions === */
|
|
1233
|
+
/* Phase 8.8-8.10 */
|
|
1234
|
+
</script>
|
|
1235
|
+
|
|
1236
|
+
<!-- === Responsive Test Report === -->
|
|
1237
|
+
<!-- Phase 9.8 输出 -->
|
|
1238
|
+
</body>
|
|
1239
|
+
</html>
|
|
1240
|
+
```
|
|
1241
|
+
|
|
1242
|
+
---
|
|
1243
|
+
|
|
1244
|
+
## Error Handling & Recovery
|
|
1245
|
+
|
|
1246
|
+
### Common Errors:
|
|
1247
|
+
|
|
1248
|
+
**1. PRD中无UI需求**
|
|
1249
|
+
```
|
|
1250
|
+
WARNING: No UI requirements detected in PRD.md
|
|
1251
|
+
Analyzed sections: 用户故事, 非功能需求
|
|
1252
|
+
Found keywords: 0 matches for "用户界面|前端|Web页面|UI"
|
|
1253
|
+
|
|
1254
|
+
Recommendation:
|
|
1255
|
+
1. This appears to be a backend-only requirement
|
|
1256
|
+
2. Skipping UI prototype generation
|
|
1257
|
+
3. Continuing to /flow-epic
|
|
1258
|
+
|
|
1259
|
+
Action: EXIT with status "ui_skipped"
|
|
1260
|
+
```
|
|
1261
|
+
|
|
1262
|
+
**2. 设计灵感采样失败**
|
|
1263
|
+
```
|
|
1264
|
+
ERROR: Design inspiration sampling failed
|
|
1265
|
+
Sampled: {Designer1}, {Designer2}
|
|
1266
|
+
Issue: Both designers from same category (建筑)
|
|
1267
|
+
Expected: Designers from different categories
|
|
1268
|
+
|
|
1269
|
+
Recovery:
|
|
1270
|
+
1. Re-sample with category diversity check
|
|
1271
|
+
2. Retry Phase 2
|
|
1272
|
+
```
|
|
1273
|
+
|
|
1274
|
+
**3. HTML验证失败**
|
|
1275
|
+
```
|
|
1276
|
+
ERROR: HTML validation failed
|
|
1277
|
+
Issues:
|
|
1278
|
+
- Unclosed <div> tag at line 145
|
|
1279
|
+
- Duplicate ID "btn-submit" at lines 89, 203
|
|
1280
|
+
- Missing alt attribute on <img> at line 67
|
|
1281
|
+
|
|
1282
|
+
Recovery:
|
|
1283
|
+
1. Fix HTML errors
|
|
1284
|
+
2. Re-run validate-constitution.sh
|
|
1285
|
+
3. Retry Phase 10
|
|
1286
|
+
```
|
|
1287
|
+
|
|
1288
|
+
**4. Constitution违规**
|
|
1289
|
+
```
|
|
1290
|
+
⚠️ Constitution violations detected:
|
|
1291
|
+
|
|
1292
|
+
[error] Article I.1 - NO PARTIAL IMPLEMENTATION
|
|
1293
|
+
Location: UI_PROTOTYPE.html:245
|
|
1294
|
+
Issue: Placeholder image <img src="placeholder.jpg">
|
|
1295
|
+
Fix: Replace with Picsum URL
|
|
1296
|
+
|
|
1297
|
+
[warning] Article V.4 - File Size
|
|
1298
|
+
Location: UI_PROTOTYPE.html
|
|
1299
|
+
Issue: File size 2300 lines (limit: 2000 lines)
|
|
1300
|
+
Fix: Acceptable for complex prototypes, or split into modules
|
|
1301
|
+
|
|
1302
|
+
Recovery:
|
|
1303
|
+
1. If ERROR violations: MUST FIX before proceeding
|
|
1304
|
+
2. If only WARNINGS: Document in report, proceed with caution
|
|
1305
|
+
```
|
|
1306
|
+
|
|
1307
|
+
---
|
|
1308
|
+
|
|
1309
|
+
## Integration with DevFlow
|
|
1310
|
+
|
|
1311
|
+
### Workflow Position:
|
|
1312
|
+
```text
|
|
1313
|
+
/flow-prd → PRD.md 生成完成
|
|
1314
|
+
↓
|
|
1315
|
+
/flow-ui → 检测UI需求 → 生成UI_PROTOTYPE.html ← YOU ARE HERE
|
|
1316
|
+
↓
|
|
1317
|
+
/flow-epic → 参考UI原型生成EPIC.md和TASKS.md
|
|
1318
|
+
↓
|
|
1319
|
+
/flow-dev → 基于UI原型实现代码
|
|
1320
|
+
```
|
|
1321
|
+
|
|
1322
|
+
### Conditional Trigger Logic:
|
|
1323
|
+
在 `/flow-new` 或 `/flow-prd` 完成后自动执行:
|
|
1324
|
+
|
|
1325
|
+
```bash
|
|
1326
|
+
# 检测是否需要UI原型
|
|
1327
|
+
has_ui_keywords=$(grep -iE "用户界面|前端|Web页面|UI|界面设计|交互" "$PRD_FILE")
|
|
1328
|
+
has_frontend_stack=$(ls -d src/components 2>/dev/null || ls package.json 2>/dev/null)
|
|
1329
|
+
|
|
1330
|
+
if [[ -n "$has_ui_keywords" || -n "$has_frontend_stack" ]]; then
|
|
1331
|
+
echo "✅ UI requirements detected, triggering /flow-ui"
|
|
1332
|
+
/flow-ui "$REQ_ID"
|
|
1333
|
+
else
|
|
1334
|
+
echo "ℹ️ No UI requirements detected, skipping UI prototype"
|
|
1335
|
+
# 直接进入 /flow-epic
|
|
1336
|
+
fi
|
|
1337
|
+
```
|
|
1338
|
+
|
|
1339
|
+
### Data Flow:
|
|
1340
|
+
```text
|
|
1341
|
+
PRD.md (Input)
|
|
1342
|
+
├─ 用户故事 → Phase 1 (产品分析) → 页面列表
|
|
1343
|
+
├─ 非功能需求 → Phase 3 (设计系统) → 性能/可访问性约束
|
|
1344
|
+
└─ 验收标准 → Phase 8 (交互逻辑) → 验证规则
|
|
1345
|
+
|
|
1346
|
+
UI_PROTOTYPE.html (Output)
|
|
1347
|
+
├─ HTML注释 → EPIC生成时的参考资料
|
|
1348
|
+
├─ Design System → TASKS生成时的技术约束
|
|
1349
|
+
└─ Component Inventory → DEV实现时的组件清单
|
|
1350
|
+
```
|
|
1351
|
+
|
|
1352
|
+
---
|
|
1353
|
+
|
|
1354
|
+
## Best Practices
|
|
1355
|
+
|
|
1356
|
+
### For ui-designer Agent:
|
|
1357
|
+
|
|
1358
|
+
1. **严格遵循Execution Flow**
|
|
1359
|
+
- 不跳过任何Phase
|
|
1360
|
+
- 每个Phase的输出是下一个Phase的输入
|
|
1361
|
+
|
|
1362
|
+
2. **设计灵感采样**
|
|
1363
|
+
- 选择互补而非冲突的风格
|
|
1364
|
+
- 推荐组合: 现代主义(秩序) + 生成艺术(动态)
|
|
1365
|
+
- 避免组合: 两位极简主义大师(风格过于相似)
|
|
1366
|
+
|
|
1367
|
+
3. **内容真实性**
|
|
1368
|
+
- 图片: https://picsum.photos/id/{1-200}/{width}/{height}
|
|
1369
|
+
- 数据: 使用符合业务场景的模拟数据
|
|
1370
|
+
- 文本: 从PRD中提取真实的业务术语
|
|
1371
|
+
|
|
1372
|
+
4. **响应式优先**
|
|
1373
|
+
- 移动端优先设计(Mobile First)
|
|
1374
|
+
- 在小屏幕可用是基础,而非可选
|
|
1375
|
+
|
|
1376
|
+
5. **可访问性非可选**
|
|
1377
|
+
- ARIA标签是必需品
|
|
1378
|
+
- 键盘导航必须可用
|
|
1379
|
+
- 色彩对比度必须达标
|
|
1380
|
+
|
|
1381
|
+
### For Main Agent (Claude):
|
|
1382
|
+
|
|
1383
|
+
1. **条件触发**
|
|
1384
|
+
- 检测PRD关键词前使用grep -i(忽略大小写)
|
|
1385
|
+
- 检测前端技术栈时检查多个标志(package.json, src/, components/)
|
|
1386
|
+
|
|
1387
|
+
2. **状态管理**
|
|
1388
|
+
- 更新orchestration_status.json中的phase
|
|
1389
|
+
- 记录uiPrototypeFile路径
|
|
1390
|
+
|
|
1391
|
+
3. **错误处理**
|
|
1392
|
+
- 如果UI生成失败,记录详细错误到EXECUTION_LOG.md
|
|
1393
|
+
- 允许用户选择跳过UI阶段直接进入Epic
|
|
1394
|
+
|
|
1395
|
+
---
|
|
1396
|
+
|
|
1397
|
+
## Validation Checklist (最终检查清单)
|
|
1398
|
+
|
|
1399
|
+
在输出UI_PROTOTYPE.html前,确保:
|
|
1400
|
+
|
|
1401
|
+
### Template Compliance
|
|
1402
|
+
- [x] 遵循了所有10个Phase的Execution Flow
|
|
1403
|
+
- [x] 每个Phase的输出都已生成并嵌入HTML注释
|
|
1404
|
+
|
|
1405
|
+
### Anti-Generic-Design
|
|
1406
|
+
- [x] 无占位图片(所有图片使用Picsum URL)
|
|
1407
|
+
- [x] 无常见AI紫色/蓝色配色
|
|
1408
|
+
- [x] 无Emoji图标(使用SVG或图标库)
|
|
1409
|
+
- [x] 无Lorem Ipsum占位文本
|
|
1410
|
+
|
|
1411
|
+
### Constitution Compliance
|
|
1412
|
+
- [x] Article I - 完整实现,无占位符
|
|
1413
|
+
- [x] Article III - 无硬编码密钥
|
|
1414
|
+
- [x] Article V - HTML注释完整,代码可维护
|
|
1415
|
+
- [x] Article X - 仅实现PRD明确的需求
|
|
1416
|
+
|
|
1417
|
+
### Quality Standards
|
|
1418
|
+
- [x] HTML5语义化标签
|
|
1419
|
+
- [x] ARIA标签完整
|
|
1420
|
+
- [x] 响应式布局(三断点)
|
|
1421
|
+
- [x] 交互逻辑完整
|
|
1422
|
+
- [x] 设计系统完整
|
|
1423
|
+
- [x] 所有PRD用户故事对齐
|
|
1424
|
+
|
|
1425
|
+
### Ready for Handoff
|
|
1426
|
+
- [x] 文件可独立运行(浏览器打开即可查看)
|
|
1427
|
+
- [x] 开发人员可直接参考实现代码
|
|
1428
|
+
- [x] 产品经理可用于需求验证
|
|
1429
|
+
- [x] 设计师可用于设计评审
|
|
1430
|
+
|
|
1431
|
+
---
|
|
1432
|
+
|
|
1433
|
+
**Template Version**: 1.0.0
|
|
1434
|
+
**Last Updated**: 2025-01-10
|
|
1435
|
+
**Maintainer**: CC-DevFlow Team
|
|
1436
|
+
**License**: MIT
|