diff --git a/dist/index.html b/dist/index.html index 46fd2c6..bb7e539 100644 --- a/dist/index.html +++ b/dist/index.html @@ -1 +1 @@ -json-gen
\ No newline at end of file +json-gen
\ No newline at end of file diff --git a/dist/static/js/app.475fe2c9.js b/dist/static/js/app.475fe2c9.js new file mode 100644 index 0000000..9a10750 --- /dev/null +++ b/dist/static/js/app.475fe2c9.js @@ -0,0 +1 @@ +(function(t){function n(n){for(var c,a,i=n[0],s=n[1],u=n[2],p=0,f=[];p-1){var n=t.indexOf("_");return{prefix:t.slice(0,n+1),suffix:t.slice(n+1,t.length)}}return{prefix:"",suffix:t}}function v(t){var n={integer:"int64",string:"string",number:"float64"};return n[t]}var y={name:"HelloWorld",components:{vueJsonEditor:a["a"]},data:function(){return{isUnderScoreCase:!1,schemaKey:"19878878",renderKey:1,activeName:"",dialogVisible:!1,schema:{type:"object",title:"title",properties:{field_1:{type:"string"}}},jsonformat:{},sqlinput:"CREATE TABLE `gb_goods` (\n `goods_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品id',\n PRIMARY KEY (`goods_id`) USING BTREE\n ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '商品表' ROW_FORMAT = Dynamic;",output:{}}},created:function(){},computed:{codeOutput:function(){return this.output[this.activeName]}},mounted:function(){this.sqlchange(this.sqlinput),this.schemaKey=Date.now()},methods:{selectText:function(){var t=document.getElementById(this.activeName);if(document.body.createTextRange){var n=document.body.createTextRange();n.moveToElementText(t),n.select()}else if(window.getSelection){var e=window.getSelection(),c=document.createRange();c.selectNodeContents(t),e.removeAllRanges(),e.addRange(c)}else alert("none");document.execCommand("copy"),this.$message({message:"复制成功",type:"success"})},onJsonChange:function(t){this.onJsonSave(t)},onJsonSave:function(t){this.schemaKey=Date.now(),this.schema=Object.assign({},t)},genCode:function(){var t=this.schema;this.output["model"]=this.handleModelOutput(t,this.isUnderScoreCase),this.output["service"]=this.handleServiceOutput(t),this.output["api"]=this.handleApiOutput(t),this.output["route"]=this.handleRouteOutput(t),this.output["js-api"]=this.handleJsApi(t),this.renderKey++,this.activeName="",this.dialogVisible=!0},sqlchange:function(t){var n=new d["Parser"]("mysql"),e={useRef:!1};n.feed(t);var c=n.toJsonSchemaArray(e),r=JSON.parse(JSON.stringify(c[0]));this.schema=Object.assign({},r),this.schemaKey=Date.now()},onError:function(t){console.log("json渲染错误了value:",t)},onSchemaChange:function(t){this.jsonformat=t,this.schema=JSON.stringify(t,null,2),this.output["model"]=this.handleModelOutput(t,this.isUnderScoreCase),this.output["service"]=this.handleServiceOutput(t),this.output["api"]=this.handleApiOutput(t),this.output["route"]=this.handleRouteOutput(t),this.output["js-api"]=this.handleJsApi(t),this.schemaKey=Date.now()},handleRouteOutput:function(t){var n=x(t.title).suffix,e=m(n),c=n,r="\n\t \t{\n\t\t\t".concat(c,' := admin.Group("').concat(c,'")\n\t\t\t').concat(c,'.GET("list", a.').concat(e,".List").concat(e,")\n\t\t\t").concat(c,'.POST("create", a.').concat(e,".Create").concat(e,")\n\t\t\t").concat(c,'.GET("detail", a.').concat(e,".Get").concat(e,"One)\n\t\t\t").concat(c,'.DELETE("del", a.').concat(e,".Delete").concat(e,")\n\t\t}\n\t\t");return r},handleJsApi:function(t){var n=x(t.title).suffix,e=m(n),c=n,r="\n import request from '@/utils/request';\n\texport function get".concat(e,"(data) {\n\treturn request({\n\t\turl: '/api/admin/").concat(c,"/detail',\n\t\tmethod: 'post',\n\t\tdata: data\n\t})\n\t}\n\n\texport function list").concat(e,"(data) {\n\treturn request({\n\t\turl: '/api/admin/").concat(c,"/list',\n\t\tmethod: 'post',\n\t\tdata: data\n\t})\n\t}\n\n\texport function list").concat(e,"Export(data) {\n\treturn request({\n\t\turl: '/api/admin/").concat(c,"/list',\n\t\tmethod: 'post',\n\t\tdata: data,\n\t\tresponseType: 'blob'\n\t})\n\t}\n\n\texport function create").concat(e,"(data) {\n\treturn request({\n\t\turl: '/api/admin/").concat(c,"/create',\n\t\tmethod: 'post',\n\t\tdata: data\n\t})\n\t}\n\n\texport function del").concat(e,"(data) {\n\treturn request({\n\t\turl: '/api/admin/").concat(c,"/del',\n\t\tmethod: 'post',\n\t\tdata: data\n\t})\n\t}\n\t\t");return r},handleApiOutput:function(t){var n=x(t.title).suffix,e=m(n),c='\n\t\tpackage api\n\n\t\timport (\n\t\t\t"Carp/internal/app/ginplus"\n\t\t\t"Carp/internal/app/model"\n\t\t\t"Carp/internal/app/schema"\n\t\t\t"Carp/internal/app/service"\n\t\t\t"Carp/pkg/errors"\n\t\t\t"Carp/pkg/utils"\n\t\t\t"Carp/pkg/utils/excelize"\n\n\t\t\t"github.com/gin-gonic/gin"\n\t\t\t"github.com/google/wire"\n\t\t\t"github.com/tealeg/xlsx"\n\t\t)\n\t\tvar '.concat(e,"ApiSet = wire.NewSet(wire.Struct(new(").concat(e,'Api), "*"))\n\n\t\ttype ').concat(e,"Api struct {\n\t\t\t").concat(e,"Service *service.").concat(e,"Service\n\t\t}\n\n\t\t// Create").concat(e," 创建").concat(e,"\n\t\tfunc (l *").concat(e,"Api) Create").concat(e,"(c *gin.Context) {\n\t\t\treq := &model.").concat(e,"{}\n\t\t\tif err := ginplus.ParseJSON(c, req); err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\terr := l.").concat(e,"Service.Create").concat(e,"(c.Request.Context(), req)\n\t\t\tif err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tginplus.ResOK(c)\n\t\t}\n\n\t\t// Get").concat(e,"One 获取单个").concat(e,"\n\t\tfunc (l *").concat(e,"Api) Get").concat(e,"One(c *gin.Context) {\n\t\t\treq := &schema.IDResult{}\n\t\t\tif err := ginplus.ParseQuery(c, req); err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tresp, err := l.").concat(e,"Service.Get").concat(e,"One(c.Request.Context(), req.ID)\n\t\t\tif err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tginplus.ResSuccess(c, resp)\n\t\t}\n\n\t\t// List").concat(e," 拉取").concat(e,"列表\n\t\tfunc (l *").concat(e,"Api) List").concat(e,"(c *gin.Context) {\n\t\t\treq := &model.").concat(e,"ReqParams{}\n\t\t\tif err := ginplus.ParseQuery(c, req); err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tresp, err := l.").concat(e,"Service.Get").concat(e,'List(c.Request.Context(), req)\n\t\t\tif err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif req.Export {\n\t\t\t f, err := excelize.Excelize(resp,\n \t\texcelize.ColumnFilter("create_time", excelize.FilterTimestamp),\n \t)\n\t\t\t\tif err != nil {\n\t\t\t\t\tginplus.ResError(c, err)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tginplus.ResExcel(c, f, "导出信息列表")\n\t\t\t\treturn\n\t\t\t}\n\t\t\tginplus.ResPage(c, resp)\n\t\t}\n\n\t\t// Delete').concat(e," 删除").concat(e,"\n\t\tfunc (l *").concat(e,"Api) Delete").concat(e,"(c *gin.Context) {\n\t\t\tvar req schema.IDResult\n\t\t\tif err := ginplus.ParseQuery(c, &req); err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif err := l.").concat(e,"Service.Del").concat(e,"(c.Request.Context(), req.ID); err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tginplus.ResOK(c)\n\t\t}\n\t ");return c},handleServiceOutput:function(t){var n=x(t.title).suffix,e=m(n),c=t.properties,r="";Object.keys(c).forEach((function(t){var n=c[t],e=m(t);Object.prototype.hasOwnProperty.call(n,"$comment")&&(r=e)}));var o=g(r),a='\n\tpackage service\n\timport (\n\t\t"Carp/internal/app/model"\n\t\t"Carp/internal/app/schema"\n\t\t"Carp/pkg/errors"\n\t\t"context"\n\t\t"encoding/json"\n\n\t\t"github.com/google/wire"\n\t)\n\tvar '.concat(e,"ServiceSet = wire.NewSet(wire.Struct(new(").concat(e,'Service), "*"))\n\n\ttype ').concat(e,"Service struct {\n\t\t").concat(e," *model.").concat(e,"Repo\n\t}\n\n\t// Get").concat(e,"List 获取").concat(e,"列表 \n\tfunc (a *").concat(e,"Service) Get").concat(e,"List(ctx context.Context, req *model.").concat(e,"ReqParams) (*schema.PaginationResult, error) {\n var l []*model.").concat(e,"\n cnt, err := a.").concat(e,".Q().Filter(req).List(ctx, &l)\n if err != nil {\n return nil, errors.WithStack(err)\n }\n\n pagination := &schema.PaginationResult{\n Count: cnt,\n List: l,\n PageNum: req.PageNum,\n PageSize: req.PageSize,\n }\n return pagination, nil\n }\n\n\t // Get").concat(e," 获取单个").concat(e," \n\t func (a *").concat(e,"Service) Get").concat(e,"One(ctx context.Context, ").concat(o," int64) (interface{}, error) {\n\t\tvar o model.").concat(e,"\n\t\terr := a.").concat(e,".Q().").concat(r,"(").concat(o,").One(ctx, &o)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn o, nil\n\t\t}\n\n\t// Del").concat(e," 删除").concat(e," \n\t func (a *").concat(e,"Service) Del").concat(e,"(ctx context.Context, ").concat(o," int64) error {\n\t var o model.").concat(e,"\n\t err := a.").concat(e,".Q().").concat(r,"(").concat(o,").One(ctx, &o)\n\t if err != nil {\n\t \treturn err\n\t }\n\t return a.").concat(e,".Delete(ctx, o.").concat(r,")\n\t }\n\n\t// Create").concat(e," 创建").concat(e," \n\tfunc (a *").concat(e,"Service) Create").concat(e,"(ctx context.Context, r *model.").concat(e,") error {\n\tif r.").concat(r," == 0 {\n\t\t_, err := a.").concat(e,".Create(ctx, r)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\treturn a.").concat(e,".Updates(ctx, r, a.").concat(e,".Q().").concat(r,"(r.").concat(r,"))\n\t}\n\n\t\t");return a},getMyStruct:function(t){var n=new XMLHttpRequest;n.open("POST","/sql",!1),n.setRequestHeader("Content-type","application/json"),console.log(this.sqlinput),n.send(JSON.stringify({content:this.sqlinput,camel:!this.isUnderScoreCase,table_prefix:t}));var e=n.responseText;return e},handleModelOutput:function(t,n){var e=x(t.title).prefix,c=this.getMyStruct(e);console.log("struct",c);var r=t.required,o=t.properties,a=x(t.title).suffix,i=m(a),s=g(i),u="";Object.keys(o).forEach((function(t){var n=o[t],e=m(t);Object.prototype.hasOwnProperty.call(n,"$comment")&&(u=e)}));var l=g(u),p="",f="",d="\n var ".concat(i,"Set = wire.NewSet(wire.Struct(new(").concat(i,'Repo), "*"))\n\n type ').concat(i,"Repo struct {\n DB *gorm.DB\n Cache cache.Cache\n }\n\n // GetTableName get sql table name.获取数据库名字\n func (repo *").concat(i,'Repo) TableName() string {\n return "').concat(t.title,'"\n }\n\n\t// PreTableName 获取表名前缀\n func (repo *').concat(i,'Repo) PreTableName(s string) string {\n b := strings.Builder{}\n b.WriteString(repo.TableName())\n b.WriteString(".")\n b.WriteString(s)\n return b.String()\n }\n\n // Delete By ID\n func (repo *').concat(i,"Repo) Delete(ctx context.Context, ").concat(l," int64) error {\n err := repo.DB.WithContext(ctx).Delete(&").concat(i,"{}, ").concat(l,").Error\n return err\n }\n\n // CacheKey").concat(u," CacheKey generate by ids\n func (repo *").concat(i,"Repo) CacheKey").concat(u,"(").concat(l,' int64) string {\n return strings.Join([]string{repo.TableName(), "').concat(l,'", utils.AsString(').concat(l,')}, "_")\n }\n\n // Updates 更新\n func (repo *').concat(i,"Repo) Updates(ctx context.Context, input *").concat(i,", q *").concat(s,'Q) error {\n Q := q.Query(ctx)\n key := ""\n if k, _ := Q.InstanceGet("cache_key"); k != nil {\n key = utils.AsString(k)\n }\n return repo.Cache.Exec(ctx, key, func(ctx context.Context) error {\n return Q.Updates(*input).Error\n })\n }\n\n // Save 更新,相比Updates会置空没有的字段\n func (repo *').concat(i,"Repo) Save(ctx context.Context, input *").concat(i,", q *").concat(s,'Q) error {\n Q := q.Query(ctx)\n key := ""\n if k, _ := Q.InstanceGet("cache_key"); k != nil {\n key = utils.AsString(k)\n }\n return repo.Cache.Exec(ctx, key, func(ctx context.Context) error {\n return Q.Save(*input).Error\n })\n }\n\n\t// updateColumn 更新\n\tfunc (repo *').concat(i,"Repo) updateColumn(ctx context.Context, column string, value interface{}, q *").concat(s,'Q) error {\n\t\tQ := q.Query(ctx)\n\t\tkey := ""\n\t\tif k, _ := Q.InstanceGet("cache_key"); k != nil {\n\t\t\tkey = utils.AsString(k)\n\t\t}\n\t\treturn repo.Cache.Exec(ctx, key, func(ctx context.Context) error {\n\t\t\treturn Q.UpdateColumn(column, value).Error\n\t\t})\n\t}\n\n // Create 创建\n func (repo *').concat(i,"Repo) Create(ctx context.Context, input *").concat(i,") (*").concat(i,", error) {\n if err := repo.DB.WithContext(ctx).Create(input).Error; err != nil {\n return nil, err\n }\n return input, nil\n }\n\n type ").concat(s,"Q struct {\n\t BaseModelFunc\n Repo *").concat(i,"Repo\n opts []GormOptionFunc\n }\n\n func (repo *").concat(i,"Repo) Q() *").concat(s,"Q {\n\t\tq := &").concat(s,"Q{\n\t\t\tRepo: repo,\n\t\t}\n\t\tq.BaseModelFunc = repo.PreTableName\n\t\treturn q\n }\n\n // List 查询列表\n func (q *").concat(s,'Q) List(ctx context.Context, value interface{}) (int64, error) {\n var cnt int64\n err := q.Query(ctx).Order("').concat(l,' desc").Find(value).Offset(-1).Count(&cnt).Error\n return cnt, err\n }\n\n //One 查询单个\n func (q *').concat(s,'Q) One(ctx context.Context, value interface{}) error {\n Q := q.Query(ctx)\n cache_key := ""\n // 缓存只适用于单行全列的情况\n if k, _ := Q.InstanceGet("cache_key"); len(q.opts) == 1 && k != nil {\n cache_key = utils.AsString(k)\n Q = Q.Select("*")\n }\n return q.Repo.Cache.Query(ctx, cache_key, value, func(ctx context.Context) error {\n err := Q.First(value).Error\n if errors.Is(err, gorm.ErrRecordNotFound) {\n return errors.ErrIdCanNotFound\n }\n return err\n })\n }\n\n\t// Query 内部查询命令\n func (q *').concat(s,"Q) Query(ctx context.Context) *gorm.DB {\n db := q.Repo.DB.WithContext(ctx).Model(&").concat(i,"{})\n for _, f := range q.opts {\n db = f(db)\n }\n return db\n }\n\n\tfunc (q *").concat(s,"Q) where(key string, value interface{}) {\n\t\tq.opts = append(q.opts, func(db *gorm.DB) *gorm.DB {\n\t\t\tdb = db.Where(q.Repo.PreTableName(key), value)\n\t\t\treturn db\n\t\t})\n\t}\n\n\tfunc (p *").concat(i,"ReqParams) GetPageNum() int { return p.PageNum }\n\tfunc (p *").concat(i,"ReqParams) GetPageSize() int { return p.PageSize }\n\tfunc (p *").concat(i,"ReqParams) GetFields() []string { return p.Fields }\n\tfunc (p *").concat(i,"ReqParams) GetExport() bool { return p.Export }\n\n type ").concat(i,'ReqParams struct {\n Export bool `json:"export,omitempty" form:"export"`\n\t\tQuery string `json:"query,omitempty" form:"query"`\n Fields []string `json:"fields,omitempty" form:"fields"`\n PageNum int `json:"pageNum,omitempty" form:"pageNum"`\n PageSize int `json:"pageSize,omitempty" form:"pageSize"`\n '),h="",y="}",b="",C="\n\t // Filter 自动组合查询\n func (opt *".concat(s,"Q) Filter(para *").concat(i,"ReqParams) *").concat(s,"Q {\n \tif para != nil {\n\t\t\t\tif para.Export {\n\t\t\t\t\tpara.PageNum = 1\n\t\t\t\t\tpara.PageSize = 10000\n\t\t\t\t}\n\t\t\t\topt.opts = append(opt.opts, opt.Select(para.Fields...))\n\t\t\t\topt.opts = append(opt.opts, opt.Pagination(para))\n "),q="",S="}\n return opt}";Object.keys(o).forEach((function(t){var e=o[t],c=m(t),a=g(m(t)),l="".concat(i)+m(t),d=v(e.type);if(Object.prototype.hasOwnProperty.call(e,"enum")&&e.enum.length>0){var x=e.enum,y=e.enumDesc,C="\n type ".concat(l," ").concat(d,"\n const (\n "),S="",R=")";y.split("\n").forEach((function(n,e){var c=x[e],r="\n ".concat(l).concat(n," ").concat(l," = ").concat(c," \n\n "),o="\n func (g ".concat(l,") ").concat(n,"() bool { return g == ").concat(l).concat(n," } \n\n func (repo *").concat(i,"Repo) ").concat(n,'(ctx context.Context, id int64) error {\n \treturn repo.updateColumn(ctx, "').concat(t,'", ').concat(l).concat(n,", repo.Q().").concat(u,"(id))\n } \n\n ");S+=r,p+=o})),f+=C+S+R}t.indexOf("_time")>-1&&(h+=n?"".concat(c,'Interval []interface{} `json:"').concat(t,'|interval,omitempty" form:"').concat(t,'|interval"`\n'):"".concat(c,'Interval []interface{} `json:"').concat(a,'|interval,omitempty" form:"').concat(a,'|interval"`\n'),q+="\n if len(para.Query.".concat(c,"Interval) > 0 {\n\t\t\t\t opt.").concat(c,"Interval(para.Query.").concat(c,"Interval)\n\t\t\t }\n "),b+="\n func (q *".concat(s,"Q) ").concat(c,"Interval(interval []interface{}) *").concat(s,'Q {\n fn := func(db *gorm.DB) *gorm.DB {\n \tdb = db.Clauses(\n TimeStampDate{\n Column: "').concat(t,'",\n Values: interval,\n })\n\t\t return db\n\t }\n q.opts = append(q.opts, fn)\n return q\n }\n \n\n ')),t.indexOf("_id")>-1&&(h+=n?"".concat(c,"In []").concat(d,' `json:"').concat(t,'|in,omitempty" form:"').concat(t,'|in"`\n'):"".concat(c,"In []").concat(d,' `json:"').concat(a,'|in,omitempty" form:"').concat(a,'|in"`\n'),q+="\n if len(para.".concat(c,"In) > 0 {\n\t\t\t\t opt.").concat(c,"In(para.").concat(c,"In...)\n\t\t\t }\n "),b+="\n func (q *".concat(s,"Q) ").concat(c,"In(").concat(c,"s ...").concat(d,") *").concat(s,'Q {\n\t\t q.where("').concat(t,' in (?)", ').concat(c,"s)\n return q\n }\n \n\n ")),r.indexOf(t)>-1&&(h+=n?"".concat(c," ").concat(d,' `json:"').concat(t,',omitempty" form:"').concat(t,'"`\n'):"".concat(c," ").concat(d,' `json:"').concat(a,',omitempty" form:"').concat(a,'"`\n'),"string"==d?q+="\n if para.".concat(c,' != "" {\n opt.').concat(c,"(para.").concat(c,")\n }\n "):"id"!==t&&(q+="\n if para.".concat(c," != 0 {\n opt.").concat(c,"(para.").concat(c,")\n }\n ")),b+="\n func (q *".concat(s,"Q) ").concat(c,"(").concat(c," ").concat(d,") *").concat(s,'Q {\n q.where("').concat(t,' = ?", ').concat(c,")\n return q\n }\n \n\n "),"string"==d&&(h+=n?"".concat(c,"Like ").concat(d,' `json:"').concat(t,'|like,omitempty" form:"').concat(t,'|like"`\n'):"".concat(c,"Like ").concat(d,' `json:"').concat(a,'|like,omitempty" form:"').concat(a,'|like"`\n'),q+="\n if para.".concat(c,'Like != "" {\n opt.').concat(c,"Like(para.").concat(c,"Like)\n }\n "),b+="\n func (q *".concat(s,"Q) ").concat(c,"Like(").concat(c," ").concat(d,") *").concat(s,'Q {\n q.where("').concat(t,' like ?", "%"+').concat(c,'+"%")\n return q\n }\n \n\n ')))}));var R=c+f+p+d+h+y+"\n"+b+C+q+S;return R}}},b=y,C=e("2877"),q=Object(C["a"])(b,p,f,!1,null,null,null),S=q.exports,R={name:"App",components:{HelloWorld:S}},O=R,k=(e("034f"),Object(C["a"])(O,u,l,!1,null,null,null)),E=k.exports;o["default"].use(r.a,{size:"small"}),o["default"].use(s.a),o["default"].use(a["a"]),o["default"].config.productionTip=!1,new o["default"]({el:"#app",render:function(t){return t(E)}})},"85ec":function(t,n,e){}}); \ No newline at end of file diff --git a/dist/static/js/app.d32d9fe8.js b/dist/static/js/app.d32d9fe8.js deleted file mode 100644 index 5736e67..0000000 --- a/dist/static/js/app.d32d9fe8.js +++ /dev/null @@ -1 +0,0 @@ -(function(t){function n(n){for(var c,a,i=n[0],s=n[1],u=n[2],p=0,f=[];p-1){var n=t.indexOf("_");return{prefix:t.slice(0,n+1),suffix:t.slice(n+1,t.length)}}return{prefix:"",suffix:t}}function v(t){var n={integer:"int64",string:"string",number:"float64"};return n[t]}var y={name:"HelloWorld",components:{vueJsonEditor:a["a"]},data:function(){return{isUnderScoreCase:!1,schemaKey:"19878878",renderKey:1,activeName:"",dialogVisible:!1,schema:{type:"object",title:"title",properties:{field_1:{type:"string"}}},jsonformat:{},sqlinput:"CREATE TABLE `gb_goods` (\n `goods_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品id',\n PRIMARY KEY (`goods_id`) USING BTREE\n ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COMMENT = '商品表' ROW_FORMAT = Dynamic;",output:{}}},created:function(){},computed:{codeOutput:function(){return this.output[this.activeName]}},mounted:function(){this.sqlchange(this.sqlinput),this.schemaKey=Date.now()},methods:{selectText:function(){var t=document.getElementById(this.activeName);if(document.body.createTextRange){var n=document.body.createTextRange();n.moveToElementText(t),n.select()}else if(window.getSelection){var e=window.getSelection(),c=document.createRange();c.selectNodeContents(t),e.removeAllRanges(),e.addRange(c)}else alert("none");document.execCommand("copy"),this.$message({message:"复制成功",type:"success"})},onJsonChange:function(t){this.onJsonSave(t)},onJsonSave:function(t){this.schemaKey=Date.now(),this.schema=Object.assign({},t)},genCode:function(){var t=this.schema;this.output["model"]=this.handleModelOutput(t,this.isUnderScoreCase),this.output["service"]=this.handleServiceOutput(t),this.output["api"]=this.handleApiOutput(t),this.output["route"]=this.handleRouteOutput(t),this.output["js-api"]=this.handleJsApi(t),this.renderKey++,this.activeName="",this.dialogVisible=!0},sqlchange:function(t){var n=new d["Parser"]("mysql"),e={useRef:!1};n.feed(t);var c=n.toJsonSchemaArray(e),r=JSON.parse(JSON.stringify(c[0]));this.schema=Object.assign({},r),this.schemaKey=Date.now()},onError:function(t){console.log("json渲染错误了value:",t)},onSchemaChange:function(t){this.jsonformat=t,this.schema=JSON.stringify(t,null,2),this.output["model"]=this.handleModelOutput(t,this.isUnderScoreCase),this.output["service"]=this.handleServiceOutput(t),this.output["api"]=this.handleApiOutput(t),this.output["route"]=this.handleRouteOutput(t),this.output["js-api"]=this.handleJsApi(t),this.schemaKey=Date.now()},handleRouteOutput:function(t){var n=x(t.title).suffix,e=m(n),c=n,r="\n\t \t{\n\t\t\t".concat(c,' := admin.Group("').concat(c,'")\n\t\t\t').concat(c,'.GET("list", a.').concat(e,".List").concat(e,")\n\t\t\t").concat(c,'.POST("create", a.').concat(e,".Create").concat(e,")\n\t\t\t").concat(c,'.GET("detail", a.').concat(e,".Get").concat(e,"One)\n\t\t\t").concat(c,'.DELETE("del", a.').concat(e,".Delete").concat(e,")\n\t\t}\n\t\t");return r},handleJsApi:function(t){var n=x(t.title).suffix,e=m(n),c=n,r="\n import request from '@/utils/request';\n\texport function get".concat(e,"(data) {\n\treturn request({\n\t\turl: '/api/admin/").concat(c,"/detail',\n\t\tmethod: 'post',\n\t\tdata: data\n\t})\n\t}\n\n\texport function list").concat(e,"(data) {\n\treturn request({\n\t\turl: '/api/admin/").concat(c,"/list',\n\t\tmethod: 'post',\n\t\tdata: data\n\t})\n\t}\n\n\texport function list").concat(e,"Export(data) {\n\treturn request({\n\t\turl: '/api/admin/").concat(c,"/list',\n\t\tmethod: 'post',\n\t\tdata: data,\n\t\tresponseType: 'blob'\n\t})\n\t}\n\n\texport function create").concat(e,"(data) {\n\treturn request({\n\t\turl: '/api/admin/").concat(c,"/create',\n\t\tmethod: 'post',\n\t\tdata: data\n\t})\n\t}\n\n\texport function del").concat(e,"(data) {\n\treturn request({\n\t\turl: '/api/admin/").concat(c,"/del',\n\t\tmethod: 'post',\n\t\tdata: data\n\t})\n\t}\n\t\t");return r},handleApiOutput:function(t){var n=x(t.title).suffix,e=m(n),c='\n\t\tpackage api\n\n\t\timport (\n\t\t\t"Carp/internal/app/ginplus"\n\t\t\t"Carp/internal/app/model"\n\t\t\t"Carp/internal/app/schema"\n\t\t\t"Carp/internal/app/service"\n\t\t\t"Carp/pkg/errors"\n\t\t\t"Carp/pkg/utils"\n\t\t\t"Carp/pkg/utils/excelize"\n\n\t\t\t"github.com/gin-gonic/gin"\n\t\t\t"github.com/google/wire"\n\t\t\t"github.com/tealeg/xlsx"\n\t\t)\n\t\tvar '.concat(e,"ApiSet = wire.NewSet(wire.Struct(new(").concat(e,'Api), "*"))\n\n\t\ttype ').concat(e,"Api struct {\n\t\t\t").concat(e,"Service *service.").concat(e,"Service\n\t\t}\n\n\t\t// Create").concat(e," 创建").concat(e,"\n\t\tfunc (l *").concat(e,"Api) Create").concat(e,"(c *gin.Context) {\n\t\t\treq := &model.").concat(e,"{}\n\t\t\tif err := ginplus.ParseJSON(c, req); err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\terr := l.").concat(e,"Service.Create").concat(e,"(c.Request.Context(), req)\n\t\t\tif err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tginplus.ResOK(c)\n\t\t}\n\n\t\t// Get").concat(e,"One 获取单个").concat(e,"\n\t\tfunc (l *").concat(e,"Api) Get").concat(e,"One(c *gin.Context) {\n\t\t\treq := &schema.IDResult{}\n\t\t\tif err := ginplus.ParseQuery(c, req); err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tresp, err := l.").concat(e,"Service.Get").concat(e,"One(c.Request.Context(), req.ID)\n\t\t\tif err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tginplus.ResSuccess(c, resp)\n\t\t}\n\n\t\t// List").concat(e," 拉取").concat(e,"列表\n\t\tfunc (l *").concat(e,"Api) List").concat(e,"(c *gin.Context) {\n\t\t\treq := &model.").concat(e,"ReqParams{}\n\t\t\tif err := ginplus.ParseQuery(c, req); err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tresp, err := l.").concat(e,"Service.Get").concat(e,'List(c.Request.Context(), req)\n\t\t\tif err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif req.Export {\n\t\t\t f, err := excelize.Excelize(resp,\n \t\texcelize.ColumnFilter("create_time", excelize.FilterTimestamp),\n \t)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn ginplus.ResError(c, err)\n\t\t\t\t}\n\t\t\t\tginplus.ResExcel(c, f, "导出信息列表")\n\t\t\t\treturn\n\t\t\t}\n\t\t\tginplus.ResPage(c, resp)\n\t\t}\n\n\t\t// Delete').concat(e," 删除").concat(e,"\n\t\tfunc (l *").concat(e,"Api) Delete").concat(e,"(c *gin.Context) {\n\t\t\tvar req schema.IDResult\n\t\t\tif err := ginplus.ParseQuery(c, &req); err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif err := l.").concat(e,"Service.Del").concat(e,"(c.Request.Context(), req.ID); err != nil {\n\t\t\t\tginplus.ResError(c, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tginplus.ResOK(c)\n\t\t}\n\t ");return c},handleServiceOutput:function(t){var n=x(t.title).suffix,e=m(n),c=t.properties,r="";Object.keys(c).forEach((function(t){var n=c[t],e=m(t);Object.prototype.hasOwnProperty.call(n,"$comment")&&(r=e)}));var o=g(r),a='\n\tpackage service\n\timport (\n\t\t"Carp/internal/app/model"\n\t\t"Carp/internal/app/schema"\n\t\t"Carp/pkg/errors"\n\t\t"context"\n\t\t"encoding/json"\n\n\t\t"github.com/google/wire"\n\t)\n\tvar '.concat(e,"ServiceSet = wire.NewSet(wire.Struct(new(").concat(e,'Service), "*"))\n\n\ttype ').concat(e,"Service struct {\n\t\t").concat(e," *model.").concat(e,"Repo\n\t}\n\n\t// Get").concat(e,"List 获取").concat(e,"列表 \n\tfunc (a *").concat(e,"Service) Get").concat(e,"List(ctx context.Context, req *model.").concat(e,"ReqParams) (*schema.PaginationResult, error) {\n var l []*model.").concat(e,"\n cnt, err := a.").concat(e,".Q().Filter(req).List(ctx, &l)\n if err != nil {\n return nil, errors.WithStack(err)\n }\n\n pagination := &schema.PaginationResult{\n Count: cnt,\n List: l,\n PageNum: req.PageNum,\n PageSize: req.PageSize,\n }\n return pagination, nil\n }\n\n\t // Get").concat(e," 获取单个").concat(e," \n\t func (a *").concat(e,"Service) Get").concat(e,"One(ctx context.Context, ").concat(o," int64) (interface{}, error) {\n\t\tvar o model.").concat(e,"\n\t\terr := a.").concat(e,".Q().").concat(r,"(").concat(o,").One(ctx, &o)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn o, nil\n\t\t}\n\n\t// Del").concat(e," 删除").concat(e," \n\t func (a *").concat(e,"Service) Del").concat(e,"(ctx context.Context, ").concat(o," int64) error {\n\t var o model.").concat(e,"\n\t err := a.").concat(e,".Q().").concat(r,"(").concat(o,").One(ctx, &o)\n\t if err != nil {\n\t \treturn err\n\t }\n\t return a.").concat(e,".Delete(ctx, o.").concat(r,")\n\t }\n\n\t// Create").concat(e," 创建").concat(e," \n\tfunc (a *").concat(e,"Service) Create").concat(e,"(ctx context.Context, r *model.").concat(e,") error {\n\tif r.").concat(r," == 0 {\n\t\t_, err := a.").concat(e,".Create(ctx, r)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\treturn a.").concat(e,".Updates(ctx, r, a.").concat(e,".Q().").concat(r,"(r.").concat(r,"))\n\t}\n\n\t\t");return a},getMyStruct:function(t){var n=new XMLHttpRequest;n.open("POST","/sql",!1),n.setRequestHeader("Content-type","application/json"),console.log(this.sqlinput),n.send(JSON.stringify({content:this.sqlinput,camel:!this.isUnderScoreCase,table_prefix:t}));var e=n.responseText;return e},handleModelOutput:function(t,n){var e=x(t.title).prefix,c=this.getMyStruct(e);console.log("struct",c);var r=t.required,o=t.properties,a=x(t.title).suffix,i=m(a),s=g(i),u="";Object.keys(o).forEach((function(t){var n=o[t],e=m(t);Object.prototype.hasOwnProperty.call(n,"$comment")&&(u=e)}));var l=g(u),p="",f="",d="\n var ".concat(i,"Set = wire.NewSet(wire.Struct(new(").concat(i,'Repo), "*"))\n\n type ').concat(i,"Repo struct {\n DB *gorm.DB\n Cache cache.Cache\n }\n\n // GetTableName get sql table name.获取数据库名字\n func (repo *").concat(i,'Repo) TableName() string {\n return "').concat(t.title,'"\n }\n\n\t// PreTableName 获取表名前缀\n func (repo *').concat(i,'Repo) PreTableName(s string) string {\n b := strings.Builder{}\n b.WriteString(repo.TableName())\n b.WriteString(".")\n b.WriteString(s)\n return b.String()\n }\n\n // Delete By ID\n func (repo *').concat(i,"Repo) Delete(ctx context.Context, ").concat(l," int64) error {\n err := repo.DB.WithContext(ctx).Delete(&").concat(i,"{}, ").concat(l,").Error\n return err\n }\n\n // CacheKey").concat(u," CacheKey generate by ids\n func (repo *").concat(i,"Repo) CacheKey").concat(u,"(").concat(l,' int64) string {\n return strings.Join([]string{repo.TableName(), "').concat(l,'", utils.AsString(').concat(l,')}, "_")\n }\n\n // Updates 更新\n func (repo *').concat(i,"Repo) Updates(ctx context.Context, input *").concat(i,", q *").concat(s,'Q) error {\n Q := q.Query(ctx)\n key := ""\n if k, _ := Q.InstanceGet("cache_key"); k != nil {\n key = utils.AsString(k)\n }\n return repo.Cache.Exec(ctx, key, func(ctx context.Context) error {\n return Q.Updates(*input).Error\n })\n }\n\n // Save 更新,相比Updates会置空没有的字段\n func (repo *').concat(i,"Repo) Save(ctx context.Context, input *").concat(i,", q *").concat(s,'Q) error {\n Q := q.Query(ctx)\n key := ""\n if k, _ := Q.InstanceGet("cache_key"); k != nil {\n key = utils.AsString(k)\n }\n return repo.Cache.Exec(ctx, key, func(ctx context.Context) error {\n return Q.Save(*input).Error\n })\n }\n\n\t// updateColumn 更新\n\tfunc (repo *').concat(i,"Repo) updateColumn(ctx context.Context, column string, value interface{}, q *").concat(s,'Q) error {\n\t\tQ := q.Query(ctx)\n\t\tkey := ""\n\t\tif k, _ := Q.InstanceGet("cache_key"); k != nil {\n\t\t\tkey = utils.AsString(k)\n\t\t}\n\t\treturn repo.Cache.Exec(ctx, key, func(ctx context.Context) error {\n\t\t\treturn Q.UpdateColumn(column, value).Error\n\t\t})\n\t}\n\n // Create 创建\n func (repo *').concat(i,"Repo) Create(ctx context.Context, input *").concat(i,") (*").concat(i,", error) {\n if err := repo.DB.WithContext(ctx).Create(input).Error; err != nil {\n return nil, err\n }\n return input, nil\n }\n\n type ").concat(s,"Q struct {\n\t BaseModelFunc\n Repo *").concat(i,"Repo\n opts []GormOptionFunc\n }\n\n func (repo *").concat(i,"Repo) Q() *").concat(s,"Q {\n\t\tq := &").concat(s,"Q{\n\t\t\tRepo: repo,\n\t\t}\n\t\tq.BaseModelFunc = repo.PreTableName\n\t\treturn q\n }\n\n // List 查询列表\n func (q *").concat(s,'Q) List(ctx context.Context, value interface{}) (int64, error) {\n var cnt int64\n err := q.Query(ctx).Order("').concat(l,' desc").Find(value).Offset(-1).Count(&cnt).Error\n return cnt, err\n }\n\n //One 查询单个\n func (q *').concat(s,'Q) One(ctx context.Context, value interface{}) error {\n Q := q.Query(ctx)\n cache_key := ""\n // 缓存只适用于单行全列的情况\n if k, _ := Q.InstanceGet("cache_key"); len(q.opts) == 1 && k != nil {\n cache_key = utils.AsString(k)\n Q = Q.Select("*")\n }\n return q.Repo.Cache.Query(ctx, cache_key, value, func(ctx context.Context) error {\n err := Q.First(value).Error\n if errors.Is(err, gorm.ErrRecordNotFound) {\n return errors.ErrIdCanNotFound\n }\n return err\n })\n }\n\n\t// Query 内部查询命令\n func (q *').concat(s,"Q) Query(ctx context.Context) *gorm.DB {\n db := q.Repo.DB.WithContext(ctx).Model(&").concat(i,"{})\n for _, f := range q.opts {\n db = f(db)\n }\n return db\n }\n\n\tfunc (q *").concat(s,"Q) where(key string, value interface{}) {\n\t\tq.opts = append(q.opts, func(db *gorm.DB) *gorm.DB {\n\t\t\tdb = db.Where(q.Repo.PreTableName(key), value)\n\t\t\treturn db\n\t\t})\n\t}\n\n\tfunc (p *").concat(i,"ReqParams) GetPageNum() int { return p.PageNum }\n\tfunc (p *").concat(i,"ReqParams) GetPageSize() int { return p.PageSize }\n\tfunc (p *").concat(i,"ReqParams) GetFields() []string { return p.Fields }\n\tfunc (p *").concat(i,"ReqParams) GetExport() bool { return p.Export }\n\n type ").concat(i,'ReqParams struct {\n Export bool `json:"export,omitempty" form:"export"`\n\t\tQuery string `json:"query,omitempty" form:"query"`\n Fields []string `json:"fields,omitempty" form:"fields"`\n PageNum int `json:"pageNum,omitempty" form:"pageNum"`\n PageSize int `json:"pageSize,omitempty" form:"pageSize"`\n '),h="",y="}",b="",C="\n\t // Filter 自动组合查询\n func (opt *".concat(s,"Q) Filter(para *").concat(i,"ReqParams) *").concat(s,"Q {\n \tif para != nil {\n\t\t\t\tif para.Export {\n\t\t\t\t\tpara.PageNum = 1\n\t\t\t\t\tpara.PageSize = 10000\n\t\t\t\t}\n\t\t\t\topt.opts = append(opt.opts, opt.Select(para.Fields...))\n\t\t\t\topt.opts = append(opt.opts, opt.Pagination(para))\n "),q="",S="}\n return opt}";Object.keys(o).forEach((function(t){var e=o[t],c=m(t),a=g(m(t)),l="".concat(i)+m(t),d=v(e.type);if(Object.prototype.hasOwnProperty.call(e,"enum")&&e.enum.length>0){var x=e.enum,y=e.enumDesc,C="\n type ".concat(l," ").concat(d,"\n const (\n "),S="",R=")";y.split("\n").forEach((function(n,e){var c=x[e],r="\n ".concat(l).concat(n," ").concat(l," = ").concat(c," \n\n "),o="\n func (g ".concat(l,") ").concat(n,"() bool { return g == ").concat(l).concat(n," } \n\n func (repo *").concat(i,"Repo) ").concat(n,'(ctx context.Context, id int64) error {\n \treturn repo.updateColumn(ctx, "').concat(t,'", ').concat(l).concat(n,", repo.Q().").concat(u,"(id))\n } \n\n ");S+=r,p+=o})),f+=C+S+R}t.indexOf("_time")>-1&&(h+=n?"".concat(c,'Interval []interface{} `json:"').concat(t,'|interval,omitempty" form:"').concat(t,'|interval"`\n'):"".concat(c,'Interval []interface{} `json:"').concat(a,'|interval,omitempty" form:"').concat(a,'|interval"`\n'),q+="\n if len(para.Query.".concat(c,"Interval) > 0 {\n\t\t\t\t opt.").concat(c,"Interval(para.Query.").concat(c,"Interval)\n\t\t\t }\n "),b+="\n func (q *".concat(s,"Q) ").concat(c,"Interval(interval []interface{}) *").concat(s,'Q {\n fn := func(db *gorm.DB) *gorm.DB {\n \tdb = db.Clauses(\n TimeStampDate{\n Column: "').concat(t,'",\n Values: interval,\n })\n\t\t return db\n\t }\n q.opts = append(q.opts, fn)\n return q\n }\n \n\n ')),t.indexOf("_id")>-1&&(h+=n?"".concat(c,"In []").concat(d,' `json:"').concat(t,'|in,omitempty" form:"').concat(t,'|in"`\n'):"".concat(c,"In []").concat(d,' `json:"').concat(a,'|in,omitempty" form:"').concat(a,'|in"`\n'),q+="\n if len(para.".concat(c,"In) > 0 {\n\t\t\t\t opt.").concat(c,"In(para.").concat(c,"In...)\n\t\t\t }\n "),b+="\n func (q *".concat(s,"Q) ").concat(c,"In(").concat(c,"s ...").concat(d,") *").concat(s,'Q {\n\t\t q.where("').concat(t,' in (?)", ').concat(c,"s)\n return q\n }\n \n\n ")),r.indexOf(t)>-1&&(h+=n?"".concat(c," ").concat(d,' `json:"').concat(t,',omitempty" form:"').concat(t,'"`\n'):"".concat(c," ").concat(d,' `json:"').concat(a,',omitempty" form:"').concat(a,'"`\n'),"string"==d?q+="\n if para.".concat(c,' != "" {\n opt.').concat(c,"(para.").concat(c,")\n }\n "):"id"!==t&&(q+="\n if para.".concat(c," != 0 {\n opt.").concat(c,"(para.").concat(c,")\n }\n ")),b+="\n func (q *".concat(s,"Q) ").concat(c,"(").concat(c," ").concat(d,") *").concat(s,'Q {\n q.where("').concat(t,' = ?", ').concat(c,")\n return q\n }\n \n\n "),"string"==d&&(h+=n?"".concat(c,"Like ").concat(d,' `json:"').concat(t,'|like,omitempty" form:"').concat(t,'|like"`\n'):"".concat(c,"Like ").concat(d,' `json:"').concat(a,'|like,omitempty" form:"').concat(a,'|like"`\n'),q+="\n if para.".concat(c,'Like != "" {\n opt.').concat(c,"Like(para.").concat(c,"Like)\n }\n "),b+="\n func (q *".concat(s,"Q) ").concat(c,"Like(").concat(c," ").concat(d,") *").concat(s,'Q {\n q.where("').concat(t,' like ?", "%"+').concat(c,'+"%")\n return q\n }\n \n\n ')))}));var R=c+f+p+d+h+y+"\n"+b+C+q+S;return R}}},b=y,C=e("2877"),q=Object(C["a"])(b,p,f,!1,null,null,null),S=q.exports,R={name:"App",components:{HelloWorld:S}},O=R,k=(e("034f"),Object(C["a"])(O,u,l,!1,null,null,null)),E=k.exports;o["default"].use(r.a,{size:"small"}),o["default"].use(s.a),o["default"].use(a["a"]),o["default"].config.productionTip=!1,new o["default"]({el:"#app",render:function(t){return t(E)}})},"85ec":function(t,n,e){}}); \ No newline at end of file