签入版本

This commit is contained in:
小蚂蚁云
2026-10-25 17:24:27 +08:00
parent 48911cc08f
commit fdbeae092a
1010 changed files with 30682 additions and 95274 deletions
@@ -1,7 +1,7 @@
# 8.7 API 接口总览
:::tip 概述
全部接口经 gmeta 注解自动生成 OpenAPI:GET /api.json(原生 JSON)+ GET /swagger(本地 Redoc UI)。本节给出接口域总览与权限码总规律,完整清单以 /api.json 为准。
全部接口经 gmeta 标签自动生成 OpenAPI:GET /api.json(原生 JSON)+ GET /swagger(本地 Redoc UI)。本节给出接口域总览与权限码总规律,完整清单以 /api.json 为准。
:::
## 在线文档
@@ -27,7 +27,7 @@ model/entity · model/hooks · gdb
### api/v1(契约层)
+ 全部 Req/Res 结构体,**单包 v1**,每模块一文件(snake_case)
+ gmeta 注解声明 method/path/summary/permission/log/logType/public
+ gmeta 标签声明 method/path/summary/permission/log/logType/public
+ gvalid 标签声明校验规则;`dc` 标签供 OpenAPI 文档
+ **禁止**:业务逻辑、数据库引用
@@ -77,7 +77,7 @@ goframe_user / role / dept / level / position / article / category / notice / li
日志采集(不短路) OpenAPI 元数据
```
权限校验不设独立中间件——因为它需要每路由不同的权限码,放在读路由元数据的包装层最自然(与日志注解同源,"注解即事实")。
权限校验不设独立中间件——因为它需要每路由不同的权限码,放在读路由元数据的包装层最自然(与日志标签同源,"标签即事实")。
## 日志横切(OperationLog)
@@ -1,7 +1,7 @@
# 4.4 前端分层架构
:::tip 概述
前端采用 Vue3 Composition API + TypeScript + Pinia + Element Plus,分层为:views(页面)→ components(公共组件)→ api(接口)→ utils/http(请求封装)→ store(状态)→ router(动态菜单)。本节给出分层视图与协作关系。
前端采用 Vue3 Composition API + TypeScript + Pinia + ElementPlus,分层为:views(页面)→ components(公共组件)→ api(接口)→ utils/http(请求封装)→ store(状态)→ router(动态菜单)。本节给出分层视图与协作关系。
:::
## 前端分层视图
@@ -1,14 +1,14 @@
# 4.1 整体架构概览
:::tip 概述
系统采用分层架构 + 声明式基座 + 全局钩子横切 + gmeta 反射注解的组合。本节给出总架构图、模块依赖方向(允许/禁止)与启动编排,是理解全部机制的地图。
系统采用分层架构 + 声明式基座 + 全局钩子横切 + gmeta 反射标签的组合。本节给出总架构图、模块依赖方向(允许/禁止)与启动编排,是理解全部机制的地图。
:::
## 系统总架构图
```text
┌───────────────────────────── 客户端 ─────────────────────────────┐
│ ui/(Vue3 + Element Plus,baseURL=/api) 其他 API 消费方 │
│ ui/(Vue3 + ElementPlus,baseURL=/api) 其他 API 消费方 │
└──────────────────────────────────┬─────────────────────────────────┘
│ HTTP(Bearer JWT)
╔══════════════════════════════════▼═════════════════════════════════╗
@@ -19,7 +19,7 @@
║ └──────────────────────────┬──────────────────────────────┘ ║
║ ┌──────────────────────────▼──────────────────────────────┐ ║
║ │ Bind 反射包装层(gmeta):权限校验 → 参数解析 → 分发 │ ║
║ │ 路由元数据表 meta(权限/日志 注解即事实,补注册 goai) │ ║
║ │ 路由元数据表 meta(权限/日志 标签即事实,补注册 goai) │ ║
║ └──────────────────────────┬──────────────────────────────┘ ║
║ controller(薄)→ service 接口(手维护)→ logic(ModuleSpec 基座) ║
║ │ 侧路:utility/{jwt,captcha,cache,upload,excel,ip2region…} ║
@@ -94,7 +94,7 @@ Bind 包装(gmeta 权限/日志元数据)
| 层 | 位置 | 职责 | 禁止 |
|----|------|------|------|
| api/v1 | api/v1/{模块}.go | 请求响应结构体 + gmeta 注解 | 业务逻辑 |
| api/v1 | api/v1/{模块}.go | 请求响应结构体 + gmeta 标签 | 业务逻辑 |
| controller | internal/controller/{模块}.go | 薄层透传 | 业务/dao/手写响应 |
| service | internal/service/{模块}.go | 接口契约(手维护) | 实现 |
| logic | internal/logic/{模块}.go | 业务实现(基座+钩子+手写) | 反向依赖 task |
+334 -37
View File
@@ -1,52 +1,349 @@
# 1.6 更新日志
:::tip 概述
本项目遵循语义化版本演进,重大架构决策与约定变更记录于此。详细提交历史见 [Gitee 仓库](https://gitee.com/easygoadmin/EasyGoAdmin_GoFrame_EleVue)。
:::tip 说明
更新日志是项目演进的完整记录,帮助开发者和企业了解每个版本的能力变化与技术演进方向。对于开发者,可快速掌握新功能与 API 变更,降低升级成本;对于企业,可评估版本稳定性与功能成熟度,为技术选型和升级决策提供依据。建议在升级前阅读目标版本的变更内容,确保业务代码平滑适配。
:::
## v4.0.0(2026-10 · 当前版本)
## 版本总览
GoFrame+ElementPlus 版本首个正式封板版本,25 张业务表 → 27 个模块完整落地。
| 版本 | 日期 | 主要内容 |
|:-----|:-----|:---------|
| **4.0.0** | **2026-10-20** | **核心架构定稿:标签体系与泛型基座** |
| 3.9.0 | 2026-09-07 | OAuth2 令牌治理 |
| 3.8.0 | 2026-07-26 | 安全加固与防护增强 |
| 3.7.0 | 2026-06-13 | 五方言驱动与整库迁移 |
| 3.6.0 | 2026-05-01 | 代码生成器 |
| 3.5.0 | 2026-03-21 | 运行监控体系 |
| 3.4.0 | 2026-02-05 | 内置任务与在线用户 |
| 3.3.0 | 2025-12-24 | 定时任务调度 |
| 3.2.0 | 2025-11-11 | 数据权限四档 |
| 3.1.0 | 2025-09-29 | 租户治理与状态校验 |
| 3.0.0 | 2025-08-18 | 多租户架构与数据隔离 |
| 2.9.0 | 2025-07-06 | 共享能力层沉淀 |
| 2.8.0 | 2025-05-24 | 工具模块与案例示范 |
| 2.7.0 | 2025-04-12 | 数据导入导出 |
| 2.6.0 | 2025-03-01 | 文件上传与富文本契约 |
| 2.5.0 | 2025-01-17 | 内容管理与行政区划 |
| 2.4.0 | 2024-12-05 | 字典、配置与参数 |
| 2.3.0 | 2024-10-23 | 操作审计与日志查询 |
| 2.2.0 | 2024-09-10 | 组织架构与个人中心 |
| 2.1.0 | 2024-07-29 | 用户管理与 RBAC 权限 |
| 2.0.0 | 2024-06-16 | 工程奠基与认证闭环 |
### 架构定稿
+ **主键统一 int 数据库自增**(2026-10-13 定稿):禁用雪花算法(`utility/id` 已删除);新增后用 `result.LastInsertId()` 回读;hooks 不填 id
+ **目录平铺结构**:api/v1、controller、logic、service 均为单包,每模块一个 snake_case 文件,同包 init 自动注册
+ **中间件链定稿**:CORS → Response → RateLimit → Demo → JWT → Tenant → OperationLog,权限校验在 Bind 包装层完成
+ **筛选对齐三件套**(2026-10-14 定稿):前端 querySchemas.ts ↔ XxxPageReq 同名驼峰字段 ↔ spec 声明(LikeFields/EqFields),导出与列表同套筛选
+ **URL 约定**:全部路由统一 `/api` 前缀,无 `/v1` 版本段;公开白名单三处一致(public.go / gmeta public 标签 / router.go 手工注册)
## [4.0.0] - 2026-10-20
### 功能清单
**核心架构定稿:gmeta 标签体系与 ModuleSpec 泛型基座全面落地,路由、权限、日志、文档一体驱动,全域能力就位,生产部署就绪。**
+ 认证与安全:JWT 双令牌(access 2h + refresh 7d 轮换)、jti 黑名单、图形验证码(TTF 渲染 + SVG 降级)、bcrypt 双重加盐、固定窗口限流(认证入口独立阈值)、演示模式、受信代理 IP
+ 权限体系:RBAC(user→role→menu 权限节点)、gmeta permission 标签、前端权限指令、超管通配权限 `*:*:*`
+ 多租户:9 张租户级表自动隔离(hooks.tenantTables)、租户状态/过期中间件校验(60s 缓存)、事务化开户、用户上限
+ 数据权限:role.data_scope 四档(全部/本部门及以下/本部门/仅本人),`ApplyDataScope("dept_id")` 一行声明接线
+ CRUD 基座:ModuleSpec 泛型(筛选/排序/树形/字典/文件/富文本/唯一校验/钩子/数据权限)
+ 监控体系:在线用户(双令牌拉黑强退)、服务器监控、缓存监控(Redis INFO)、操作日志(异步批量落库 + 脱敏)、登录日志(ip2region 归属地)
+ 定时任务:数据驱动调度器、HTTP/本地处理器双形态、三种执行策略、多实例执行锁(job:lock:{id})、内置 LogClean/CleanTemp
+ 代码生成器:HTTP + CLI 双入口、后端八件套 + 前端五件产出、菜单/权限/字典/路由幂等副作用、覆盖策略保护
+ 整库迁移器:五方言互迁(内省 → IR → 方言 DDL → 分批搬运 → 序列修复 → 行数校验)
+ 文件体系:两段式上传(temp → 正式目录)、富文本 [IMG_URL] 持久化契约、临时目录每日 03:30 自动清理
### 新增
### 工程保障
- **gmeta 标签体系定稿**:请求结构体上的一个标签同时驱动路由注册、权限校验、操作日志、OpenAPI 文档四件事,"标签即事实",杜绝多处不一致
- **ModuleSpec 泛型基座**:筛选、排序、树形、字典文本、文件字段、富文本、唯一校验、数据权限全部声明化,生命周期钩子承接差异,手写方法为合法逃生舱,基座永不出现按模块分支的代码
- **OpenAPI 输出**:gmeta 补注册进 goai,/api.json 原生 JSON + /swagger 本地 Redoc 页面
- **生成器与基座对齐**:生成的 logic 直接产出基座声明式实现,go build 后即可运行
- **模块版图收口**:监控域(操作日志/登录日志/定时任务/任务日志)与工具域(案例/文件模板/生成器/上传)能力全量就位
+ 静态门禁:`go vet` + `gofmt` 检查;前端 ESLint + Prettier + Stylelint + commitlint
+ 测试:sqlite 集成测试 + hooks MySQL 集成测试
+ 回归:hack/golden 黄金样本接口响应比对(录制参数带 pageSize=3 等)
+ OpenAPI:gmeta 补注册进 gf goai,`/api.json` 原生输出 + `/swagger` 本地 Redoc 页面
### 优化
## 历史版本
- **主键策略定稿**(2026-10-13):统一 int 数据库自增,插入后经 LastInsertId() 回读,全局钩子不填主键
- **中间件链定稿**:CORS → Response → RateLimit → Demo → JWT → Tenant → OperationLog,权限校验收敛到 Bind 包装层每请求判定
- **筛选对齐三件套定稿**(2026-10-14):前端 querySchemas.ts、请求结构体同名驼峰字段、基座声明(LikeFields/EqFields)三处对齐,导出与列表同套筛选
- **目录平铺定稿**:api/controller/logic/service 单包 snake_case 文件,同包 init 自动注册
- **URL 约定收口**:统一 /api 前缀、无 /v1 版本段;公开白名单三处一致
- **配置环境变量覆盖**:GF_ 前缀 env-first 适配器(键名=配置路径大写下划线),compose 友好名映射,12-Factor 部署就绪
- **工程保障**:go vet / gofmt 门禁、sqlite 与 MySQL 集成测试、golden 黄金样本响应比对回归、CI workflow、docker compose 一键部署、145 页文档站
| 版本 | 说明 |
|------|------|
| v4.0.0-beta | 27 模块全量实现,架构决策落地(主键自增、中间件链、筛选三件套定稿) |
| v4.0.0-alpha | 项目初始化:GoFrame 骨架 + 核心模块(auth/user/role/menu)+ 前端工程搭建 |
### 修复
## 破坏性变更记录
- 富文本还原散落的字符串替换统一收敛到 ExpandContentFields 唯一出口,[IMG_URL] 占位符不再被业务代码旁路解析
::: warning 变更须知
+ 2026-10-13:主键策略由雪花算法改为数据库自增——历史数据的 id 语义不变,但新增代码禁止依赖 `utility/id`(包已删除)。
+ URL 全部去版本段——`/api/v1/*` 形式的旧链接失效,前端 baseURL 为 `/api`。
+ 前端登录响应字段为 `access_token/refresh_token/expires_in/token_type`(下划线),与全局驼峰约定不同,这是 OAuth2 惯例,禁止"修正"。
:::
## [3.9.0] - 2026-09-07
**OAuth2 令牌治理收口。**
### 新增
- **令牌刷新**:/oauth2/token 持 refresh_token 轮换新令牌,旧 jti 即时拉黑
- **令牌检测**:/oauth2/check/token 校验有效性
- **令牌吊销**:/oauth2/remove/:token 指定令牌即时失效
### 优化
- 前端令牌刷新链路统一对接 OAuth2 路由;登录响应保持 OAuth2 惯例字段(access_token / refresh_token / expires_in / token_type)
## [3.8.0] - 2026-07-26
**安全加固与防护增强。**
### 新增
- **接口限流**:固定窗口限流中间件,登录/验证码入口独立更严阈值(authLimit),计数经共享缓存多实例一致
- **受信代理**:api.proxyIps(支持 CIDR)内的代理才信任 X-Forwarded-For 首段 / X-Real-IP
- **演示模式白名单精细化**:公开路径与读操作精确放行,写操作统一拦截提示
- **健康检查**:/api/health 公开探测接口
### 优化
- 限流仅作用于 /api/ 路径,静态资源与文档页不受影响
## [3.7.0] - 2026-06-13
**五方言驱动与整库迁移能力建成。**
### 新增
- **五方言驱动**:MySQL / PostgreSQL / SQL Server / Oracle / SQLite 运行时切换,改配置 type/link 即换库
- **五份方言 DDL**:resource/sql 定稿,与 MySQL 基准逐表对齐
- **整库迁移器**:源库内省 → 中间表示 → 方言 DDL 渲染 → 分批搬运 → pgsql 序列修复,行数校验闭环
- **迁移 CLI**:源/目标连接参数、-drop-target-first 清空目标、-dry-run 预演
## [3.6.0] - 2026-05-01
**代码生成器上线,模块产出工业化。**
### 新增
- **双入口**:HTTP 页面与 CLI(-tables / -preview / -batch)
- **产出**:后端八件套(api/controller/logic/service + dao/index、dao/internal、entity、do)与前端页面五件
- **幂等副作用**:同步创建菜单、权限节点、字典数据与路由注册
- **字典自动创建**:按列注释枚举解析(支持 `1-正常` 与 `1=正常` 两种写法)
- **覆盖保护**:缺失补生成、存在跳过,generator.overwrite 开启才覆盖
### 优化
- 生成代码统一 gofmt;前端模板以 [[]] 定界,规避 Vue 插值冲突
## [3.5.0] - 2026-03-21
**运行监控体系上线。**
### 新增
- **服务器监控**:运行时、内存、磁盘分平台采集,MySQL / Redis 连通检测
- **缓存监控**:Redis INFO 解析展示,内存降级模式标识(mode=memory)
- **监控接口**:/server/info、/cache/info,配合在线用户列表运行状态一目了然
## [3.4.0] - 2026-02-05
**内置任务与在线用户治理。**
### 新增
- **LogClean 内置任务**:每日 02:30 分批物理清理三张日志表(保留天数默认 90,任务参数可覆盖)
- **在线用户模块**:登录登记 / 登出注销,在线列表与强制踢出(jti 拉黑防刷新复活)
### 优化
- CleanTemp 临时目录清理纳入调度统一管理(每日 03:30 触发)
- 调度消费约定完善:同步/异步标记与三种执行策略协同
## [3.3.0] - 2025-12-24
**数据驱动的定时任务调度系统。**
### 新增
- **常驻调度器**:启动加载启用任务,Cron 表达式触发
- **双执行形态**:HTTP 接口任务与本地处理器任务
- **三种执行策略**:并行 / 单例 / 放弃,单例与放弃叠加多实例执行锁(job:lock:{id},共享缓存 SET NX、300s 兜底)
- **任务日志**:执行时间、状态、耗时、错误详情完整留档
- **任务操作**:立即执行、暂停、恢复、状态设置、调度器状态查询
## [3.2.0] - 2025-11-11
**角色数据权限四档上线。**
### 新增
- **data_scope 四档**:全部 / 本部门及以下 / 本部门 / 仅本人
- **一行接线**:ApplyDataScope("dept_id") 声明即生效,作用于分页/列表/导出
- **身份缓存**:300s 缓存含数据范围与部门,多角色取最宽松档位,角色变更主动失效
### 修复
- 未分配部门用户在"本部门"档位越权可见——身份加载层降级为仅本人
## [3.1.0] - 2025-09-29
**租户治理与状态校验完善。**
### 新增
- **状态/过期校验**:中间件拦截(60s 缓存),禁用与过期租户拒绝访问
- **租户用户查询**:按租户维度检索用户列表
- **平台数据绕过**:超管与租户级表中的平台数据(tenant_id=0)自动放行
- **租户内分组唯一**:手机号/用户名等唯一性走分组唯一索引
## [3.0.0] - 2025-08-18
**多租户架构与数据隔离建成,SaaS 能力就绪。**
### 新增
- **全局钩子横切**:审计字段盖章、软删改写、租户隔离统一在 gdb 模型钩子层完成,dao.Ctx 是唯一查询入口
- **9 张租户级表自动隔离**:Insert 自动填充 tenant_id 与审计字段,Select 自动附加 del_flag 与租户条件
- **租户管理模块**:租户 CRUD、用户数统计
- **事务化开户**:租户与初始管理员同一事务创建(code = T + 4 位 ID)
- **用户上限**:tenant.max_user_num 校验,超限拒绝开户
### 优化
- 业务代码零侵入:不手写一行 del_flag / tenant_id 条件,横切逻辑全部下沉钩子层
## [2.9.0] - 2025-07-06
**共享能力层沉淀,横切逻辑收口。**
### 新增
- **base.go 共享能力层**:文件字段、富文本、枚举文本、唯一校验、事务、分块查询、树、临时清理八类横切能力统一沉淀
- **CheckUnique 唯一性预检**:UX 快速报错,并发真值由数据库 uk_* 唯一索引兜底
- **WithTrans 事务包裹**:错误自动回滚,事务内禁 HTTP/文件 IO,bcrypt 预计算
- **BuildTree 泛型树**:平铺数据转树形,叶子 Children 预置空数组
### 优化
- 共享层导出函数上限 15 个,超出按能力拆分子包,防止能力层膨胀
## [2.8.0] - 2025-05-24
**工具模块与标准示范补齐。**
### 新增
- **example 案例模块**:完整示范七件套 + 导入导出 + 字典文本 + 文件字段的标准写法
- **文件模板管理模块**:模板上传维护,按编码取用(getTemplateByCode)
- **upload 上传模块**:统一上传入口与返回 URL 约定
## [2.7.0] - 2025-04-12
**数据导入导出能力建成。**
### 新增
- **Excel 导入**:excelize 驱动,表头映射导入,空行自动过滤
- **Excel 导出**:标准化导出与文件下载,user / level / example 模块启用
- **大数据量分批导出**:ChunkQuery 分批查询(默认 500 条/页)防内存溢出
- **前端 xlsx 组件**:导入向导与导出按钮统一封装
### 修复
- 富文本跨域名图片占位符替换不完整
## [2.6.0] - 2025-03-01
**文件上传体系与富文本持久化契约。**
### 新增
- **两段式上传**:先落 temp 临时目录(扩展名白名单、单文件大小上限、图片魔数嗅探),表单保存时转正到按日期分子目录的正式位置
- **文件字段统一处理**:SaveFileField / SaveFileFields / SaveMultiFileField,批量转正与 URL 补全
- **富文本占位符契约**:入库 [IMG_URL] 占位、出库统一还原(LocalizeContentFields / ExpandContentFields 唯一出口),外站 URL 不处理规避 SSRF
- **SVG 安全加固**:.svg 响应强制 attachment + nosniff,防存储型 XSS
- **临时目录自动清理**:每日 03:30 清理超期 temp 日期目录(file.tempExpireDays 控制保留天数)
### 优化
- /upload/** 静态访问由 SetServerRoot("resource") 统一提供,上传目录按日期分子目录
## [2.5.0] - 2025-01-17
**内容管理与行政区划能力就绪。**
### 新增
- **文章与分类**:文章 CRUD(封面、图集、状态、点击量),分类树形无限级嵌套
- **通知公告**:类型、发布状态、富文本内容
- **友情链接**:图标、描述、启用/禁用
- **行政区划**:省市县三级数据与树形查询,ResolveCityNames / ResolveCityCodes 编解码(用户模块地址字段接入)
### 优化
- 富文本编辑器全站统一接入;列表状态筛选与模糊搜索标准化
## [2.4.0] - 2024-12-05
**字典、配置与参数三件套,基础数据标准化。**
### 新增
- **字典管理**:字典与字典项两级维护,枚举显示名经 {field}Text 字典驱动(唯一真相,进程内缓存 300s)
- **字典前端消费**:登录即可的查询接口与字典组件,下拉/徽标数据源统一
- **配置管理**:配置与配置项两级维护,站点设置页一键读取与保存
- **参数管理**:系统参数分类维护,请求级缓存
- **字典缓存刷新**:refreshCache 接口即时生效
## [2.3.0] - 2024-10-23
**操作审计与日志查询上线。**
### 新增
- **操作日志中间件**:异步批量落库(100 条或 1 秒刷盘),password/salt 脱敏、响应截断、耗时与状态记录,失败降级日志、不阻塞业务
- **日志类型体系**:新增/修改/删除/查询/导入/导出等 40+ 类型常量,logType 字符串声明驱动
- **日志查询模块**:操作日志/登录日志分页、详情、软删与批量删除
- **IP 归属地**:ip2region(xdb)自动填充归属地字段
### 优化
- 密码类字段响应自动剔除,日志参数统一脱敏
## [2.2.0] - 2024-09-10
**组织架构与个人中心完善。**
### 新增
- **部门/职级/岗位三模块**:部门树形无限级(parent_id 自关联)
- **树形接口约定**:叶子节点 Children 预置空数组,前端免判空
- **个人中心**:获取用户信息与菜单、修改密码(旧密码校验)、更新资料与头像
- 用户列表按部门/角色筛选,禁止删除有子部门/用户的部门
## [2.1.0] - 2024-07-29
**用户、角色与菜单权限体系落地。**
### 新增
- **用户/角色/菜单三模块**:标准七件套(分页/列表/详情/新增/修改/删除/批量删除)
- **RBAC 权限模型**:用户 → 角色 → 菜单权限节点(目录/菜单/按钮三级),按钮级控制
- **超级管理员**:通配权限 *:*:*,权限校验单点入口
- **角色保存权限**:重写角色-菜单关联并即时刷新缓存
- **用户扩展**:重置密码、用户-角色多角色分配、用户名/手机号唯一校验
- **gmeta 标签声明**:路由与权限经标签声明,包装层每请求判定
- 前端用户/角色/菜单管理页,权限指令控制按钮可见性
## [2.0.0] - 2024-06-16
**工程奠基版本:前后端分离骨架与认证闭环建立。**
### 新增
- **后端分层骨架**:api / controller / logic / service 四层 + dao/entity/do 数据访问链路,统一响应信封(code/msg/data)与 PageData 分页
- **建表约定**:goframe_ 表前缀、del_flag 软删列、审计字段(create_user/create_time/update_user/update_time)
- **登录认证**:用户名密码 + 图形验证码(TTF 渲染 + SVG 降级)
- **JWT 双令牌**:access 2 小时 + refresh 7 天,刷新轮换、旧 jti 拉黑防刷新复活
- **密码安全**:bcrypt 双重加盐加密
- **登录日志**:成功/失败/退出全记录(IP、浏览器、耗时、失败原因)
- **中间件链雏形**:CORS → Response → JWT → Demo 演示模式拦截
- **前端工程**:Vite + Vue3 + TypeScript + Pinia + ElementPlus,登录页、主布局、axios 封装与动态路由守卫
@@ -85,7 +85,7 @@ data = append(data, []any{
编码规范:{模块snake}_{字段snake}(user_status / job_execute_policy / example_status)
公共字典:role_data_scope(数据范围)等不带模块前缀
例外:operation_log.type 存注解常量值(0-40/99),用静态表 LogTypeText
例外:operation_log.type 存标签常量值(0-40/99),用静态表 LogTypeText
(consts.LogTypeNames),不走字典——数值与 gmeta logType 绑定,改动会破坏存量日志
```
@@ -1,7 +1,7 @@
# 5.18 gmeta 注解系统总览
# 5.18 gmeta 标签系统总览
:::tip 概述
gmeta 注解是本项目的"声明即事实"机制:请求结构体上的一个 gmeta.Meta 标签同时驱动路由注册、权限校验、操作日志、OpenAPI 文档四件事。解析与分发在 internal/router/bind.go(反射绑定)与 meta/(路由元数据表)。
gmeta 标签是本项目的"声明即事实"机制:请求结构体上的一个 gmeta.Meta 标签同时驱动路由注册、权限校验、操作日志、OpenAPI 文档四件事。解析与分发在 internal/router/bind.go(反射绑定)与 meta/(路由元数据表)。
:::
## 一个标签,四份事实
@@ -41,7 +41,7 @@ CreateUser=ctx 用户名
37=归档 38=取消归档 39=绑定 40=解绑 99=其他
```
gmeta `logType` 字符串(query/add/update/delete/import/export/reset/…)经 LogTypeMap 转枚举;展示中文经 LogTypeNames(logic 的 LogTypeText)——**该字段不走字典**(数值与注解绑定,改动破坏存量日志)。
gmeta `logType` 字符串(query/add/update/delete/import/export/reset/…)经 LogTypeMap 转枚举;展示中文经 LogTypeNames(logic 的 LogTypeText)——**该字段不走字典**(数值与标签绑定,改动破坏存量日志)。
## 开关与配置
@@ -66,7 +66,7 @@ panic 兜底 + errorStack=false(生产减少堆栈序列化开销)
assets 长缓存(带 content hash)
运行:
列表虚拟滚动(超大列表场景,Element Plus virtualized)
列表虚拟滚动(超大列表场景,ElementPlus virtualized)
图片懒加载/压缩(上传侧控制尺寸)
keep-alive 控制缓存页面数量(内存 vs 体验平衡)
```
+2 -2
View File
@@ -41,7 +41,7 @@
│ ├── Dockerfile # 多阶段构建:静态编译 → alpine 运行(非 root + HEALTHCHECK)
│ ├── docker-compose.yml # 三服务编排:后端 + MySQL8 + Redis7(GF_ 注入配置)
│ └── .env.example # compose 变量模板(复制为 .env,明文密钥不入库)
├── ui/ # 前端工程(Vue3 + Element Plus)
├── ui/ # 前端工程(Vue3 + ElementPlus)
├── document/ # 项目文档(五方言 SQL 脚本、架构定稿、wiki 等)
│ ├── mysql/ # MySQL 定稿 DDL(规范基准)
│ ├── postgresql/ # PostgreSQL 定稿 DDL
@@ -89,7 +89,7 @@ internal/
│ ├── do/ # 数据对象 DO(gf gen dao 产物)
│ └── hooks/ # 全局模型钩子(审计盖章/软删改写/租户隔离)
├── router/ # 路由注册(router.go)+ gmeta 反射绑定(bind.go)
│ └── meta/ # 路由元数据表(权限/日志注解即事实)
│ └── meta/ # 路由元数据表(权限/日志标签即事实)
├── service/ # 服务接口层(每模块一文件,手维护,勿运行 gf gen service)
└── task/ # 定时任务处理器(init 自注册到 logic.RegisterJobHandler)
├── task.go # 注册与参数辅助
@@ -52,7 +52,7 @@ ui/src/
│ │ ├── designSetting.ts projectSetting.ts lockscreen.ts ossConfig.ts
│ ├── mutation-types.ts # ACCESS_TOKEN 等存储键常量
│ ├── index.ts types.ts plugins/
├── styles/ # 全局样式与主题变量(Element Plus 变量覆盖)
├── styles/ # 全局样式与主题变量(ElementPlus 变量覆盖)
├── utils/
│ ├── http/axios/ # HTTP 封装(VAxios/transform/checkStatus…)
│ ├── auth.ts Storage.ts # 路径工具 / 本地存储封装
@@ -72,7 +72,7 @@ columns ← views/{域}/{模块}/columns.ts
## 开发规约
+ 列表列用 columns.ts 声明式配置(勿在模板里手写 el-table-column)
+ 复杂列用 render 函数(h + Element Plus 组件)
+ 复杂列用 render 函数(h + ElementPlus 组件)
+ 图片列 src 用后端 GetFileUrl 已补域名的字段(勿手拼)
+ 枚举列展示 {field}Text(勿硬编码映射)
+ 操作列按钮逐个加 v-permission(对齐 gmeta permission)
@@ -1,7 +1,7 @@
# 9.1 前端工程概述
:::tip 概述
前端为 Vue3 + TypeScript + Vite + Element Plus + Pinia 的标准工程化项目(ui/ 目录),采用 Composition API,核心机制为:动态菜单路由、指令级权限、三件套页面规范(api/columns/querySchemas)、统一封装的 axios。
前端为 Vue3 + TypeScript + Vite + ElementPlus + Pinia 的标准工程化项目(ui/ 目录),采用 Composition API,核心机制为:动态菜单路由、指令级权限、三件套页面规范(api/columns/querySchemas)、统一封装的 axios。
:::
## 技术栈
@@ -11,7 +11,7 @@
| Vue | ^3.4.27 | 核心框架(Composition API) |
| TypeScript | ^5.x | 类型系统 |
| Vite | ^5.x | 构建(多环境模式 dev/test/uat/prod) |
| Element Plus | ^2.7.4 | UI 组件库 |
| ElementPlus | ^2.7.4 | UI 组件库 |
| Pinia | ^2.1.7 | 状态管理 |
| Vue Router | ^4.3.2 | 路由(常量路由 + 动态菜单路由) |
| axios | ^0.27.2 | HTTP(封装于 utils/http/axios,VAxios 类) |
@@ -1,7 +1,7 @@
# 9.14 样式与主题定制
:::tip 概述
样式体系基于 Element Plus CSS 变量 + styles/ 全局覆盖:主题色、暗黑模式、水印、动画等经 designSetting/projectSetting 在线配置。定制优先走变量覆盖而非逐组件覆盖。
样式体系基于 ElementPlus CSS 变量 + styles/ 全局覆盖:主题色、暗黑模式、水印、动画等经 designSetting/projectSetting 在线配置。定制优先走变量覆盖而非逐组件覆盖。
:::
## 样式目录(src/styles/)
@@ -10,22 +10,22 @@
styles/
├── index.less / index.scss 入口样式
├── variables.* SCSS/Less 变量
├── element/ Element Plus 变量覆盖
├── element/ ElementPlus 变量覆盖
├── public/ 公共样式
└── ...
```
main.ts 引入顺序:Element Plus 样式 → 变量覆盖 → 全局样式(覆盖生效)。
main.ts 引入顺序:ElementPlus 样式 → 变量覆盖 → 全局样式(覆盖生效)。
## 主题定制机制
```text
Element Plus 暴露 CSS 变量(--el-color-primary 等):
ElementPlus 暴露 CSS 变量(--el-color-primary 等):
styles/ 覆盖变量根值 → 全组件生效
运行时主题切换(designSetting store):
主题色在线更换 → 动态更新 CSS 变量 / 主题类名
暗黑模式:html 挂 dark 类 → Element Plus dark 变量集
暗黑模式:html 挂 dark 类 → ElementPlus dark 变量集
灰度/色弱:filter 类名
```
@@ -50,7 +50,7 @@ designSetting 开关 + 文案 → 布局层渲染水印(canvas/css)
## 页面样式规约
```text
1. 优先用 Element Plus 组件与 CSS 变量(勿直接写死颜色值)
1. 优先用 ElementPlus 组件与 CSS 变量(勿直接写死颜色值)
2. 页面 scoped 样式(<style scoped>);跨页公共样式进 styles/public
3. 主题相关颜色用 var(--el-color-*)(随主题切换自动适配)
4. 少用 deep 选择器覆盖(Element 升级易碎);确需覆盖集中在 element/ 目录
@@ -8,7 +8,7 @@
| 文件 | 行数规模 | 职责 |
|------|---------|------|
| `api/v1/example.go` | ~200 行 | 全部 Req/Res + gmeta 注解 |
| `api/v1/example.go` | ~200 行 | 全部 Req/Res + gmeta 标签 |
| `internal/controller/example.go` | ~90 行 | 薄层透传 |
| `internal/service/example.go` | ~75 行 | 手维护接口三件套 |
| `internal/logic/example.go` | ~200 行 | ModuleSpec 声明 + 委托 + 扩展方法 |
@@ -96,4 +96,4 @@ func (c *CXxx) 方法名(ctx context.Context, req *v1.XxxReq) (res *v1.XxxRes, e
| `CUpload` | multipart 上传(`*ghttp.UploadFile` + `p:"file"` 标签) |
| `CGenerator` | 工具类,Preview/Generate/BatchGenerate |
控制器不区分"标准/特殊"写法——统一薄层透传,差异全部体现在请求结构体的 gmeta 注解上。
控制器不区分"标准/特殊"写法——统一薄层透传,差异全部体现在请求结构体的 gmeta 标签上。
@@ -11,7 +11,7 @@
```text
1. 设计符合项目规范的业务表(统一审计列 / del_flag / uk_* 唯一索引 / 注释枚举)
2. 产出并理解 dao/entity/do 四件(gf gen dao 或生成器)
3. 编写 api/v1 请求响应结构体与 gmeta 注解(权限/日志/OpenAPI 一体)
3. 编写 api/v1 请求响应结构体与 gmeta 标签(权限/日志/OpenAPI 一体)
4. 用 ModuleSpec 声明式基座实现逻辑层(筛选/字典/文件字段/钩子)
5. 完成薄层控制器 + 手维护 service 接口 + 路由注册
6. 配置权限节点并完成前端 querySchemas/columns/api 三件套联调
@@ -35,7 +35,7 @@
○ internal/dao/internal/example.go dao 内部实现(勿手改)
○ internal/model/entity/example.go 实体
○ internal/model/do/example.go 数据对象 DO
★ api/v1/example.go 全部 Req/Res 结构体 + gmeta 注解
★ api/v1/example.go 全部 Req/Res 结构体 + gmeta 标签
★ internal/controller/example.go 薄层控制器(转发 service)
★ internal/service/example.go 手维护接口 + Register + 取用函数
★ internal/logic/example.go 业务实现(ModuleSpec 声明 + 方法委托)
@@ -1,7 +1,7 @@
# 3.7 服务注册与路由
:::tip 概述
本项目没有传统的路由表文件逐条登记——路由由 Bind 反射绑定从 gmeta 注解自动生成。手工需要维护的只有两处:service 接口文件(手维护)和 router.go 的一行 Bind 注册(生成器自动写入)。
本项目没有传统的路由表文件逐条登记——路由由 Bind 反射绑定从 gmeta 标签自动生成。手工需要维护的只有两处:service 接口文件(手维护)和 router.go 的一行 Bind 注册(生成器自动写入)。
:::
## service 接口文件(手维护,真实代码摘自 internal/service/example.go)
@@ -95,7 +95,7 @@ Bind(s, new(controller.CXxx)) 对每个导出方法:
→ 调用业务方法 → response.Ok/Fail 信封写出
```
::: tip 注解即事实
::: tip 标签即事实
权限校验与操作日志共用同一份路由元数据(meta 表),gmeta 标签是唯一真相。不存在"代码改了忘改路由表/权限表"的可能。
:::
+109 -12
View File
@@ -1,14 +1,14 @@
# 1.1 项目介绍
:::tip 概述
EasyGoAdmin 是企业级多租户后台管理基座,后端基于 GoFrame v2 框架,前端基于 Vue3 + Element Plus,完全前后端分离架构。内置完善的 RBAC 权限体系(权限颗粒度精细至按钮级别)、多租户数据隔离、角色行级数据权限,预置用户、角色、菜单、部门、岗位、职级、日志、字典、配置、参数、定时任务、代码生成器等基础功能模块,开箱即用。
EasyGoAdmin 是企业级多租户后台管理基座,后端基于 GoFrame v2 框架,前端基于 Vue3 + ElementPlus,完全前后端分离架构。内置完善的 RBAC 权限体系(权限颗粒度精细至按钮级别)、多租户数据隔离、角色行级数据权限,预置用户、角色、菜单、部门、岗位、职级、日志、字典、配置、参数、定时任务、代码生成器等基础功能模块,开箱即用。
:::
## 软件说明
基于 Go 1.27、GoFrame v2.10、Vue3、TypeScript、Vite、ElementPlus 等技术栈构建的企业级前后端分离后台管理系统,支持 MySQL、PostgreSQL、SQL Server、Oracle、SQLite 五种数据库,通过配置文件一键切换,并内置五方言整库迁移工具。
后端采用 Go 语言,基于 GoFrame v2 框架、gdb 数据库操作、gmeta 反射注解等主流技术栈;前端基于 Vue3、TypeScript、Vite 构建,采用 ElementPlus 框架,遵循前后端分离主流设计思想。
后端采用 Go 语言,基于 GoFrame v2 框架、gdb 数据库操作、gmeta 反射标签等主流技术栈;前端基于 Vue3、TypeScript、Vite 构建,采用 ElementPlus 框架,遵循前后端分离主流设计思想。
系统采用完全前后端分离架构,前端通过 API 调用后端服务实现数据交互。25 张业务表落地 27 个业务模块,全部平铺实现(auth/index + system7 + data7 + content3 + monitor7 + tool4)。
@@ -55,17 +55,114 @@ EasyGoAdmin 是企业级多租户后台管理基座,后端基于 GoFrame v2
## 软件出处
+ 软件名称:EasyGoAdmin 前后端分离 GoFrame+ElementPlus 版本
+ 软件名称:EasyGoAdmin前后端分离GoFrame+ElementPlus版本
+ 软件作者:@小蚂蚁云团队
+ 软件协议:Apache-2.0
+ 官网网址:[https://www.easygoadmin.vip](https://www.easygoadmin.vip)
+ Gitee 仓库:[https://gitee.com/easygoadmin/EasyGoAdmin_GoFrame_EleVue](https://gitee.com/easygoadmin/EasyGoAdmin_GoFrame_EleVue)
+ 文档网址:[http://docs.goframe.elevue.easygoadmin.vip](http://docs.goframe.elevue.easygoadmin.vip/)
+ 文档网址:[http://docs.goframe.elevue.easygoadmin.vip](http://docs.goframe.elevue.easygoadmin.vip)
+ 演示地址:[http://manage.goframe.elevue.easygoadmin.vip](http://manage.goframe.elevue.easygoadmin.vip)
## 适用场景
## 软件版本
| 场景 | 说明 |
|------|------|
| 企业内部管理系统 | RBAC 权限 + 部门树 + 数据权限,完整的组织架构管控 |
| 多租户 SaaS 平台 | 租户隔离 + 开户事务 + 租户用户上限 + 过期管理 |
| 快速交付项目底座 | 代码生成器一键产出 CRUD 全套代码,分钟级搭建业务模块 |
| 多数据库历史项目 | 五方言支持 + 整库迁移器,跨库迁移有实测记录 |
| 版本名称 | 说明 | 地址 |
|:---------|:-----|:-----|
| GoFrame+Layui混编版 | 基于 GoFrame、Layui 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_GoFrame_Layui) |
| GoFrame+ElementPlus前后端分离版 | 基于 GoFrame v2、Vue3、ElementPlus 等技术栈(当前版本)| [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_GoFrame_EleVue) |
| GoFrame+AntDesign前后端分离版 | 基于 GoFrame、Vue3、AntDesign 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_GoFrame_AntdVue) |
| GoFrame+NaiveUI前后端分离版 | 基于 GoFrame、Vue3、NaiveUI 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_GoFrame_NaiveVue) |
| Gin+Layui混编版 | 基于 Gin、Layui 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_Gin_Layui) |
| Gin+ElementPlus前后端分离版 | 基于 Gin、Vue3、ElementPlus 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_Gin_EleVue) |
| Gin+AntDesign前后端分离版 | 基于 Gin、Vue3、AntDesign 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_Gin_AntdVue) |
| Gin+NaiveUI前后端分离版 | 基于 Gin、Vue3、NaiveUI 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_Gin_NaiveVue) |
| Beego+Layui混编版 | 基于 Beego、Layui 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_Beego_Layui) |
| Beego+ElementPlus前后端分离版 | 基于 Beego、Vue3、ElementPlus 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_Beego_EleVue) |
| Beego+AntDesign前后端分离版 | 基于 Beego、Vue3、AntDesign 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_Beego_AntdVue) |
| Beego+NaiveUI前后端分离版 | 基于 Beego、Vue3、NaiveUI 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_Beego_NaiveVue) |
| Iris+Layui混编版 | 基于 Iris、Layui 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_Iris_Layui) |
| Iris+ElementPlus前后端分离版 | 基于 Iris、Vue3、ElementPlus 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_Iris_EleVue) |
| Iris+AntDesign前后端分离版 | 基于 Iris、Vue3、AntDesign 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_Iris_AntdVue) |
| Iris+NaiveUI前后端分离版 | 基于 Iris、Vue3、NaiveUI 等技术栈 | [Gitee地址](https://gitee.com/easygoadmin/EasyGoAdmin_Iris_NaiveVue) |
## 模块展示
<table>
<tbody>
<tr>
<td><img src="/demo/1.png"/></td>
<td><img src="/demo/2.png"/></td>
</tr>
<tr>
<td><img src="/demo/3.png"/></td>
<td><img src="/demo/4.png"/></td>
</tr>
<tr>
<td><img src="/demo/5.png"/></td>
<td><img src="/demo/6.png"/></td>
</tr>
<tr>
<td><img src="/demo/7.png"/></td>
<td><img src="/demo/8.png"/></td>
</tr>
<tr>
<td><img src="/demo/9.png"/></td>
<td><img src="/demo/10.png"/></td>
</tr>
<tr>
<td><img src="/demo/11.png"/></td>
<td><img src="/demo/12.png"/></td>
</tr>
<tr>
<td><img src="/demo/13.png"/></td>
<td><img src="/demo/14.png"/></td>
</tr>
<tr>
<td><img src="/demo/15.png"/></td>
<td><img src="/demo/16.png"/></td>
</tr>
<tr>
<td><img src="/demo/17.png"/></td>
<td><img src="/demo/18.png"/></td>
</tr>
<tr>
<td><img src="/demo/19.png"/></td>
<td><img src="/demo/20.png"/></td>
</tr>
<tr>
<td><img src="/demo/21.png"/></td>
<td><img src="/demo/22.png"/></td>
</tr>
<tr>
<td><img src="/demo/23.png"/></td>
<td><img src="/demo/24.png"/></td>
</tr>
<tr>
<td><img src="/demo/25.png"/></td>
<td><img src="/demo/26.png"/></td>
</tr>
<tr>
<td><img src="/demo/27.png"/></td>
<td><img src="/demo/28.png"/></td>
</tr>
<tr>
<td><img src="/demo/29.png"/></td>
<td><img src="/demo/30.png"/></td>
</tr>
<tr>
<td><img src="/demo/31.png"/></td>
<td><img src="/demo/32.png"/></td>
</tr>
<tr>
<td><img src="/demo/33.png"/></td>
<td><img src="/demo/34.png"/></td>
</tr>
</tbody>
</table>
## 开源协议
开源软件遵循 [Apache 2.0 协议](https://www.apache.org/licenses/LICENSE-2.0.html)。
允许商业使用,但务必保留包括但不限于开源团队、软件作者、版权说明等信息。
## 版权信息
版权所有 Copyright © 2026 [www.easygoadmin.vip](https://www.easygoadmin.vip) All rights reserved。
@@ -27,7 +27,7 @@
## 第三方依赖
```text
本软件依赖众多开源组件(GoFrame、Element Plus、Excelize、golang-jwt 等),
本软件依赖众多开源组件(GoFrame、ElementPlus、Excelize、golang-jwt 等),
各依赖遵循其自身的开源协议。依赖的安全漏洞修复随版本演进提供,
但及时升级由使用方决策。
```
@@ -7,7 +7,7 @@
## 为什么赞助
```text
+ 持续维护:跟进 GoFrame/Vue/Element Plus 生态升级与安全补丁
+ 持续维护:跟进 GoFrame/Vue/ElementPlus 生态升级与安全补丁
+ 文档完善:保持文档与代码同步(本套 145 页开发者文档的编写与维护)
+ 特性演进:多实例能力增强、导出增强、数据权限扩展档等规划项
+ Issue 优先响应:赞助者问题优先排期
@@ -71,7 +71,7 @@ curl http://127.0.0.1:8000/api/user/page?pageNo=1&pageSize=3 \
| `http://127.0.0.1:8000/swagger` | 本地托管 Redoc UI(免登录) |
| `http://127.0.0.1:8000/api.json` | 原生 OpenAPI JSON(gmeta 补注册生成) |
gmeta 注解(method/path/summary/permission)会完整体现在文档中,接口与文档天然同步。
gmeta 标签(method/path/summary/permission)会完整体现在文档中,接口与文档天然同步。
## 响应信封约定
@@ -1,7 +1,7 @@
# 2.3 前端服务启动
:::tip 概述
前端为 Vue3 + TypeScript + Vite + Element Plus 工程(`ui/` 目录),通过 pnpm 安装依赖后一条命令启动开发服务器,接口代理指向后端 `:8000`。
前端为 Vue3 + TypeScript + Vite + ElementPlus 工程(`ui/` 目录),通过 pnpm 安装依赖后一条命令启动开发服务器,接口代理指向后端 `:8000`。
:::
## 安装依赖
@@ -20,7 +20,7 @@
```text
□ 列表用 Page 容器 + Table(columns 配置) + pagination
□ 复杂列用 render 函数(h + Element Plus 组件)
□ 复杂列用 render 函数(h + ElementPlus 组件)
□ 筛选用 querySchemas 配置(勿手写搜索区)
□ 下拉选项优先字典驱动(getDictItemList)
□ 上传用 Upload 组件(持 URL,后端转正)
@@ -1,7 +1,7 @@
# 1.5 技术栈说明
:::tip 概述
本项目以后端 GoFrame v2 + 前端 Vue3/Element Plus 为核心,全部依赖选型遵循"主流、稳定、长期维护"原则。本页给出完整的技术栈清单与关键依赖版本。
本项目以后端 GoFrame v2 + 前端 Vue3/ElementPlus 为核心,全部依赖选型遵循"主流、稳定、长期维护"原则。本页给出完整的技术栈清单与关键依赖版本。
:::
## 后端技术栈
@@ -29,7 +29,7 @@
| Vue | ^3.4.27 | 核心框架(Composition API) |
| TypeScript | ^5.x | 类型系统 |
| Vite | ^5.x | 构建工具(多环境模式) |
| Element Plus | ^2.7.4 | UI 组件库 |
| ElementPlus | ^2.7.4 | UI 组件库 |
| Pinia | ^2.1.7 | 状态管理 |
| Vue Router | ^4.3.2 | 路由(常量路由 + 动态菜单路由) |
| axios | ^0.27.2 | HTTP 客户端(封装于 utils/http) |
@@ -58,7 +58,7 @@
## 架构模式一览
```text
后端: 分层架构 + 声明式基座 + 全局钩子横切 + gmeta 反射注解
后端: 分层架构 + 声明式基座 + 全局钩子横切 + gmeta 反射标签
前端: 组合式 API + 动态路由 + 指令级权限 + querySchemas 声明式筛选
通信: RESTful JSON + JWT Bearer + 统一响应信封
(公开路由例外:/api/login、/api/captcha、/api/oauth2/token、/api/health 不带版本段)
+12 -13
View File
@@ -8,7 +8,7 @@
### 1. Go 语言高性能后端
基于 GoFrame v2 企业级框架,原生并发能力 + 静态编译单文件部署。中间件链、泛型基座、反射注解均以 Go 惯用法实现,无 PHP/Java 式框架侵入。
基于 GoFrame v2 企业级框架,原生并发能力 + 静态编译单文件部署。中间件链、泛型基座、元数据标签均以 Go 惯用法实现,开箱即用、无框架侵入。
```text
go build -o bin/admin-server.exe main.go # 单文件产物
@@ -29,7 +29,7 @@ func (s *sJob) Page(ctx context.Context, req *v1.JobPageReq) (*v1.JobPageRes, er
差异进声明与钩子,写不进钩子就手写(合法逃生舱),基座永不出现"按模块分支"的代码。
### 3. gmeta 注解即事实
### 3. gmeta 标签即事实
请求结构体上的一个 gmeta 标签同时驱动四件事:路由注册、权限校验、操作日志、OpenAPI 文档。杜绝"代码、路由表、权限表、文档"四处不一致的行业顽疾。
@@ -52,16 +52,15 @@ gmeta.Meta `method:"get" path:"/api/user/page" summary:"用户分页"
## 与常见方案的对比
| 维度 | EasyGoAdmin(GoFrame) | 传统 PHP 后台 | 通用 Go Admin 项目 |
|------|----------------------|--------------|-------------------|
| 部署形态 | 单二进制文件 | 运行时 + 依赖目录 | 单二进制文件 |
| CRUD 开发量 | 声明式基座 + 生成器 | 基类继承 + 手写 | 多数需手写 |
| 注解体系 | gmeta 反射(路由/权限/日志/OpenAPI 一体) | Attribute 注解 | 通常仅路由 |
| 多租户 | 全局钩子自动隔离,9 张租户级表 | 基类手动处理 | 需自行集成 |
| 数据权限 | 四档角色数据权限,一行声明接线 | 通常无或插件 | 部分支持 |
| 多数据库 | 五方言 + 整库迁移器 | 通常 MySQL 为主 | 多数 1-2 种 |
| 限流防护 | 固定窗口 + 认证入口独立阈值 + 受信代理 | 通常依赖扩展 | 部分支持 |
| 在线用户 | 双令牌拉黑强退,防刷新复活 | Session 方案 | 部分支持 |
| 维度 | EasyGoAdmin(GoFrame) | 通用 Go Admin 项目 |
|------|----------------------|-------------------|
| CRUD 开发量 | 声明式基座 + 生成器 | 多数需手写 |
| 元数据体系 | gmeta 反射(路由/权限/日志/OpenAPI 一体) | 通常仅路由 |
| 多租户 | 全局钩子自动隔离,9 张租户级表 | 需自行集成 |
| 数据权限 | 四档角色数据权限,一行声明接线 | 部分支持 |
| 多数据库 | 五方言 + 整库迁移器 | 多数 1-2 种 |
| 限流防护 | 固定窗口 + 认证入口独立阈值 + 受信代理 | 部分支持 |
| 在线用户 | 双令牌拉黑强退,防刷新复活 | 部分支持 |
## 工程纪律保障
@@ -77,4 +76,4 @@ gmeta.Meta `method:"get" path:"/api/user/page" summary:"用户分页"
+ 需要快速交付的软件公司:生成器 + 基座把 CRUD 开发压缩到分钟级
+ 有 SaaS 需求的创业团队:租户隔离 + 开户事务 + 用户上限开箱即用
+ 学习 Go 企业级开发的团队:分层、钩子、泛型、反射注解的真实工程样本
+ 学习 Go 企业级开发的团队:分层、钩子、泛型、反射标签的真实工程样本