基于 OpenClaw + Claude Code 的端到端研发自动化系统
从需求到部署的全流程标准化解决方案
| 项目名称 | [填写项目名称] | 项目类型 | □ 新建 □ 迭代 □ 重构 |
|---|---|---|---|
| 业务领域 | [填写业务领域] | 项目负责人 | [填写负责人] |
| 前端负责人 | [填写负责人] | 预计周期 | [填写开发周期] |
| 序号 | 功能模块 | 功能描述 | 优先级 | 备注 |
|---|---|---|---|---|
| 1 | [模块名称] | [功能描述] | P0 | - |
| 2 | [模块名称] | [功能描述] | P1 | - |
| 3 | [模块名称] | [功能描述] | P2 | - |
| 技术类别 | 推荐方案 | 备选方案 | 选型理由 |
|---|---|---|---|
| 前端框架 | React 18+ / Vue 3+ | Angular / Svelte | 生态完善、社区活跃 |
| 开发语言 | TypeScript 5+ | JavaScript ES6+ | 类型安全、可维护性强 |
| 构建工具 | Vite 5+ | Webpack 5+ | 构建速度快、开发体验好 |
| 状态管理 | Zustand / Pinia | Redux Toolkit / Vuex | 轻量级、易用性好 |
| UI 组件库 | Ant Design / Element Plus | Material UI / Naive UI | 组件丰富、文档完善 |
| CSS 方案 | TailwindCSS + CSS Modules | SCSS / Less | 原子化 CSS、开发效率高 |
const envConfig = {
"node_version": ">=18.0.0",
"npm_version": ">=9.0.0",
"browsers": ["Chrome >= 100", "Safari >= 15", "Firefox >= 90"],
"screen_resolutions": ["1920x1080", "1366x768", "375x667 (mobile)"]
};
# 生产依赖
npm install react react-dom
npm install typescript @types/react @types/react-dom
# 开发依赖
npm install -D vite @vitejs/plugin-react
npm install -D eslint prettier stylelint
npm install -D vitest @testing-library/react
npm install -D husky lint-staged
src/components/
├── base/ # 基础组件(无业务逻辑)
│ ├── Button/
│ ├── Input/
│ ├── Modal/
│ └── Table/
├── business/ # 业务组件(含业务逻辑)
│ ├── UserCard/
│ ├── OrderForm/
│ └── ProductList/
├── layout/ # 布局组件
│ ├── Header/
│ ├── Sidebar/
│ └── PageContainer/
└── composite/ # 复合组件(组合多个组件)
├── DataTable/
└── FormModal/
每个组件只负责一个功能,避免组件过于臃肿。
// ✅ 好的设计:Button 只负责按钮展示和点击
const Button = ({ children, onClick }) => (
<button onClick={onClick}>{children}</button>
);
// ❌ 坏的设计:组件承担过多职责
const BadButton = ({ data }) => {
// 同时处理数据获取、验证、展示...
};
对扩展开放,对修改关闭。通过 props 扩展行为而非修改源码。
interface ButtonProps {
variant?: 'primary' | 'secondary' | 'danger';
size?: 'small' | 'medium' | 'large';
// 可通过添加新 variant 扩展,无需修改组件
}
interface ComponentProps {
// 必需属性
title: string;
// 可选属性(带默认值)
size?: 'small' | 'medium' | 'large';
disabled?: boolean;
// 回调函数
onClick?: (event: MouseEvent) => void;
onChange?: (value: any) => void;
// 样式相关
className?: string;
style?: React.CSSProperties;
// 子元素
children?: React.ReactNode;
}
| 断点名称 | 宽度范围 | 适用设备 | 布局变化 |
|---|---|---|---|
| xs | < 576px | 小屏手机 | 单列布局 |
| sm | ≥ 576px | 大屏手机 | 单列布局 |
| md | ≥ 768px | 平板 | 双列布局 |
| lg | ≥ 992px | 小屏桌面 | 标准布局 |
| xl | ≥ 1200px | 大屏桌面 | 宽屏布局 |
enum InteractionState {
IDLE = 'idle', // 初始状态
LOADING = 'loading', // 加载中
SUCCESS = 'success', // 成功
ERROR = 'error', // 错误
EMPTY = 'empty', // 空状态
}
| 类型 | 触发场景 | 显示时长 | 是否可关闭 | 示例 |
|---|---|---|---|---|
| Info | 一般信息通知 | 3s | 是 | ℹ️ 操作提示 |
| Success | 操作成功 | 2s | 否 | ✓ 保存成功 |
| Warning | 警告提示 | 4s | 是 | ⚠️ 数据未保存 |
| Error | 错误提示 | 5s / 手动 | 是 | ✗ 提交失败 |
| 动画类型 | 时长 | 缓动函数 | 应用场景 |
|---|---|---|---|
| 微交互 | 150ms | ease-out | hover 效果 |
| 小动画 | 200ms | ease-in-out | 按钮点击 |
| 中等动画 | 300ms | cubic-bezier(0.4, 0, 0.2, 1) | 模态框 |
| 大动画 | 400ms | cubic-bezier(0.4, 0, 0.2, 1) | 页面切换 |
interface ApiResponse<T> {
code: number; // 状态码
message: string; // 消息
data: T; // 数据
timestamp: number; // 时间戳
traceId: string; // 追踪 ID
}
interface PaginationParams {
page: number; // 页码(从 1 开始)
pageSize: number; // 每页数量
sortBy?: string; // 排序字段
sortOrder?: 'asc' | 'desc'; // 排序方向
}
| 错误码 | 含义 | 处理建议 | 前端响应 |
|---|---|---|---|
| 200 | 成功 | - | 正常处理响应 |
| 400 | 请求参数错误 | 检查请求参数 | 显示表单验证错误 |
| 401 | 未授权 | 跳转登录 | 重定向到登录页 |
| 403 | 禁止访问 | 提示无权限 | 显示权限不足提示 |
| 404 | 资源不存在 | 提示资源不存在 | 显示 404 页面 |
| 500 | 服务器错误 | 重试或联系支持 | 显示错误提示并提供重试 |
const errorHandler = (error: ApiError) => {
const { code, message } = error;
switch (code) {
case 401:
redirectToLogin();
break;
case 403:
showMessage('warning', '无权限访问');
break;
case 404:
showMessage('error', '资源不存在');
break;
case 500:
showMessage('error', '服务器错误,请稍后重试');
break;
default:
showMessage('error', message || '未知错误');
}
};
| 指标 | 目标值 | 测量方法 | 当前状态 |
|---|---|---|---|
| FCP (首次内容绘制) | < 1.5s | Lighthouse | ✓ 达标 |
| LCP (最大内容绘制) | < 2.5s | Lighthouse | ⚠ 待优化 |
| TTI (可交互时间) | < 3.5s | Lighthouse | ✓ 达标 |
| TBT (总阻塞时间) | < 200ms | Lighthouse | ✓ 达标 |
| CLS (累积布局偏移) | < 0.1 | Lighthouse | ✓ 达标 |
# Dockerfile
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
# k8s/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend-app
namespace: production
spec:
replicas: 3
selector:
matchLabels:
app: frontend-app
template:
metadata:
labels:
app: frontend-app
spec:
containers:
- name: frontend
image: registry.example.com/frontend-app:latest
ports:
- containerPort: 80
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 30
periodSeconds: 10
请根据以下要求生成一个 React 组件:
【组件名称】: [组件名]
【功能描述】: [详细描述]
【Props 接口】: [TypeScript 接口定义]
【样式要求】: [样式规范]
【测试要求】: [测试用例要求]
请生成:
1. 组件源代码(TSX)
2. 样式文件(SCSS/CSS Modules)
3. 单元测试文件
4. 组件文档(Storybook)
请根据以下 API 文档生成前端集成代码:
【接口地址】: [API URL]
【请求方法】: GET/POST/PUT/DELETE
【请求参数】: [参数定义]
【响应结构】: [响应数据类型]
请生成:
1. API 调用函数
2. TypeScript 类型定义
3. 错误处理逻辑
4. 使用示例
请为以下组件生成完整的测试套件:
【组件名称】: [组件名]
【组件功能】: [功能描述]
【测试框架】: Jest + React Testing Library
【覆盖率要求】: ≥ 90%
请生成:
1. 单元测试用例
2. 边界条件测试
3. 交互行为测试
4. Mock 数据定义