🎨 精简完善系统

This commit is contained in:
2026-04-10 17:57:48 +08:00
parent ee6565371e
commit 82c5020e71
55 changed files with 5785 additions and 9712 deletions

215
AGENTS.md Normal file
View File

@@ -0,0 +1,215 @@
# AGENTS.md
## 1. 文件作用
本文件定义本仓库的协作约束,供人类开发者和代码代理统一遵循。
目标只有三个:
- 先分清模块边界,再动代码。
- 新功能默认落在 `server``web-admin`
- `web` 只作为旧版参考实现,不参与当前交付。
## 2. 项目总览
本仓库是一个前后端分离项目,当前有效开发面如下:
| 目录 | 角色 | 技术栈 | 是否允许修改 |
| --- | --- | --- | --- |
| `server` | 后端服务 | Go 1.24、Gin、Gorm、Viper、Zap | 允许 |
| `web-admin` | 新管理后台前端 | React 19、TypeScript、Vite、Ant Design、Zustand、React Query | 允许 |
| `web` | 原版 Vue 管理后台 | Vue | 不允许 |
当前默认管理后台目录已经在根目录 `Makefile` 中指定为 `WEB_DIR ?= web-admin`,后续构建与打包应以 `web-admin` 为准。
## 3. 工作边界
### 3.1 允许修改的目录
- `server/**`
- `web-admin/**`
- 根目录与部署目录中和当前任务直接相关的文档、脚本、配置文件
### 3.2 禁止修改的目录
- `web/**`
`web` 是旧版 Vue 后台,仅用于界面、接口命名、交互流程和功能覆盖范围参考。不得在该目录内新增、删除或修改任何文件。
### 3.3 修改原则
- 如果 `web-admin` 缺少某个页面或交互,可以参考 `web` 的实现思路,但要用 React 方式重写。
- 如果 `server` 的接口能力不足,应优先补齐后端,再让 `web-admin` 接入。
- 不为了兼容旧实现而把新代码继续写回 `web`
## 4. 目录说明
### 4.1 `server`
后端采用典型分层结构,开发时按职责落位:
| 目录 | 职责 |
| --- | --- |
| `server/api` | HTTP 接口入口。负责参数接收、调用 service、返回响应。 |
| `server/service` | 业务逻辑层。负责业务编排、事务边界、数据写入策略。 |
| `server/router` | 路由注册。负责把接口暴露给 Gin。 |
| `server/model` | 数据模型、请求结构、响应结构。 |
| `server/middleware` | 中间件。负责鉴权、日志、限流、错误处理等横切逻辑。 |
| `server/initialize` | 初始化流程。负责数据库、Redis、路由、校验器、定时器等装配。 |
| `server/config` | 配置结构定义。与 `config.yaml` / `config.docker.yaml` 对应。 |
| `server/utils` | 通用工具,不承载具体业务语义。 |
| `server/mcp` | MCP 相关能力。新增此类能力时优先放在这里。 |
| `server/docs` | Swagger 产物目录。只有接口变更需要更新文档时才修改。 |
后端变更约束:
- 不要把业务逻辑堆进 `api` 层。
- 不要把页面专属拼装逻辑散落到 `utils`
- 新接口需要同时检查路由注册、权限、请求结构和返回结构是否完整。
- 涉及配置项变更时,必须同步检查 `server/config.yaml``server/config.docker.yaml` 和对应结构体。
### 4.2 `web-admin`
新后台是当前主开发前端,目录组织以功能模块为中心:
| 目录 | 职责 |
| --- | --- |
| `web-admin/src/features` | 业务页面与模块实现。页面优先落在这里。 |
| `web-admin/src/router` | 路由定义与页面装配。 |
| `web-admin/src/lib` | 请求封装、日期、树结构、存储等通用前端基础设施。 |
| `web-admin/src/store` | 全局状态。当前主要用于鉴权与会话信息。 |
| `web-admin/src/types` | 共享类型定义。 |
| `web-admin/public` | 静态资源。 |
前端变更约束:
- 新页面优先沿用现有 `features/*Page.tsx` 的组织方式。
- 接口请求优先收敛到 `web-admin/src/lib` 或对应 feature 内部的请求层,不要在组件里散写 HTTP 细节。
- 类型优先显式声明,不要用大量 `any`
- 页面以管理后台场景为前提,优先保证信息密度、操作链路和可维护性。
### 4.3 `web`
该目录只读。允许查看,不允许编辑。
适用场景:
- 查旧版菜单结构
- 查既有接口命名
- 查页面字段和交互流程
- 查某个能力在旧后台中的展示方式
不适用场景:
- 直接在这里修 bug
- 在这里补新功能
- 为了图省事复制构建配置并改回旧目录
## 5. 本地开发
### 5.1 环境基线
| 项目 | 要求 |
| --- | --- |
| Go | 1.24.x |
| Node.js | >= 18.16,建议 20+ |
| 包管理器 | `web-admin` 使用 `npm` |
### 5.2 常用命令
#### 后端
```bash
cd /Users/lee/GolandProjects/Go-Web-Template/server
go run .
```
#### 新后台前端
```bash
cd /Users/lee/GolandProjects/Go-Web-Template/web-admin
npm install
npm run dev
```
默认约定:
- `web-admin` 开发地址:`http://localhost:8081`
- 后端默认代理目标:`http://127.0.0.1:8888`
#### Swagger 文档
```bash
cd /Users/lee/GolandProjects/Go-Web-Template/server
swag init
```
#### 根目录构建
```bash
cd /Users/lee/GolandProjects/Go-Web-Template
make build
```
## 6. 变更落地规则
### 6.1 后端任务
遇到后端需求时,优先按下面顺序检查:
1. 是否已有对应 `model``service``api``router`
2. 是否需要补权限、菜单、字典、参数或日志记录。
3. 是否影响 Swagger 文档、配置文件或初始化逻辑。
4. 是否需要补测试,至少覆盖纯工具函数和稳定业务逻辑。
### 6.2 前端任务
遇到管理后台需求时,优先按下面顺序处理:
1. 先确认目标页面属于 `web-admin` 哪个 feature。
2. 需要参考旧实现时,只读取 `web`,不在 `web` 动手。
3. 先整理接口契约,再组织页面状态和交互。
4. 提交前至少完成构建或 lint 校验。
### 6.3 跨端联动任务
如果需求同时涉及前后端,推荐顺序如下:
1. 先定义或确认接口契约。
2. 先补 `server`,保证接口可运行。
3. 再接 `web-admin` 页面和交互。
4. 最后联调并确认代理、鉴权、菜单和权限表现一致。
## 7. 验证要求
只要改动了对应模块,至少执行一项最低验证:
| 改动范围 | 最低验证 |
| --- | --- |
| `server` Go 代码 | `go test ./...` 或最小相关包测试 |
| `web-admin` 前端代码 | `npm run build``npm run lint` |
| 接口定义变更 | 补充或更新 Swagger 文档,并做一次接口联调 |
| 构建脚本或部署配置 | 执行对应构建命令,确认没有明显路径错误 |
如果因为外部依赖无法完成验证,需要明确说明阻塞点,不得省略。
## 8. 代码风格补充
- 文档、注释、提交说明优先使用清晰中文。
- 注释只说明职责、边界、约束和必要语义,不复述代码表面行为。
- 新增后端代码遵循现有分层,不主动引入跨层调用。
- 新增前端代码遵循现有 React + TypeScript + Ant Design 方案,不回退到旧 Vue 写法。
- 非必要不新增大型依赖。新增依赖前先确认当前栈无法直接解决问题。
## 9. 决策优先级
出现冲突时,按下面顺序决策:
1. 不修改 `web`
2.`web-admin` 作为当前管理后台主实现
3.`server` 的真实接口和数据结构为准
4. 参考旧版 `web` 的业务行为,而不是复制其实现细节
## 10. 一句话约束
这个仓库的当前主线是:维护 `server`,建设 `web-admin`,只参考 `web`,绝不修改 `web`