签入版本
This commit is contained in:
@@ -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 |
|
||||
|
||||
@@ -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 绑定,改动会破坏存量日志
|
||||
```
|
||||
|
||||
|
||||
+2
-2
@@ -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 体验平衡)
|
||||
```
|
||||
|
||||
@@ -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 标签是唯一真相。不存在"代码改了忘改路由表/权限表"的可能。
|
||||
:::
|
||||
|
||||
|
||||
@@ -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 不带版本段)
|
||||
|
||||
@@ -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 企业级开发的团队:分层、钩子、泛型、反射标签的真实工程样本
|
||||
|
||||
Reference in New Issue
Block a user