From 4fbecae513808215fc3cd27a6eecc95ddbfb318f Mon Sep 17 00:00:00 2001 From: yxh Date: Wed, 16 Sep 2020 15:46:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/admin/gen_table.go | 126 ++++++++++++++++-- app/service/admin/model_service/field.go | 1 + app/service/admin/model_service/info.go | 3 + app/service/common/com_model_service/model.go | 7 +- 4 files changed, 126 insertions(+), 11 deletions(-) diff --git a/app/controller/admin/gen_table.go b/app/controller/admin/gen_table.go index 8dc321e..d438575 100644 --- a/app/controller/admin/gen_table.go +++ b/app/controller/admin/gen_table.go @@ -5,13 +5,17 @@ import ( "gfast/app/service/admin/gen_service" "gfast/app/service/admin/user_service" "gfast/library/response" + "github.com/gogf/gf/encoding/gcompress" "github.com/gogf/gf/encoding/gjson" + "github.com/gogf/gf/errors/gerror" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/net/ghttp" + "github.com/gogf/gf/os/gfile" "github.com/gogf/gf/os/gview" "github.com/gogf/gf/text/gregex" "github.com/gogf/gf/text/gstr" "github.com/gogf/gf/util/gconv" + "github.com/gogf/gf/util/grand" "github.com/gogf/gf/util/gvalid" "strings" ) @@ -182,15 +186,101 @@ func (c *Gen) Preview(r *ghttp.Request) { if tableId == 0 { response.FailJson(true, r, "参数错误") } - entity, err := gen_service.SelectRecordById(tableId) + data, _, err := c.genData(tableId) if err != nil { response.FailJson(true, r, err.Error()) } + response.SusJson(true, r, "ok", data) +} + +//下载生成的代码 +func (c *Gen) BatchGenCode(r *ghttp.Request) { + tableIds := r.GetString("tables") + if tableIds == "" { + response.FailJson(true, r, "请选择要生成的表") + } + ids := gstr.Split(tableIds, ",") + dataFilePath := g.Cfg().GetString("adminInfo.dataDir") + dataFileRange := grand.S(10) + //生成文件 + for _, id := range ids { + data, entity, err := c.genData(gconv.Int64(id)) + if err != nil { + response.FailJson(true, r, err.Error()) + } + pathMap := c.getPath(entity) + for key, val := range data { + switch key { + case "vm/go/" + entity.BusinessName + "_controller.go.vm": + err = gfile.PutContents(dataFilePath+"/gen/"+dataFileRange+"/go/"+pathMap["controller"], val) + if err != nil { + response.FailJson(true, r, err.Error()) + } + case "vm/go/" + entity.BusinessName + "_service.go.vm": + err = gfile.PutContents(dataFilePath+"/gen/"+dataFileRange+"/go/"+pathMap["service"], val) + if err != nil { + response.FailJson(true, r, err.Error()) + } + case "vm/go/" + entity.BusinessName + "_model.go.vm": + err = gfile.PutContents(dataFilePath+"/gen/"+dataFileRange+"/go/"+pathMap["model"], val) + if err != nil { + response.FailJson(true, r, err.Error()) + } + case "vm/html/" + entity.BusinessName + "_api.js.vm": + err = gfile.PutContents(dataFilePath+"/gen/"+dataFileRange+"/vue/"+pathMap["api"], val) + if err != nil { + response.FailJson(true, r, err.Error()) + } + case "vm/html/" + entity.BusinessName + "_vue.js.vm": + err = gfile.PutContents(dataFilePath+"/gen/"+dataFileRange+"/vue/"+pathMap["vue"], val) + if err != nil { + response.FailJson(true, r, err.Error()) + } + } + } + } + //打包 + err := gcompress.ZipPathWriter(dataFilePath+"/gen/"+dataFileRange, r.Response.Writer) + if err != nil { + response.FailJson(true, r, err.Error()) + } + //删除生成的文件 + gfile.Remove(dataFilePath + "/gen/" + dataFileRange) + //设置下载文件名 + r.Response.Header().Set("Content-Length", gconv.String(r.Response.BufferLength())) + r.Response.Header().Set("Content-Type", "application/force-download") + r.Response.Header().Set("Accept-Ranges", "bytes") + r.Response.Header().Set("Content-Disposition", "attachment; filename=gfast.zip") + r.Response.Buffer() +} + +//获取生成文件的目录 +func (c *Gen) getPath(entity *gen_table.EntityExtend) g.MapStrStr { + controller := "app/controller/" + entity.ModuleName + "/" + entity.ClassName + ".go" + service := "app/service/" + entity.ModuleName + "/" + entity.BusinessName + "/" + entity.ClassName + ".go" + model := "app/model/" + entity.ModuleName + "/" + entity.BusinessName + "/" + entity.ClassName + ".go" + vue := "views/" + entity.ModuleName + "/" + entity.BusinessName + "/index.vue" + api := "api/" + entity.ModuleName + "/" + entity.BusinessName + ".js" + return g.MapStrStr{ + "controller": controller, + "service": service, + "model": model, + "vue": vue, + "api": api, + } +} + +//获取生成数据 +func (c *Gen) genData(tableId int64) (data g.MapStrStr, entity *gen_table.EntityExtend, err error) { + entity, err = gen_service.SelectRecordById(tableId) + if err != nil { + return + } if entity == nil { - response.FailJson(true, r, "表格数据不存在") + err = gerror.New("表格数据不存在") + return } gen_service.SetPkColumn(entity, entity.Columns) - controllerKey := "vm/go/" + entity.BusinessName + "_controller.go.vm" controllerValue := "" serviceKey := "vm/go/" + entity.BusinessName + "_service.go.vm" @@ -220,31 +310,47 @@ func (c *Gen) Preview(r *ghttp.Request) { if entity.TplCategory == "tree" { options = gjson.New(entity.Options).ToMap() } - if tmpController, err := view.Parse("vm/go/"+entity.TplCategory+"/controller.template", g.Map{"table": entity}); err == nil { + var tmpController string + if tmpController, err = view.Parse("vm/go/"+entity.TplCategory+"/controller.template", g.Map{"table": entity}); err == nil { controllerValue = tmpController + } else { + return } - if tmpService, err := view.Parse("vm/go/"+entity.TplCategory+"/service.template", g.Map{"table": entity, "options": options}); err == nil { + var tmpService string + if tmpService, err = view.Parse("vm/go/"+entity.TplCategory+"/service.template", g.Map{"table": entity, "options": options}); err == nil { serviceValue = tmpService + } else { + return } - if tmpModel, err := view.Parse("vm/go/"+entity.TplCategory+"/model.template", g.Map{"table": entity}); err == nil { + var tmpModel string + if tmpModel, err = view.Parse("vm/go/"+entity.TplCategory+"/model.template", g.Map{"table": entity}); err == nil { modelValue = tmpModel modelValue, err = c.trimBreak(modelValue) + } else { + return } - if tmpJs, err := view.Parse("vm/html/js.template", g.Map{"table": entity}); err == nil { + var tmpJs string + if tmpJs, err = view.Parse("vm/html/js.template", g.Map{"table": entity}); err == nil { apiJsValue = tmpJs + } else { + return } - if tmpVue, err := view.Parse("vm/html/vue_"+entity.TplCategory+".template", g.Map{"table": entity, "options": options}); err == nil { + var tmpVue string + if tmpVue, err = view.Parse("vm/html/vue_"+entity.TplCategory+".template", g.Map{"table": entity, "options": options}); err == nil { vueValue = tmpVue vueValue, err = c.trimBreak(vueValue) + } else { + return } - response.SusJson(true, r, "ok", g.Map{ + data = g.MapStrStr{ modelKey: modelValue, serviceKey: serviceValue, controllerKey: controllerValue, apiJsKey: apiJsValue, vueKey: vueValue, - }) + } + return } //剔除多余的换行 diff --git a/app/service/admin/model_service/field.go b/app/service/admin/model_service/field.go index cea65e4..e34bf43 100644 --- a/app/service/admin/model_service/field.go +++ b/app/service/admin/model_service/field.go @@ -55,6 +55,7 @@ func SelectFieldsAll(req *model_fields.SelectPageReq) (list []*model_fields.Fiel fInfo.FieldTitle = field.FieldTitle fInfo.FieldType = field.FieldType fInfo.FieldRules = field.FieldRules + fInfo.FieldDefault = field.FieldDefault if gstr.ContainsI(modelInfo.SearchList, field.FieldName) { //列表查询 fInfo.SearchList = "1" diff --git a/app/service/admin/model_service/info.go b/app/service/admin/model_service/info.go index 3b4ff43..674314e 100644 --- a/app/service/admin/model_service/info.go +++ b/app/service/admin/model_service/info.go @@ -188,6 +188,9 @@ func CreateModel(modelId int64) error { } SqlFields.Append(fmt.Sprintf("`%s` TINYINT UNSIGNED NOT NULL DEFAULT %s COMMENT '%s'", fi.FieldName, fi.FieldDefault, fi.FieldTitle)) + //部门选择器 + case "DepartmentSelector": + SqlFields.Append(fmt.Sprintf("`%s` VARCHAR(300) %s DEFAULT '' COMMENT '%s'", fi.FieldName, fi.FieldDefault, fi.FieldTitle)) default: return gerror.New("不能识别字段类型") } diff --git a/app/service/common/com_model_service/model.go b/app/service/common/com_model_service/model.go index 8aadfca..99a52bf 100644 --- a/app/service/common/com_model_service/model.go +++ b/app/service/common/com_model_service/model.go @@ -48,7 +48,12 @@ func GetModelRuleByModelId(r *ghttp.Request, modelId int64, masterId int64) (rul //获取可编辑字段 fieldEdit := garray.NewStrArrayFrom(gstr.Split(modelInfo.ModelEdit, ",")) for _, field := range modelFields { - rule := new(model_fields.FieldRule) + rule := &model_fields.FieldRule{ + FOptions: g.List{}, + FAttr: g.Map{}, + FProps: g.Map{}, + FValidate: make([]model_fields.Validate, 0), + } fAttr := g.Map{} //主键跳过不在表单显示 if field.FieldName == modelInfo.ModelPk {