Skip to content

6.19 案例演示模块 ​

概述

案例演示模块(goframe_example,tool 域)是官方完整样板:七件套 + 状态切换 + Excel 导入导出 + 文件字段 + 字典填充,前端五件套齐备。第 3 章模块开发实战全程以它为参照。

接口清单 ​

text
七件套 + PUT /api/example/status(sys:example:status)
  + POST /api/example/import(sys:example:import)
  + GET  /api/example/export(sys:example:export)
sys:example:{page|list|detail|add|update|delete|batchDelete|status|import|export}

后端声明(真实代码,摘自 internal/logic/example.go) ​

go
// exampleSerializeMaps 枚举字段到字典编码的映射
// {field}Text 由基座自动填充
var exampleSerializeMaps = map[string]string{
	"status": "example_status",
}

// exampleSpec 案例演示模块声明
//
// 采用声明式实现:查询、输出与规则均在声明中定义,方法仅做委托
var exampleSpec = ModuleSpec[v1.ExampleItem, v1.ExampleItem, v1.ExampleDetailRes]{
	Model:         dao.Example.Ctx,
	LikeFields:    []string{"name"},
	EqFields:      []string{"type", "status"},
	OrderBy:       "sort, id",
	SerializeMaps: exampleSerializeMaps,
	FileFields: []string{
		"avatar",
	},
	FileSaveDir: "example",
	ToData:      exampleToData,
}

覆盖的基座能力:Like/Eq 筛选、默认排序、字典文本填充、单文件字段两段式、全量表单转换。

扩展方法(手写示范) ​

  • Status:非标准方法手写实现(dao 直接 Update 单列)
  • Import:excel.ReadSheet 逐行校验写入,返回成功/失败统计与逐行原因
  • Export:exampleSpec.applyFilters 与列表同套筛选 → DictGetText 枚举转文本 → excel.WriteSheet

完整代码见 3.10 完整代码清单。

前端五件套(ui/src/views/tool/example/) ​

文件职责
index.vue列表页(分页表格 + querySchemas 筛选 + 增删改入口)
edit.vue新增/编辑弹窗表单
detail.vue详情视图
columns.ts表格列配置(图片列 ElAvatar 渲染示范)
querySchemas.ts筛选表单配置(Input/Select 示范)

接口模块:ui/src/api/tool/example.ts(getExamplePage/exampleAdd…)。

学习路径建议 ​

text
1. 跑通页面:登录 → 工具 → 案例演示 → 增删改查/导入导出全流程点一遍
2. 对照后端:api/v1/example.go(gmeta+gvalid)→ logic/example.go(spec+委托)
   → controller/service(透传/接口)→ dao/example.go(钩子+Ctx)
3. 改一个字段:加 remark 列 → 四处补齐(3.3 改字段实战)
4. 仿写新模块:以 example 为骨架手动写一遍,或用生成器产出后对照差异

生成器视角 ​

example 也是生成器产物的示范形态(ModuleSpec 基座风格的完整可用实现)。生成器对含枚举注释/图片列的表会产出同样的模式:

sh
go run ./cmd/generator -tables "goframe_example|案例演示表"   # 产出与 example 同构的全套文件

小蚂蚁云团队 · 提供技术支持