Documentation
¶
Overview ¶
Package frontendgen 从 OpenAPI 3.0 规范生成前端 CRUD 代码 (composable/hooks、列表页、编辑抽屉、路由、国际化), 支持 vue-element / vue-vben / react-antd 三种目标框架。
本包由 gowind-uiapp 的 TypeScript 生成器移植而来, 以 testdata/golden 黄金样本保证行为一致。
Index ¶
- Constants
- func ExtractModuleName(service *ParsedService) string
- func HasFullCrud(service *ParsedService) bool
- type CrudOperation
- type CrudPaths
- type FieldEntriesOptions
- type Framework
- type GeneratedFile
- type MethodEntry
- type OpenApiTag
- type Options
- type OrderedMap
- func BuildActionMessagesEnUS(modelName string) *OrderedMap
- func BuildActionMessagesZhCN(moduleDesc string) *OrderedMap
- func BuildButtonMessagesEnUS(moduleName string) *OrderedMap
- func BuildButtonMessagesZhCN(moduleDesc string) *OrderedMap
- func BuildFieldEntriesEnUS(fields []ParsedField, options *FieldEntriesOptions) *OrderedMap
- func BuildFieldEntriesZhCN(fields []ParsedField, options *FieldEntriesOptions) *OrderedMap
- func BuildStatusMapEnUS(enumValues []string) *OrderedMap
- func BuildStatusMapZhCN(enumValues []string) *OrderedMap
- func NewOrderedMap() *OrderedMap
- type ParsedField
- type ParsedOperation
- type ParsedService
- type PathEntry
- type Property
- type RouterModuleConfig
- type Schema
- type Spec
- type WriteResult
Constants ¶
const ( TypeComposable = "composable" // vue hooks 文件 TypeHooks = "hooks" // react hooks 文件 TypePage = "page" TypeDrawer = "drawer" TypeRouter = "router" TypeLocale = "locale" )
生成的文件类型
const ( ActionCreated = "created" ActionOverwrite = "overwritten" ActionMerged = "merged" ActionMergedNew = "merged-new" // 目标合并文件不存在,新建为独立片段文件 )
写盘动作
Variables ¶
This section is empty.
Functions ¶
func ExtractModuleName ¶
func ExtractModuleName(service *ParsedService) string
ExtractModuleName 从服务描述中提取模块中文名,如 "角色管理服务" -> "角色"
Types ¶
type CrudOperation ¶
type CrudOperation string
CrudOperation API 操作类型
const ( OpList CrudOperation = "list" OpGet CrudOperation = "get" OpCreate CrudOperation = "create" OpUpdate CrudOperation = "update" OpDelete CrudOperation = "delete" OpOther CrudOperation = "other" )
type CrudPaths ¶
type CrudPaths struct {
List *ParsedOperation
Get *ParsedOperation
Create *ParsedOperation
Update *ParsedOperation
Delete *ParsedOperation
}
CrudPaths 服务的主要 list/get/create/update/delete 操作(每类取首个)
func GetCrudPaths ¶
func GetCrudPaths(service *ParsedService) CrudPaths
GetCrudPaths 获取服务的主要 CRUD 路径
type FieldEntriesOptions ¶
type FieldEntriesOptions struct {
// SkipFields 要跳过的字段名列表(默认 ["id"])
SkipFields []string
// WithPlaceholder 生成 Placeholder 条目
WithPlaceholder bool
// WithRequired 生成 Required 校验提示条目
WithRequired bool
// SkipRequiredFields Required 跳过的字段名(默认 ["sortOrder","description","remark"])
SkipRequiredFields []string
}
FieldEntriesOptions 字段条目构建选项(nil 切片表示使用默认值)
type Framework ¶
type Framework string
Framework 目标前端框架
func ParseFramework ¶
ParseFramework 解析框架名(接受 vue-element/vue-vben/react-antd/react)
type GeneratedFile ¶
type GeneratedFile struct {
// Path 文件相对路径(相对前端项目 src 目录)
Path string `json:"path"`
// Content 文件内容
Content string `json:"content"`
// Description 文件描述
Description string `json:"description"`
// ServiceName 所属服务 tag 名
ServiceName string `json:"serviceName"`
// Type 文件类型(composable/hooks/page/drawer/router/locale)
Type string `json:"type"`
}
GeneratedFile 生成的文件
type MethodEntry ¶
type MethodEntry struct {
Method string // 小写 http 方法名
Tags []string
// Description 操作描述
Description string
// OperationID operationId
OperationID string
}
MethodEntry 路径下的 HTTP 方法与操作
type OpenApiTag ¶
OpenApiTag OpenAPI tag 定义
type Options ¶
type Options struct {
// Spec 已解析的 OpenAPI 规格(必填)
Spec *Spec
// Framework 目标框架(必填)
Framework Framework
// Tags 要生成的服务 tag 名列表;空 = 全部服务(按文档序)
Tags []string
// ServiceName 生成代码的服务名(默认 admin,用于 generated 导入路径)
ServiceName string
// ModulePathMap 文件名 -> 模块路径(如 role -> permission/role)
ModulePathMap map[string]string
// GenerateTypes 要生成的文件类型;空 = 全部类型
// vue 框架: composable/page/drawer/router/locale;react: hooks/page/drawer/router/locale
GenerateTypes []string
// RouterModules 路由模块分组配置;为空且 AutoRouterModules 为 true 时自动检测
RouterModules []RouterModuleConfig
// AutoRouterModules RouterModules 为空时按 basePath 自动检测分组
AutoRouterModules bool
}
Options 生成选项
type OrderedMap ¶
type OrderedMap struct {
// contains filtered or unexported fields
}
OrderedMap 保持插入序的 JSON 对象,渲染结果与 JS JSON.stringify(obj, null, 2) 逐字节一致(不转义非 ASCII 与 HTML 字符),供国际化文件生成使用。
func BuildActionMessagesEnUS ¶
func BuildActionMessagesEnUS(modelName string) *OrderedMap
BuildActionMessagesEnUS 生成英文操作消息
func BuildActionMessagesZhCN ¶
func BuildActionMessagesZhCN(moduleDesc string) *OrderedMap
BuildActionMessagesZhCN 生成中文操作消息(按钮、确认、成功/失败提示等)
func BuildButtonMessagesEnUS ¶
func BuildButtonMessagesEnUS(moduleName string) *OrderedMap
BuildButtonMessagesEnUS 生成英文按钮消息(简化版,仅 create/update)
func BuildButtonMessagesZhCN ¶
func BuildButtonMessagesZhCN(moduleDesc string) *OrderedMap
BuildButtonMessagesZhCN 生成中文按钮消息(简化版,仅 create/update)
func BuildFieldEntriesEnUS ¶
func BuildFieldEntriesEnUS(fields []ParsedField, options *FieldEntriesOptions) *OrderedMap
BuildFieldEntriesEnUS 构建英文字段条目(保持字段文档序)
func BuildFieldEntriesZhCN ¶
func BuildFieldEntriesZhCN(fields []ParsedField, options *FieldEntriesOptions) *OrderedMap
BuildFieldEntriesZhCN 构建中文字段条目(保持字段文档序)
func BuildStatusMapEnUS ¶
func BuildStatusMapEnUS(enumValues []string) *OrderedMap
BuildStatusMapEnUS 生成状态枚举的英文映射,如 {ON: Active, OFF: Inactive}
func BuildStatusMapZhCN ¶
func BuildStatusMapZhCN(enumValues []string) *OrderedMap
BuildStatusMapZhCN 生成状态枚举的中文映射,如 {ON: 启用, OFF: 禁用}
func (*OrderedMap) MarshalJSON ¶
func (m *OrderedMap) MarshalJSON() ([]byte, error)
MarshalJSON 实现 json.Marshaler,按键插入序渲染
func (*OrderedMap) Set ¶
func (m *OrderedMap) Set(key string, val any) *OrderedMap
Set 追加键值(值: string 或 *OrderedMap)
type ParsedField ¶
type ParsedField struct {
Name string `json:"name"`
TsType string `json:"tsType"`
Description string `json:"description"`
IsEnum bool `json:"isEnum"`
EnumValues []string `json:"enumValues"`
Format string `json:"format"`
IsArray bool `json:"isArray"`
IsBoolean bool `json:"isBoolean"`
IsDate bool `json:"isDate"`
IsInteger bool `json:"isInteger"`
}
ParsedField 解析后的字段信息
func FindStatusField ¶
func FindStatusField(service *ParsedService) *ParsedField
FindStatusField 查找服务中的状态枚举字段
type ParsedOperation ¶
type ParsedOperation struct {
Type CrudOperation `json:"type"`
Method string `json:"method"`
Path string `json:"path"`
Description string `json:"description"`
OperationID string `json:"operationId"`
}
ParsedOperation 解析后的操作信息
type ParsedService ¶
type ParsedService struct {
// TagName 服务标签名(如 RoleService)
TagName string `json:"tagName"`
// Description 服务描述
Description string `json:"description"`
// KebabName kebab-case 服务路径名(如 role)
KebabName string `json:"kebabName"`
// CamelName camelCase 服务名(如 role)
CamelName string `json:"camelName"`
// PascalName PascalCase 服务名(如 Role)
PascalName string `json:"pascalName"`
// ModelName 服务主模型名(如 Role)
ModelName string `json:"modelName"`
// ModelCamelName camelCase 模型名(如 role)
ModelCamelName string `json:"modelCamelName"`
// ClientGetterName ApiClient 上的 Service Client getter 名(如 roleService)
ClientGetterName string `json:"clientGetterName"`
// TypePrefix 生成代码中的类型前缀(如 permissionservicev1)
TypePrefix string `json:"typePrefix"`
// BasePath API 路径前缀(如 /admin/v1/roles)
BasePath string `json:"basePath"`
// Operations 该服务支持的操作(按文档序)
Operations []ParsedOperation `json:"operations"`
// Fields 主模型字段(按 schema 属性文档序)
Fields []ParsedField `json:"fields"`
}
ParsedService 解析后的服务信息
func ExtractServices ¶
func ExtractServices(spec *Spec) []*ParsedService
ExtractServices 从 OpenAPI 规范中提取所有服务(按首次出现的 tag 文档序)
type PathEntry ¶
type PathEntry struct {
Path string
Methods []*MethodEntry
}
PathEntry 单个 API 路径(方法按文档序)
type Property ¶
type Property struct {
Name string
Type string
Format string
Description string
Enum []string
// ItemsType 数组元素类型(type: array 时)
ItemsType string
}
Property schema 属性
type RouterModuleConfig ¶
type RouterModuleConfig struct {
// ModuleKey 模块标识(如 permission, system)
ModuleKey string `json:"moduleKey"`
// ModuleDisplayName 模块中文名
ModuleDisplayName string `json:"moduleDisplayName"`
// ModuleIcon 模块图标
ModuleIcon string `json:"moduleIcon,omitempty"`
// ModuleOrder 模块排序(0 = 框架默认值)
ModuleOrder int `json:"moduleOrder,omitempty"`
// Authority 权限标识列表
Authority []string `json:"authority,omitempty"`
// ServiceTags 该模块包含的服务 tag 名列表
ServiceTags []string `json:"serviceTags"`
}
RouterModuleConfig 路由模块分组配置
func DetectRouterModules ¶
func DetectRouterModules(services []*ParsedService) []RouterModuleConfig
DetectRouterModules 按 basePath 第三段启发式检测路由模块分组 (与 GUI 的 autoDetectRouterModules 逻辑一致)。
分组规则: basePath(如 /admin/v1/roles)去空段后取第 3 段('roles'), 再取连字符前缀作为 groupKey,并归并到常见业务模块。
type Spec ¶
type Spec struct {
Tags []OpenApiTag
Paths []*PathEntry
Schemas map[string]*Schema
}
Spec 解析后的 OpenAPI 规范。为与 TypeScript 版行为一致, paths、methods、properties 均按 YAML 文档序保存(Go map 无序)。
func ParseOpenAPIYAML ¶
ParseOpenAPIYAML 解析 OpenAPI 3.0 YAML/JSON 文本
type WriteResult ¶
type WriteResult struct {
// Path 写入的绝对/相对路径(outDir + 文件相对路径)
Path string `json:"path"`
// Action created / overwritten / merged / merged-new
Action string `json:"action"`
// Bytes 写入字节数
Bytes int `json:"bytes"`
}
WriteResult 单个文件的写盘结果
func WriteFiles ¶
func WriteFiles(files []GeneratedFile, outDir string) ([]WriteResult, error)
WriteFiles 将生成文件写入目标目录。
普通文件创建或覆盖;vue-vben 的 page.*/menu.* 国际化片段是「合并式片段」: 目标 locales/langs/{lang}/page.json(或 menu.json)已存在时按键合并写回(merged), 不存在时新建独立片段文件(merged-new)。