81 lines
3.0 KiB
Markdown
81 lines
3.0 KiB
Markdown
# 6.19 案例演示模块
|
||
|
||
:::tip 概述
|
||
案例演示模块(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 完整代码清单](../guide/code-list)。
|
||
|
||
## 前端五件套(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 同构的全套文件
|
||
```
|