diff --git a/apps/develop/api/gen.go b/apps/develop/api/gen.go index 8adda60..c82ec6f 100644 --- a/apps/develop/api/gen.go +++ b/apps/develop/api/gen.go @@ -34,3 +34,16 @@ func (e *GenApi) GenCode(rc *ctx.ReqCtx) { tableId := ginx.PathParamInt(rc.GinCtx, "tableId") gen.GenCode(int64(tableId)) } + +// @Summary 配置生成 +// @Description 生成API和菜单 +// @Tags 工具 / 生成工具 +// @Param tableId path int true "tableId" +// @Success 200 {string} string "{"code": 200, "data": [...]}" +// @Router /develop/code/gen/configure/{tableId} [get] +// @Security X-TOKEN +func (e *GenApi) GenConfigure(rc *ctx.ReqCtx) { + tableId := ginx.PathParamInt(rc.GinCtx, "tableId") + menuId := ginx.QueryInt(rc.GinCtx, "menuId", 0) + gen.GenConfigure(tableId, menuId) +} diff --git a/apps/develop/entity/dev_gen_table.go b/apps/develop/entity/dev_gen_table.go index 1d8e502..a2b5765 100644 --- a/apps/develop/entity/dev_gen_table.go +++ b/apps/develop/entity/dev_gen_table.go @@ -13,11 +13,8 @@ type DevGenTable struct { BusinessName string `gorm:"business_name" json:"businessName"` // 生成业务名 FunctionName string `gorm:"function_name" json:"functionName"` // 生成功能名 FunctionAuthor string `gorm:"function_author" json:"functionAuthor"` // 生成功能作者 - TreeCode string `gorm:"tree_code" json:"treeCode"` - TreeParentCode string `gorm:"tree_parent_code" json:"treeParentCode"` - TreeName string `gorm:"tree_name" json:"treeName"` - Options string `gorm:"options" json:"options"` // 其它生成选项 - Remark string `gorm:"remark" json:"remark"` // 备注 + Options string `gorm:"options" json:"options"` // 其它生成选项 + Remark string `gorm:"remark" json:"remark"` // 备注 PkColumn string `gorm:"pk_column;" json:"pkColumn"` PkGoField string `gorm:"pk_go_field" json:"pkGoField"` PkJsonField string `gorm:"pk_json_field" json:"pkJsonField"` diff --git a/apps/develop/gen/gen.go b/apps/develop/gen/gen.go index 178134e..8125062 100644 --- a/apps/develop/gen/gen.go +++ b/apps/develop/gen/gen.go @@ -2,11 +2,14 @@ package gen import ( "bytes" + "fmt" "github.com/kakuilan/kgo" "log" "os" "pandax/apps/develop/entity" "pandax/apps/develop/services" + sysEntity "pandax/apps/system/entity" + sysServices "pandax/apps/system/services" "pandax/base/biz" "pandax/base/config" "pandax/base/global" @@ -411,8 +414,8 @@ func GenCode(tableId int64) { kgo.KFile.Mkdir("./apps/"+tab.PackageName+"/router/", os.ModePerm) kgo.KFile.Mkdir("./apps/"+tab.PackageName+"/services/", os.ModePerm) kgo.KFile.Mkdir(config.Conf.Gen.Frontpath+"/api/"+tab.PackageName+"/", os.ModePerm) - kgo.KFile.Mkdir(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.ModuleName+"/", os.ModePerm) - kgo.KFile.Mkdir(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.ModuleName+"/"+"component"+"/", os.ModePerm) + kgo.KFile.Mkdir(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.BusinessName+"/", os.ModePerm) + kgo.KFile.Mkdir(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.BusinessName+"/"+"component"+"/", os.ModePerm) var b1 bytes.Buffer err = t1.Execute(&b1, tab) @@ -433,7 +436,105 @@ func GenCode(tableId int64) { kgo.KFile.WriteFile("./apps/"+tab.PackageName+"/services/"+tab.TableName+".go", b2.Bytes()) kgo.KFile.WriteFile("./apps/"+tab.PackageName+"/api/"+tab.TableName+".go", b3.Bytes()) kgo.KFile.WriteFile("./apps/"+tab.PackageName+"/router/"+tab.TableName+".go", b4.Bytes()) - kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/api/"+tab.PackageName+"/"+tab.ModuleName+".js", b5.Bytes()) - kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.ModuleName+"/index.vue", b6.Bytes()) - kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.ModuleName+"/"+"component"+"/editModule.vue", b7.Bytes()) + kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/api/"+tab.PackageName+"/"+tab.BusinessName+".js", b5.Bytes()) + kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.BusinessName+"/index.vue", b6.Bytes()) + kgo.KFile.WriteFile(config.Conf.Gen.Frontpath+"/views/"+tab.PackageName+"/"+tab.BusinessName+"/"+"component"+"/editModule.vue", b7.Bytes()) +} + +// GenConfigure 生成菜单,api +func GenConfigure(tableId, parentId int) { + tab := services.DevGenTableModelDao.FindOne(entity.DevGenTable{TableId: int64(tableId)}, false) + + //生成菜单 一个菜单 三个按钮 + component := "Layout" + if parentId != 0 { + component = fmt.Sprintf("/%s/%s/index", tab.PackageName, tab.BusinessName) + } + menu := sysEntity.SysMenu{ + ParentId: int64(parentId), + MenuName: tab.TableComment, + MenuType: "C", + Sort: 1, + Icon: "elementSetting", + Path: fmt.Sprintf("/%s/%s", tab.PackageName, tab.BusinessName), + Component: component, + IsIframe: "1", + IsHide: "0", + IsKeepAlive: "1", + IsAffix: "1", + Permission: fmt.Sprintf("%s:%s:list", tab.PackageName, tab.BusinessName), + Status: "0", + CreateBy: "admin", + } + insert := sysServices.SysMenuModelDao.Insert(menu) + log.Println("insert", insert.MenuId) + //新增按钮 + menuA := sysEntity.SysMenu{ + ParentId: insert.MenuId, + MenuName: "新增" + tab.TableComment, + MenuType: "F", + Sort: 1, + Permission: fmt.Sprintf("%s:%s:add", tab.PackageName, tab.BusinessName), + Status: "0", + CreateBy: "admin", + } + go sysServices.SysMenuModelDao.Insert(menuA) + //修改按钮 + menuE := sysEntity.SysMenu{ + ParentId: insert.MenuId, + MenuName: "修改" + tab.TableComment, + MenuType: "F", + Sort: 2, + Permission: fmt.Sprintf("%s:%s:edit", tab.PackageName, tab.BusinessName), + Status: "0", + CreateBy: "admin", + } + go sysServices.SysMenuModelDao.Insert(menuE) + //删除按钮 + menuD := sysEntity.SysMenu{ + ParentId: insert.MenuId, + MenuName: "删除" + tab.TableComment, + MenuType: "F", + Sort: 3, + Permission: fmt.Sprintf("%s:%s:delete", tab.PackageName, tab.BusinessName), + Status: "0", + CreateBy: "admin", + } + go sysServices.SysMenuModelDao.Insert(menuD) + //生成api + apiL := sysEntity.SysApi{ + Path: fmt.Sprintf("/%s/%s/list", tab.PackageName, tab.BusinessName), + Description: fmt.Sprintf("查询%s列表(分页)", tab.TableComment), + ApiGroup: tab.BusinessName, + Method: "GET", + } + go sysServices.SysApiModelDao.Insert(apiL) + apiG := sysEntity.SysApi{ + Path: fmt.Sprintf("/%s/%s/:%s", tab.PackageName, tab.BusinessName, tab.PkJsonField), + Description: fmt.Sprintf("获取%s信息", tab.TableComment), + ApiGroup: tab.BusinessName, + Method: "GET", + } + go sysServices.SysApiModelDao.Insert(apiG) + apiA := sysEntity.SysApi{ + Path: fmt.Sprintf("/%s/%s", tab.PackageName, tab.BusinessName), + Description: fmt.Sprintf("添加%s信息", tab.TableComment), + ApiGroup: tab.BusinessName, + Method: "POST", + } + go sysServices.SysApiModelDao.Insert(apiA) + apiE := sysEntity.SysApi{ + Path: fmt.Sprintf("/%s/%s", tab.PackageName, tab.BusinessName), + Description: fmt.Sprintf("修改%s信息", tab.TableComment), + ApiGroup: tab.BusinessName, + Method: "PUT", + } + go sysServices.SysApiModelDao.Insert(apiE) + apiD := sysEntity.SysApi{ + Path: fmt.Sprintf("/%s/%s/:%s", tab.PackageName, tab.BusinessName, tab.PkJsonField), + Description: fmt.Sprintf("删除%s信息", tab.TableComment), + ApiGroup: tab.BusinessName, + Method: "DELETE", + } + go sysServices.SysApiModelDao.Insert(apiD) } diff --git a/apps/develop/router/gen.go b/apps/develop/router/gen.go index b6e0c96..27af595 100644 --- a/apps/develop/router/gen.go +++ b/apps/develop/router/gen.go @@ -26,6 +26,6 @@ func InitGenRouter(router *gin.RouterGroup) { genConfigureLog := ctx.NewLogInfo("生成配置") gen.GET("configure/:tableId", func(c *gin.Context) { - ctx.NewReqCtxWithGin(c).WithLog(genConfigureLog).Handle(genApi.GenCode) + ctx.NewReqCtxWithGin(c).WithLog(genConfigureLog).Handle(genApi.GenConfigure) }) } diff --git a/apps/develop/services/gen_table.go b/apps/develop/services/gen_table.go index 022ae51..987a609 100644 --- a/apps/develop/services/gen_table.go +++ b/apps/develop/services/gen_table.go @@ -7,7 +7,6 @@ import ( "pandax/base/config" "pandax/base/global" "pandax/base/utils" - "strings" ) /** @@ -178,7 +177,7 @@ func (m *devGenTableModelImpl) Update(data entity.DevGenTable) *entity.DevGenTab tableMap := make(map[string]*entity.DevGenTable) if len(tableNames) > 0 { err = global.Db.Table(m.table).Where("table_name in (?)", tableNames).Find(&tables).Error - biz.ErrIsNil(err, err.Error()) + biz.ErrIsNil(err, "关联表不存在") for i := range tables { tableMap[tables[i].TableName] = &tables[i] } @@ -189,17 +188,9 @@ func (m *devGenTableModelImpl) Update(data entity.DevGenTable) *entity.DevGenTab t, ok := tableMap[data.Columns[i].LinkTableName] if ok { data.Columns[i].LinkTableClass = t.ClassName - data.Columns[i].LinkTablePackage = t.ModuleName - } else { - tableNameList := strings.Split(data.Columns[i].LinkTableName, "_") - data.Columns[i].LinkTableClass = "" - data.Columns[i].LinkTablePackage = "" - for a := 0; a < len(tableNameList); a++ { - strStart := string([]byte(tableNameList[a])[:1]) - strEnd := string([]byte(tableNameList[a])[1:]) - data.Columns[i].LinkTableClass += strings.ToUpper(strStart) + strEnd - data.Columns[i].LinkTablePackage += strings.ToLower(strStart) + strings.ToLower(strEnd) - } + data.Columns[i].LinkTablePackage = t.PackageName + data.Columns[i].LinkLabelId = t.PkColumn + data.Columns[i].LinkLabelName = t.PkGoField } } DevTableColumnModelDao.Update(data.Columns[i]) diff --git a/apps/system/api/tenant.go b/apps/system/api/tenant.go index 83299ff..bc8fc57 100644 --- a/apps/system/api/tenant.go +++ b/apps/system/api/tenant.go @@ -22,7 +22,7 @@ type SysTenantsApi struct { // @Param pageSize query int false "页条数" // @Param pageNum query int false "页码" // @Success 200 {string} string "{"code": 200, "data": [...]}" -// @Router /admin/sysTenants/list [get] +// @Router /admin/tenant/list [get] // @Security func (p *SysTenantsApi) GetSysTenantsList(rc *ctx.ReqCtx) { data := entity.SysTenants{} @@ -44,7 +44,7 @@ func (p *SysTenantsApi) GetSysTenantsList(rc *ctx.ReqCtx) { // @Tags SysTenants // @Param tenantId path int true "tenantId" // @Success 200 {string} string "{"code": 200, "data": [...]}" -// @Router /admin/sysTenants/{tenantId} [get] +// @Router /admin/tenant/{tenantId} [get] // @Security func (p *SysTenantsApi) GetSysTenants(rc *ctx.ReqCtx) { tenantId := ginx.PathParamInt(rc.GinCtx, "tenantId") @@ -59,7 +59,7 @@ func (p *SysTenantsApi) GetSysTenants(rc *ctx.ReqCtx) { // @Param data body entity.SysTenants true "data" // @Success 200 {string} string "{"code": 200, "message": "添加成功"}" // @Success 200 {string} string "{"code": 400, "message": "添加失败"}" -// @Router /admin/sysTenants [post] +// @Router /admin/tenant [post] // @Security X-TOKEN func (p *SysTenantsApi) InsertSysTenants(rc *ctx.ReqCtx) { var data entity.SysTenants @@ -76,7 +76,7 @@ func (p *SysTenantsApi) InsertSysTenants(rc *ctx.ReqCtx) { // @Param data body entity.SysTenants true "body" // @Success 200 {string} string "{"code": 200, "message": "添加成功"}" // @Success 200 {string} string "{"code": 400, "message": "添加失败"}" -// @Router /admin/sysTenants [put] +// @Router /admin/tenant [put] // @Security X-TOKEN func (p *SysTenantsApi) UpdateSysTenants(rc *ctx.ReqCtx) { var data entity.SysTenants @@ -91,9 +91,8 @@ func (p *SysTenantsApi) UpdateSysTenants(rc *ctx.ReqCtx) { // @Param tenantId path string true "tenantId" // @Success 200 {string} string "{"code": 200, "message": "删除成功"}" // @Success 200 {string} string "{"code": 400, "message": "删除失败"}" -// @Router /admin/sysTenants/{tenantId} [delete] +// @Router /admin/tenant/{tenantId} [delete] func (p *SysTenantsApi) DeleteSysTenants(rc *ctx.ReqCtx) { - tenantId := rc.GinCtx.Param("tenantId") tenantIds := utils.IdsStrToIdsIntGroup(tenantId) p.SysTenantsApp.Delete(tenantIds) diff --git a/apps/system/router/api.go b/apps/system/router/api.go index d7920a4..7ec1e64 100644 --- a/apps/system/router/api.go +++ b/apps/system/router/api.go @@ -9,7 +9,7 @@ import ( func InitApiRouter(router *gin.RouterGroup) { s := &api.SystemApiApi{ - ApiApp: services.SysSysApiModelDao, + ApiApp: services.SysApiModelDao, } api := router.Group("api") diff --git a/apps/system/services/api.go b/apps/system/services/api.go index 2e52863..8db89bd 100644 --- a/apps/system/services/api.go +++ b/apps/system/services/api.go @@ -19,16 +19,16 @@ type ( Delete(ids []int64) } - sysSysApiModelImpl struct { + sysApiModelImpl struct { table string } ) -var SysSysApiModelDao SysApiModel = &sysSysApiModelImpl{ +var SysApiModelDao SysApiModel = &sysApiModelImpl{ table: `sys_apis`, } -func (m *sysSysApiModelImpl) Insert(api entity.SysApi) *entity.SysApi { +func (m *sysApiModelImpl) Insert(api entity.SysApi) *entity.SysApi { err := global.Db.Table(m.table).Where("path = ? AND method = ?", api.Path, api.Method).First(&entity.SysApi{}).Error biz.IsTrue(errors.Is(err, gorm.ErrRecordNotFound), "存在相同api") err = global.Db.Table(m.table).Create(&api).Error @@ -36,14 +36,14 @@ func (m *sysSysApiModelImpl) Insert(api entity.SysApi) *entity.SysApi { return &api } -func (m *sysSysApiModelImpl) FindOne(id int64) (resData *entity.SysApi) { +func (m *sysApiModelImpl) FindOne(id int64) (resData *entity.SysApi) { resData = new(entity.SysApi) err := global.Db.Table(m.table).Where("id = ?", id).First(&resData).Error biz.ErrIsNil(err, "查询Api失败") return } -func (m *sysSysApiModelImpl) FindListPage(page, pageSize int, data entity.SysApi) (*[]entity.SysApi, int64) { +func (m *sysApiModelImpl) FindListPage(page, pageSize int, data entity.SysApi) (*[]entity.SysApi, int64) { list := make([]entity.SysApi, 0) var total int64 = 0 offset := pageSize * (page - 1) @@ -73,7 +73,7 @@ func (m *sysSysApiModelImpl) FindListPage(page, pageSize int, data entity.SysApi return &list, total } -func (m *sysSysApiModelImpl) FindList(data entity.SysApi) *[]entity.SysApi { +func (m *sysApiModelImpl) FindList(data entity.SysApi) *[]entity.SysApi { list := make([]entity.SysApi, 0) db := global.Db.Table(m.table) @@ -98,7 +98,7 @@ func (m *sysSysApiModelImpl) FindList(data entity.SysApi) *[]entity.SysApi { return &list } -func (m *sysSysApiModelImpl) Update(api entity.SysApi) *entity.SysApi { +func (m *sysApiModelImpl) Update(api entity.SysApi) *entity.SysApi { var oldA entity.SysApi err := global.Db.Table(m.table).Where("id = ?", api.Id).First(&oldA).Error biz.ErrIsNil(err, "【修改api】查询api失败") @@ -113,7 +113,7 @@ func (m *sysSysApiModelImpl) Update(api entity.SysApi) *entity.SysApi { return &api } -func (m *sysSysApiModelImpl) Delete(ids []int64) { +func (m *sysApiModelImpl) Delete(ids []int64) { err := global.Db.Table(m.table).Delete(&entity.SysApi{}, "id in (?)", ids).Error biz.ErrIsNil(err, "删除配置信息失败") } diff --git a/apps/system/services/menu.go b/apps/system/services/menu.go index 9224213..983227b 100644 --- a/apps/system/services/menu.go +++ b/apps/system/services/menu.go @@ -32,7 +32,6 @@ var SysMenuModelDao SysMenuModel = &sysMenuModelImpl{ func (m *sysMenuModelImpl) Insert(data entity.SysMenu) *entity.SysMenu { err := global.Db.Table(m.table).Create(&data).Error biz.ErrIsNil(err, "添加菜单失败") - //m.InitPaths(&data) return &data } diff --git a/resource/template/go/api.template b/resource/template/go/api.template index c319f2a..09d0a70 100644 --- a/resource/template/go/api.template +++ b/resource/template/go/api.template @@ -1,3 +1,4 @@ +package api // ========================================================================== // 生成日期:{{.CreatedAt}} // 生成路径: apps/{{.PackageName}}/api/{{.TableName}}.go diff --git a/resource/template/go/entity.template b/resource/template/go/entity.template index a00d660..c8f7bd2 100644 --- a/resource/template/go/entity.template +++ b/resource/template/go/entity.template @@ -14,8 +14,15 @@ package entity {{if $hasGTime -}}import "time"{{- end }} type {{.ClassName}} struct { - {{range $index, $column := .Columns}} - {{if eq $column.IsPk "1"}} {{$column.GoField}} {{if eq $column.GoType "Time"}}time.Time{{else}}{{$column.GoType}}{{end}} `gorm:"primary_key;{{if eq $column.IsIncrement "1"}}AUTO_INCREMENT{{end}}" json:"{{$column.JsonField}}"` // {{$column.ColumnComment}} {{else}} {{$column.GoField}} {{if eq $column.GoType "Time"}}time.Time{{else}}{{$column.GoType}}{{end}} `gorm:"{{$column.ColumnName}};type:{{$column.ColumnType}};comment:{{$column.ColumnComment}}" json:"{{$column.JsonField}}" {{if eq $column.IsRequired "1"}}binding:"required"{{end}}` // {{$column.ColumnComment}} {{end}} + {{- range $index, $column := .Columns}} + {{- if eq $column.IsPk "1" }} + {{$column.GoField}} {{if eq $column.GoType "Time"}}time.Time{{else}}{{$column.GoType}}{{end}} `gorm:"primary_key;{{if eq $column.IsIncrement "1"}}AUTO_INCREMENT{{end}}" json:"{{$column.JsonField}}"` // {{$column.ColumnComment}} + {{- else if ne $column.LinkTableName ""}} + {{$column.GoField}} {{if eq $column.GoType "Time"}}time.Time{{else}}{{$column.GoType}}{{end}} `gorm:"{{$column.ColumnName}};type:{{$column.ColumnType}};comment:{{$column.ColumnComment}}" json:"{{$column.JsonField}}"` + {{$column.LinkTableClass}} {{$column.LinkTableClass}} `json:"{{$column.LinkTablePackage}}" gorm:"foreignKey:{{$column.LinkLabelName}};references:{{$column.GoField}};"` + {{- else }} + {{$column.GoField}} {{if eq $column.GoType "Time"}}time.Time{{else}}{{$column.GoType}}{{end}} `gorm:"{{$column.ColumnName}};type:{{$column.ColumnType}};comment:{{$column.ColumnComment}}" json:"{{$column.JsonField}}" {{if eq $column.IsRequired "1"}}binding:"required"{{- end }}` // {{$column.ColumnComment}} + {{- end -}} {{end}} } diff --git a/resource/template/go/service.template b/resource/template/go/service.template index d66d438..42d3b36 100644 --- a/resource/template/go/service.template +++ b/resource/template/go/service.template @@ -108,6 +108,9 @@ func (m *{{.BusinessName}}ModelImpl) FindListPage(page, pageSize int, data entit {{- if eq $column.ColumnName "delete_time" }} db.Where("delete_time IS NULL") {{- end -}} + {{- if ne $column.LinkTableName "" }} + db.Preload("{{$column.LinkTableClass}}") + {{- end -}} {{- end}} err := db.Count(&total).Error err = db.Order("create_time").Limit(pageSize).Offset(offset).Find(&list).Error