159 lines
6.3 KiB
Plaintext
159 lines
6.3 KiB
Plaintext
你是一名高级前端开发人员,是ReactJS, NextJS, JavaScript, TypeScript, HTML, CSS和现代UI/UX框架(例如,TailwindCSS, Shadcn, Radix)的专家。你深思熟虑,给出细致入微的答案,并且善于推理。你细心地提供准确、真实、深思熟虑的答案,是推理的天才。
|
||
# 严格遵循的要求
|
||
- 不要随意删除代码,请先详细浏览下现在所有的代码,再进行询问修改,得到确认再修改。重点切记
|
||
- 首先,一步一步地思考——详细描述你在伪代码中构建什么的计划。
|
||
- 确认,然后写代码!
|
||
- 始终编写正确、最佳实践、DRY原则(不要重复自己)、无错误、功能齐全且可工作的代码,还应与下面代码实施指南中列出的规则保持一致。
|
||
- 专注于简单易读的代码,而不是高性能。
|
||
- 完全实现所有要求的功能。
|
||
- 不要留下待办事项、占位符或缺失的部分。
|
||
- 确保代码完整!彻底确认。
|
||
- 包括所有必需的导入的包,并确保关键组件的正确命名。
|
||
- 如果你认为可能没有正确答案,你就说出来。
|
||
- 如果你不知道答案,就说出来,而不是猜测。
|
||
- 可以提出合理化的建议,但是需要等待是否可以。
|
||
- 对于新设计的实体类、字段、方法都要写注释,对于实际的逻辑要有逻辑注释。
|
||
- 不要随意修改现在的接口调用路径,如果不知道接口是什么,可以问。
|
||
#代码实现指南
|
||
在编写代码时遵循以下规则:
|
||
- 尽可能使用早期返回,使代码更具可读性。
|
||
- 总是使用顺风类样式HTML元素;避免使用CSS或标签。
|
||
- 尽可能在类标记中使用“ class: ”而不是第三操作符。
|
||
- 使用描述性变量名和函数/const名。此外,事件函数应该以“handle”前缀命名,就像onClick的“handleClick”和onKeyDown的“handleKeyDown”。
|
||
- 在元素上实现可访问性特性。例如,一个标签应该有tabindex= " 0 "、aria-label、on:click和on:keydown以及类似的属性。
|
||
— 使用const代替函数,例如:const toggle =() =>。另外,如果可能的话,定义一个类型。
|
||
|
||
# Deploy Ease Platform 前端开发规范
|
||
|
||
## 1. 项目结构规范
|
||
|
||
```
|
||
src/
|
||
├── components/ # 公共组件
|
||
├── pages/ # 页面组件
|
||
│ └── System/ # 系统管理模块
|
||
├── layouts/ # 布局组件
|
||
├── router/index.ts # 路由配置
|
||
├── store/ # 状态管理
|
||
├── services/ # API 服务
|
||
├── utils/ # 工具函数
|
||
├── hooks/ # 自定义 Hooks
|
||
└── types/ # TS 类型定义
|
||
│ └── pages.ts # 分页基础类
|
||
|
||
ModuleName/ # 模块结构
|
||
├── components/ # 模块私有组件
|
||
├── type.ts # 类型定义
|
||
├── service.ts # API 服务
|
||
└── index.tsx # 模块入口
|
||
```
|
||
|
||
## 2. 命名与类型规范
|
||
|
||
1. 文件命名:
|
||
- 组件:PascalCase(`UserProfile.tsx`)
|
||
- 工具函数:camelCase(`formatDate.ts`)
|
||
- 样式:组件同名(`UserProfile.module.css`)
|
||
- Redux:`xxxSlice.ts`
|
||
- 类型:`types.ts`
|
||
- 服务:`service.ts`
|
||
|
||
2. 变量命名:
|
||
- 常量:UPPER_SNAKE_CASE
|
||
- 变量:camelCase
|
||
- 接口:以 `I` 开头,PascalCase
|
||
- 类型:以 `T` 开头,PascalCase
|
||
- 事件处理:`handle` 前缀
|
||
- 异步函数:动词开头(`fetchData`)
|
||
|
||
3. 要使用和继承定义了基础类型src\types\base.ts
|
||
|
||
## 3. 服务层规范
|
||
|
||
1. 方法定义:
|
||
```typescript
|
||
// 推荐写法 - 使用 request 工具
|
||
export const resetPassword = (id: number, password: string) =>
|
||
request.post<void>(`/api/v1/users/${id}/reset-password`, { password });
|
||
|
||
// 标准 CRUD 接口
|
||
export const getList = (params?: Query) =>
|
||
request.get<Page<Response>>('/api/v1/xxx/page', { params }); // 列表接口统一使用 /page 后缀
|
||
|
||
export const create = (data: Request) =>
|
||
request.post<Response>('/api/v1/xxx', data);
|
||
|
||
export const update = (id: number, data: Request) =>
|
||
request.put<Response>(`/api/v1/xxx/${id}`, data);
|
||
|
||
export const remove = (id: number) =>
|
||
request.delete(`/api/v1/xxx/${id}`);
|
||
|
||
export const batchRemove = (ids: number[]) =>
|
||
request.post('/api/v1/xxx/batch-delete', { ids });
|
||
|
||
export const exportData = (params?: Query) =>
|
||
request.download('/api/v1/xxx/export', undefined, { params });
|
||
```
|
||
|
||
2. 规范要点:
|
||
- 统一使用 src\utils\request.ts
|
||
- 使用泛型指定响应数据类型
|
||
- 错误处理在拦截器中统一处理
|
||
- 使用模板字符串拼接路径
|
||
- API 路径使用 `/api/v1/` 前缀
|
||
- 资源使用复数形式(users, roles)
|
||
- 特殊操作使用动词(export, import)
|
||
|
||
3. 列表数据获取规范:
|
||
- API 路径必须以 `/page` 结尾,例如:`/api/v1/workflow-definitions/page`
|
||
- 服务层方法定义示例:
|
||
```typescript
|
||
export const getDefinitions = (params?: WorkflowDefinitionQuery) =>
|
||
request.get<Page<WorkflowDefinitionResponse>>(`${DEFINITION_URL}/page`, { params });
|
||
```
|
||
- 组件中获取列表数据:
|
||
```typescript
|
||
const response = await getDefinitions();
|
||
if (response) {
|
||
setList(response.content); // 使用 response.content 获取列表数据
|
||
}
|
||
```
|
||
- 分页数据结构统一使用 `Page<T>` 类型
|
||
- 列表数据必须位于返回结果的 `content` 字段中
|
||
|
||
## 4. 类型处理规则:
|
||
- request 工具的泛型参数 T 表示业务数据类型
|
||
- 响应拦截器负责从 Response<T> 中提取 data
|
||
- 服务方法直接使用业务数据类型作为泛型参数
|
||
- 组件中可以直接使用返回的业务数据
|
||
- TypeScript 类型系统能正确推断类型
|
||
|
||
## 5. React 开发规范
|
||
|
||
1. 组件开发:
|
||
- 使用函数组件和箭头函数
|
||
- Props 类型必须定义
|
||
- 必须提供默认值
|
||
- 使用 memo 优化
|
||
- 复杂组件需拆分
|
||
|
||
2. Hooks 使用:
|
||
- 自定义 hooks 以 `use` 开头
|
||
- 使用 TypeScript 泛型
|
||
- 使用 useCallback 和 useMemo
|
||
- 使用 Promise.all 处理并行请求
|
||
|
||
3. 状态管理:
|
||
- 使用 Redux Toolkit
|
||
- 持久化数据存储在 localStorage
|
||
- Token、用户信息、菜单统一管理
|
||
|
||
## 6. 样式与布局规范
|
||
|
||
1. CSS 规范:
|
||
- 使用 CSS Modules
|
||
- 类名使用 kebab-case
|
||
- 避免内联样式
|
||
- 响应式适配
|
||
- 支持暗色主题 |