diff --git a/apps/develop/entity/dev_gen_table.go b/apps/develop/entity/dev_gen_table.go new file mode 100644 index 0000000..c885414 --- /dev/null +++ b/apps/develop/entity/dev_gen_table.go @@ -0,0 +1,28 @@ +package entity + +import "pandax/base/model" + +type DevGenTable struct { + TableId int64 `gorm:"table_id,primary" json:"tableId"` // 编号 + TableName string `gorm:"table_name" json:"tableName"` // 表名称 + TableComment string `gorm:"table_comment" json:"tableComment"` // 表描述 + ClassName string `gorm:"class_name" json:"className"` // 实体类名称 + TplCategory string `gorm:"tpl_category" json:"tplCategory"` // 使用的模板(crud单表操作 tree树表操作) + PackageName string `gorm:"package_name" json:"packageName"` // 生成包路径 + ModuleName string `gorm:"module_name" json:"moduleName"` // 生成模块名 + BusinessName string `gorm:"business_name" json:"businessName"` // 生成业务名 + FunctionName string `gorm:"function_name" json:"functionName"` // 生成功能名 + FunctionAuthor string `gorm:"function_author" json:"functionAuthor"` // 生成功能作者 + Options string `gorm:"options" json:"options"` // 其它生成选项 + Remark string `gorm:"remark" json:"remark"` // 备注 + Columns []DevGenTableColumn `gorm:"-" json:"columns"` // 字段信息 + PkColumn DevGenTableColumn `gorm:"-" json:"pkColumn"` // 主键列信息 + model.BaseModel +} + +type ToolsGenTableExtend struct { + DevGenTable + TreeCode string `gorm:"-" json:"treeCode"` // 树编码字段 + TreeParentCode string `gorm:"-" json:"treeParentCode"` // 树父编码字段 + TreeName string `gorm:"-" json:"treeName"` // 树名称字段 +} diff --git a/apps/develop/entity/dev_gen_table_column.go b/apps/develop/entity/dev_gen_table_column.go new file mode 100644 index 0000000..1c72467 --- /dev/null +++ b/apps/develop/entity/dev_gen_table_column.go @@ -0,0 +1,29 @@ +package entity + +type DevGenTableColumn struct { + ColumnId int64 `gorm:"column_id,primary" json:"columnId"` // 编号 + TableId int64 `gorm:"table_id" json:"tableId"` // 归属表编号 + TableName string `gorm:"table_name" json:"tableName"` + ColumnName string `gorm:"column_name" json:"columnName"` // 列名称 + ColumnComment string `gorm:"column_comment" json:"columnComment"` // 列描述 + ColumnType string `gorm:"column_type" json:"columnType"` // 列类型 + GoType string `gorm:"go_type" json:"goType"` // Go类型 + GoField string `gorm:"go_field" json:"goField"` // Go字段名 + HtmlField string `gorm:"html_field" json:"htmlField"` // html字段名 + IsPk string `gorm:"is_pk" json:"isPk"` // 是否主键(1是) + IsIncrement string `gorm:"is_increment" json:"isIncrement"` // 是否自增(1是) + IsRequired string `gorm:"is_required" json:"isRequired"` // 是否必填(1是) + IsInsert string `gorm:"is_insert" json:"isInsert"` // 是否为插入字段(1是) + IsEdit string `gorm:"is_edit" json:"isEdit"` // 是否编辑字段(1是) + IsList string `gorm:"is_list" json:"isList"` // 是否列表字段(1是) + IsQuery string `gorm:"is_query" json:"isQuery"` // 是否查询字段(1是) + QueryType string `gorm:"query_type" json:"queryType"` // 查询方式(等于、不等于、大于、小于、范围) + HtmlType string `gorm:"html_type" json:"htmlType"` // 显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件) + DictType string `gorm:"dict_type" json:"dictType"` // 字典类型 + Sort int `gorm:"sort" json:"sort"` // 排序 + LinkTableName string `gorm:"link_table_name" json:"linkTableName"` // 关联表名 + LinkTableClass string `gorm:"link_table_class" json:"linkTableClass"` // 关联表类名 + LinkTablePackage string `gorm:"link_table_package" json:"linkTablePackage"` // 关联表包名 + LinkLabelId string `gorm:"link_label_id" json:"linkLabelId"` // 关联表键名 + LinkLabelName string `gorm:"link_label_name" json:"linkLabelName"` // 关联表字段值 +} diff --git a/apps/develop/services/gen_table.go b/apps/develop/services/gen_table.go new file mode 100644 index 0000000..8a36a61 --- /dev/null +++ b/apps/develop/services/gen_table.go @@ -0,0 +1,206 @@ +package services + +import ( + "errors" + "pandax/apps/develop/entity" + "pandax/base/biz" + "pandax/base/config" + "pandax/base/global" + "strings" +) + +/** + * @Description + * @Author Panda + * @Date 2021/12/31 8:58 + **/ + +type ( + SysGenTableModel interface { + FindDbTablesListPage(page, pageSize int, data entity.DevGenTable) (*[]entity.DevGenTable, int64) + FindDbTableOne(tableName string) *entity.DevGenTable + + // 导入表数据 + Insert(data entity.DevGenTable) + FindOne(dictCode int64) *entity.DevGenTable + FindTree(data entity.DevGenTable) *[]entity.ToolsGenTableExtend + FindListPage(page, pageSize int, data entity.DevGenTable) (*[]entity.DevGenTable, int64) + Update(data entity.DevGenTable) *entity.DevGenTable + Delete(dictCode []int64) + } + + devGenTableModelImpl struct { + table string + } +) + +var DevGenTableModelDao SysGenTableModel = &devGenTableModelImpl{ + table: "dev_gen_tables", +} + +func (m *devGenTableModelImpl) FindDbTablesListPage(page, pageSize int, data entity.DevGenTable) (*[]entity.DevGenTable, int64) { + list := make([]entity.DevGenTable, 0) + var total int64 = 0 + offset := pageSize * (page - 1) + if config.Conf.Server.DbType != "mysql" && config.Conf.Server.DbType == "postgresql" { + biz.ErrIsNil(errors.New("只支持mysql和postgresql数据库"), "只支持mysql和postgresql数据库") + } + db := global.Db.Table("information_schema.tables") + db = db.Where("TABLE_NAME not in (select table_name from `" + config.Conf.Gen.Dbname + "`.sys_tables) ") + db = db.Where("table_schema= ? ", config.Conf.Gen.Dbname) + + if data.TableName != "" { + db = db.Where("table_name = ?", data.TableName) + } + + err := db.Count(&total).Error + err = db.Limit(pageSize).Offset(offset).Find(&list).Error + biz.ErrIsNil(err, "查询配置分页列表信息失败") + return &list, total +} + +func (m *devGenTableModelImpl) FindDbTableOne(tableName string) *entity.DevGenTable { + resData := new(entity.DevGenTable) + if config.Conf.Server.DbType != "mysql" && config.Conf.Server.DbType == "postgresql" { + biz.ErrIsNil(errors.New("只支持mysql和postgresql数据库"), "只支持mysql和postgresql数据库") + } + db := global.Db.Table("information_schema.tables") + db = db.Where("table_schema= ? ", config.Conf.Gen.Dbname) + biz.IsTrue(tableName != "", "table name cannot be empty!") + + db = db.Where("table_name = ?", tableName) + err := db.First(&resData).Error + biz.ErrIsNil(err, err.Error()) + return resData +} + +func (m *devGenTableModelImpl) Insert(dgt entity.DevGenTable) { + err := global.Db.Table(m.table).Create(&dgt).Error + biz.ErrIsNil(err, "新增生成代码表失败") + for i := 0; i < len(dgt.Columns); i++ { + dgt.Columns[i].TableId = dgt.TableId + SysSysConfigModelDao.Insert(dgt.Columns[i]) + } +} + +func (m *devGenTableModelImpl) FindOne(tableId int64) *entity.DevGenTable { + resData := new(entity.DevGenTable) + err := global.Db.Table(m.table).Where("`table_id` = ?", tableId).First(resData).Error + biz.ErrIsNil(err, "查询配置信息失败") + return resData +} + +func (m *devGenTableModelImpl) FindTree(data entity.DevGenTable) *[]entity.ToolsGenTableExtend { + resData := make([]entity.ToolsGenTableExtend, 0) + db := global.Db.Table(m.table) + + if data.TableName != "" { + db = db.Where("table_name = ?", data.TableName) + } + if data.TableId != 0 { + db = db.Where("table_id = ?", data.TableId) + } + if data.TableComment != "" { + db = db.Where("table_comment = ?", data.TableComment) + } + err := db.Find(&resData).Error + biz.ErrIsNil(err, err.Error()) + for i := 0; i < len(resData); i++ { + var col entity.DevGenTableColumn + col.TableId = resData[i].TableId + columns := SysSysConfigModelDao.FindList(col) + resData[i].Columns = *columns + } + return &resData +} + +func (m *devGenTableModelImpl) FindListPage(page, pageSize int, data entity.DevGenTable) (*[]entity.DevGenTable, int64) { + list := make([]entity.DevGenTable, 0) + var total int64 = 0 + offset := pageSize * (page - 1) + + db := global.Db.Table(m.table) + // 此处填写 where参数判断 + if data.TableName != "" { + db = db.Where("table_name = ?", data.TableName) + } + if data.TableComment != "" { + db = db.Where("table_comment = ?", data.TableComment) + } + db.Where("delete_time IS NULL") + err := db.Count(&total).Error + err = db.Limit(pageSize).Offset(offset).Find(&list).Error + biz.ErrIsNil(err, "查询生成代码列表信息失败") + return &list, total +} + +func (m *devGenTableModelImpl) Update(data entity.DevGenTable) *entity.DevGenTable { + err := global.Db.Table(m.table).Model(&data).Updates(&data).Error + biz.ErrIsNil(err, "修改生成代码信息失败") + + tableNames := make([]string, 0) + for i := range data.Columns { + if data.Columns[i].LinkTableName != "" { + tableNames = append(tableNames, data.Columns[i].LinkTableName) + } + } + + tables := make([]entity.DevGenTable, 0) + 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()) + for i := range tables { + tableMap[tables[i].TableName] = &tables[i] + } + } + + for i := 0; i < len(data.Columns); i++ { + if data.Columns[i].LinkTableName != "" { + 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) + } + } + } + SysSysConfigModelDao.Update(data.Columns[i]) + } + return &data +} + +func (e *devGenTableModelImpl) DeleteTables(tableId int64) bool { + var err error + success := false + tx := global.Db.Begin() + defer func() { + if err != nil { + tx.Rollback() + } else { + tx.Commit() + } + }() + if err = tx.Table("sys_tables").Delete(entity.DevGenTable{}, "table_id = ?", tableId).Error; err != nil { + return success + } + if err = tx.Table("sys_columns").Delete(entity.DevGenTableColumn{}, "table_id = ?", tableId).Error; err != nil { + return success + } + success = true + return success +} + +func (m *devGenTableModelImpl) Delete(configIds []int64) { + err := global.Db.Table(m.table).Delete(&entity.DevGenTable{}, "`table_id` in (?)", configIds).Error + biz.ErrIsNil(err, "删除生成代码信息失败") + return +} diff --git a/apps/develop/services/gen_table_column.go b/apps/develop/services/gen_table_column.go new file mode 100644 index 0000000..2381da0 --- /dev/null +++ b/apps/develop/services/gen_table_column.go @@ -0,0 +1,102 @@ +package services + +import ( + "errors" + "pandax/apps/develop/entity" + "pandax/base/biz" + "pandax/base/config" + "pandax/base/global" +) + +/** + * @Description + * @Author Panda + * @Date 2021/12/31 14:44 + **/ + +type ( + SysGenTableColumnModel interface { + FindDbTablesColumnListPage(page, pageSize int, data entity.DevGenTableColumn) (*[]entity.DevGenTableColumn, int64) + FindDbTableColumnList(tableName string) *[]entity.DevGenTableColumn + + Insert(data entity.DevGenTableColumn) *entity.DevGenTableColumn + FindList(data entity.DevGenTableColumn) *[]entity.DevGenTableColumn + Update(data entity.DevGenTableColumn) *entity.DevGenTableColumn + } + + devTableColumnModelImpl struct { + table string + ColumnTypeStr []string //数据库字符串类型 + ColumnTypeTime []string //数据库时间类型 + ColumnTypeNumber []string //数据库数字类型 + ColumnNameNotEdit []string //页面不需要编辑字段 + ColumnNameNotList []string //页面不需要显示的列表字段 + ColumnNameNotQuery []string //页面不需要查询字段 + } +) + +var SysSysConfigModelDao SysGenTableColumnModel = &devTableColumnModelImpl{ + table: "dev_gen_table_columns", + ColumnTypeStr: []string{"char", "varchar", "narchar", "varchar2", "tinytext", "text", "mediumtext", "longtext"}, + ColumnTypeTime: []string{"datetime", "time", "date", "timestamp"}, + ColumnTypeNumber: []string{"tinyint", "smallint", "mediumint", "int", "number", "integer", "bigint", "float", "float", "double", "decimal"}, + ColumnNameNotEdit: []string{"id", "created_by", "created_at", "updated_by", "updated_at", "deleted_at"}, + ColumnNameNotList: []string{"id", "created_by", "updated_by", "created_at", "updated_at", "deleted_at"}, + ColumnNameNotQuery: []string{"id", "created_by", "updated_by", "created_at", "updated_at", "deleted_at", "remark"}, +} + +func (m *devTableColumnModelImpl) FindDbTablesColumnListPage(page, pageSize int, data entity.DevGenTableColumn) (*[]entity.DevGenTableColumn, int64) { + list := make([]entity.DevGenTableColumn, 0) + var total int64 = 0 + offset := pageSize * (page - 1) + if config.Conf.Server.DbType != "mysql" && config.Conf.Server.DbType == "postgresql" { + biz.ErrIsNil(errors.New("只支持mysql和postgresql数据库"), "只支持mysql和postgresql数据库") + } + + db := global.Db.Table("information_schema.COLUMNS") + db = db.Where("table_schema= ? ", config.Conf.Gen.Dbname) + + if data.TableName != "" { + db = db.Where("table_name = ?", data.TableName) + } + + err := db.Count(&total).Error + err = db.Limit(pageSize).Offset(offset).Find(&list).Error + biz.ErrIsNil(err, "查询生成代码列表信息失败") + return &list, total +} + +func (m *devTableColumnModelImpl) FindDbTableColumnList(tableName string) *[]entity.DevGenTableColumn { + resData := make([]entity.DevGenTableColumn, 0) + if config.Conf.Server.DbType != "mysql" && config.Conf.Server.DbType == "postgresql" { + biz.ErrIsNil(errors.New("只支持mysql和postgresql数据库"), "只支持mysql和postgresql数据库") + } + db := global.Db.Table("information_schema.columns") + db = db.Where("table_schema = ? ", config.Conf.Gen.Dbname) + biz.IsTrue(tableName != "", "table name cannot be empty!") + + db = db.Where("table_name = ?", tableName) + err := db.First(&resData).Error + biz.ErrIsNil(err, err.Error()) + return &resData +} + +func (m *devTableColumnModelImpl) Insert(dgt entity.DevGenTableColumn) *entity.DevGenTableColumn { + err := global.Db.Table(m.table).Create(&dgt).Error + biz.ErrIsNil(err, "新增生成代码字段表失败") + return &dgt +} + +func (m *devTableColumnModelImpl) FindList(data entity.DevGenTableColumn) *[]entity.DevGenTableColumn { + list := make([]entity.DevGenTableColumn, 0) + err := global.Db.Table(m.table).Where("table_id = ?", data.TableId).Find(&list).Error + + biz.ErrIsNil(err, "查询生成代码字段表信息失败") + return &list +} + +func (m *devTableColumnModelImpl) Update(data entity.DevGenTableColumn) *entity.DevGenTableColumn { + err := global.Db.Table(m.table).Model(&data).Updates(&data).Error + biz.ErrIsNil(err, "修改生成代码字段表失败") + return &data +} diff --git a/apps/system/services/api.go b/apps/system/services/api.go index cd91cb9..027b64b 100644 --- a/apps/system/services/api.go +++ b/apps/system/services/api.go @@ -24,7 +24,7 @@ type ( } ) -var SysSysApiModelDao = &sysSysApiModelImpl{ +var SysSysApiModelDao SysApiModel = &sysSysApiModelImpl{ table: `sys_apis`, } diff --git a/apps/system/services/config.go b/apps/system/services/config.go index 9952e14..376c328 100644 --- a/apps/system/services/config.go +++ b/apps/system/services/config.go @@ -21,7 +21,7 @@ type ( } ) -var SysSysConfigModelDao = &sysSysConfigModelImpl{ +var SysSysConfigModelDao SysConfigModel = &sysSysConfigModelImpl{ table: `sys_configs`, } diff --git a/apps/system/services/dept.go b/apps/system/services/dept.go index 9954e0a..1b04e5e 100644 --- a/apps/system/services/dept.go +++ b/apps/system/services/dept.go @@ -25,7 +25,7 @@ type ( } ) -var SysDeptModelDao = &sysDeptModelImpl{ +var SysDeptModelDao SysDeptModel = &sysDeptModelImpl{ table: `sys_depts`, } diff --git a/apps/system/services/dict_data.go b/apps/system/services/dict_data.go index 0bc49f7..cc52239 100644 --- a/apps/system/services/dict_data.go +++ b/apps/system/services/dict_data.go @@ -21,7 +21,7 @@ type ( } ) -var SysDictDataModelDao = &sysDictDataModelImpl{ +var SysDictDataModelDao SysDictDataModel = &sysDictDataModelImpl{ table: `sys_dict_data`, } diff --git a/apps/system/services/dict_type.go b/apps/system/services/dict_type.go index 53dee53..086a958 100644 --- a/apps/system/services/dict_type.go +++ b/apps/system/services/dict_type.go @@ -21,7 +21,7 @@ type ( } ) -var SysDictTypeModelDao = &sysDictTypeModelImpl{ +var SysDictTypeModelDao SysDictTypeModel = &sysDictTypeModelImpl{ table: `sys_dict_types`, } diff --git a/apps/system/services/user.go b/apps/system/services/user.go index b7680b2..115b300 100644 --- a/apps/system/services/user.go +++ b/apps/system/services/user.go @@ -25,7 +25,6 @@ type ( } ) -var con = global.Db var SysUserModelDao SysUserModel = &sysUserModelImpl{ table: `sys_users`, } diff --git a/base/config/config.go b/base/config/config.go index d45dd94..f7414b5 100644 --- a/base/config/config.go +++ b/base/config/config.go @@ -44,6 +44,7 @@ type Config struct { Mysql *Mysql `yaml:"mysql"` Postgresql *Postgresql `yaml:"postgresql"` Casbin *Casbin `yaml:"casbin"` + Gen *Gen `yaml:"gen"` Log *Log `yaml:"log"` } diff --git a/base/config/gen.go b/base/config/gen.go new file mode 100644 index 0000000..fc6468c --- /dev/null +++ b/base/config/gen.go @@ -0,0 +1,11 @@ +package config + +/** + * @Description + * @Author Panda + * @Date 2021/12/31 15:13 + **/ +type Gen struct { + Dbname string `mapstructure:"dbname" json:"dbname" yaml:"dbname"` + Frontpath string `mapstructure:"frontpath" json:"frontpath" yaml:"frontpath"` +} diff --git a/config.yml b/config.yml index 19588ea..d325cc6 100644 --- a/config.yml +++ b/config.yml @@ -55,6 +55,12 @@ postgresql: casbin: model-path: './resource/rbac_model.conf' +gen: + # 代码生成读取的数据库名称 + dbname: pandax + # 代码生成是使用前端代码存放位置,需要指定到src文件夹,相对路径 + frontpath: ../PandaUi/src + log: # 日志等级, trace, debug, info, warn, error, fatal level: info diff --git a/resource/template/go/api.template b/resource/template/go/api.template new file mode 100644 index 0000000..8d83378 --- /dev/null +++ b/resource/template/go/api.template @@ -0,0 +1,188 @@ +// ========================================================================== +// GFast自动生成控制器相关代码,只生成一次,按需修改,再次生成不会覆盖. +// 生成日期:{{.table.CreateTime}} +// 生成路径: {{.table.PackageName}}/api/{{.table.BusinessName}}.go +// 生成人:{{.table.FunctionAuthor}} +// ========================================================================== +//// +{{$structName := .table.BusinessName | CaseCamelLower}} + +package api + +{{$hasGStr:=false}} +{{$gjsonTag:=false}} +{{$libTag:=false}} +{{range $index,$column:=.table.Columns}} +{{if eq $column.HtmlType "checkbox"}} +{{$hasGStr = true}} +{{else if eq $column.HtmlType "images" "file" "files"}} +{{$gjsonTag = true}} +{{$libTag = true}} +{{end}} +{{end}} + +import ( + {{if ne $.table.ModuleName "system"}} + sysApi "gfast/app/system/api" + {{end}} + {{if $libTag}} + "gfast/library" + {{end}} + "{{.table.PackageName}}/dao" + "{{.table.PackageName}}/service" + "github.com/gogf/gf/frame/g" + "github.com/gogf/gf/net/ghttp" + "github.com/gogf/gf/util/gvalid" + {{if $hasGStr}} + "github.com/gogf/gf/text/gstr" + {{end}} + {{if $gjsonTag}} + "github.com/gogf/gf/encoding/gjson" + {{end}} +) + +type {{$structName}} struct { + {{if ne $.table.ModuleName "system"}} + sysApi.SystemBase + {{else}} + SystemBase + {{end}} +} + +var {{.table.ClassName}} = new({{$structName}}) + +// List 列表 +func (c *{{$structName}}) List(r *ghttp.Request) { + var req *dao.{{.table.ClassName}}SearchReq + //获取参数 + if err := r.Parse(&req); err != nil { + c.FailJsonExit(r, err.(gvalid.Error).FirstString()) + } + req.Ctx = r.GetCtx() + total, page, list, err := service.{{.table.ClassName}}.GetList(req) + if err != nil { + c.FailJsonExit(r, err.Error()) + } + result := g.Map{ + "currentPage": page, + "total": total, + "list": list, + } + c.SusJsonExit(r, result) +} + +// Add 添加 +func (c *{{$structName}}) Add(r *ghttp.Request) { + var req *dao.{{.table.ClassName}}AddReq + //获取参数 + if err := r.Parse(&req); err != nil { + c.FailJsonExit(r, err.(gvalid.Error).FirstString()) + } + {{range $index,$column:= .table.Columns}} + {{if eq $column.ColumnName "created_by"}} + req.CreatedBy = c.GetCurrentUser(r.GetCtx()).GetUserId() + {{end}} + {{if eq $column.HtmlType "checkbox"}} + {{$column.HtmlField}} := r.GetStrings("{{$column.HtmlField}}") + if len({{$column.HtmlField}})>0{ + req.{{$column.GoField}} = gstr.Join({{$column.HtmlField}},",") + }else{ + req.{{$column.GoField}} = "" + } + {{else if eq $column.HtmlType "images" "file" "files"}} + up{{$column.GoField}}:=gjson.New(req.{{$column.GoField}}) + for _,obj:=range up{{$column.GoField}}.Array(){ + mp := obj.(g.MapStrAny) + var err error + mp["url"],err = library.GetFilesPath(mp["url"].(string)) + if err!=nil{ + c.FailJsonExit(r, err.Error()) + } + } + req.{{$column.GoField}} = up{{$column.GoField}}.MustToJsonString() + {{end}} + {{end}} + err := service.{{.table.ClassName}}.Add(r.GetCtx(),req) + if err != nil { + c.FailJsonExit(r, err.Error()) + } + c.SusJsonExit(r, "添加成功") +} + + +// Get 获取 +func (c *{{$structName}}) Get(r *ghttp.Request) { + id := r.Get{{$.table.PkColumn.GoType | CaseCamel}}("id") + info, err := service.{{.table.ClassName}}.GetInfoById(r.GetCtx(),id) + if err != nil { + c.FailJsonExit(r, err.Error()) + } + c.SusJsonExit(r, info) +} + +// Edit 修改 +func (c *{{$structName}}) Edit(r *ghttp.Request) { + var req *dao.{{.table.ClassName}}EditReq + //获取参数 + if err := r.Parse(&req); err != nil { + c.FailJsonExit(r, err.(gvalid.Error).FirstString()) + } + {{range $index,$column:= .table.Columns}} + {{if eq $column.ColumnName "updated_by"}} + req.UpdatedBy = c.GetCurrentUser(r.GetCtx()).GetUserId() //获取登陆用户id + {{end}} + {{if eq $column.HtmlType "checkbox"}} + {{$column.HtmlField}} := r.GetStrings("{{$column.HtmlField}}") + if len({{$column.HtmlField}})>0{ + req.{{$column.GoField}} = gstr.Join({{$column.HtmlField}},",") + }else{ + req.{{$column.GoField}} = "" + } + {{else if eq $column.HtmlType "images" "file" "files"}} + up{{$column.GoField}}:=gjson.New(req.{{$column.GoField}}) + for _,obj:=range up{{$column.GoField}}.Array(){ + mp := obj.(g.MapStrAny) + var err error + mp["url"],err = library.GetFilesPath(mp["url"].(string)) + if err!=nil{ + c.FailJsonExit(r, err.Error()) + } + } + req.{{$column.GoField}} = up{{$column.GoField}}.MustToJsonString() + {{end}} + {{end}} + err := service.{{.table.ClassName}}.Edit(r.GetCtx(),req) + if err != nil { + c.FailJsonExit(r, err.Error()) + } + c.SusJsonExit(r, "修改成功") +} + + +// Delete 删除 +func (c *{{$structName}}) Delete(r *ghttp.Request) { + ids := r.GetInts("ids") + err := service.{{.table.ClassName}}.DeleteByIds(r.GetCtx(),ids) + if err != nil { + c.FailJsonExit(r, err.Error()) + } + c.SusJsonExit(r, "删除成功") +} + +{{range $index,$column:= .table.Columns}} +{{if and (HasSuffix $column.ColumnName "status") (eq $column.IsList "1") }} +// Change{{$column.GoField}} 修改状态 +func (c *{{$structName}}) Change{{$column.GoField}}(r *ghttp.Request){ + var req *dao.{{$.table.ClassName}}{{$column.GoField}}Req + //获取参数 + if err := r.Parse(&req); err != nil { + c.FailJsonExit(r, err.(gvalid.Error).FirstString()) + } + if err := service.{{$.table.ClassName}}.Change{{$column.GoField}}(r.GetCtx(),req); err != nil { + c.FailJsonExit(r, err.Error()) + } else { + c.SusJsonExit(r, "状态设置成功") + } +} +{{end}} +{{end}} \ No newline at end of file diff --git a/resource/template/go/dao_internal.template b/resource/template/go/dao_internal.template new file mode 100644 index 0000000..8ef9de5 --- /dev/null +++ b/resource/template/go/dao_internal.template @@ -0,0 +1,67 @@ +// ========================================================================== +// GFast自动生成dao internal操作代码,无需手动修改,重新生成会自动覆盖. +// 生成日期:{{.table.CreateTime}} +// 生成路径: {{.table.PackageName}}/dao/internal/{{.table.TableName}}.go +// 生成人:{{.table.FunctionAuthor}} +// ========================================================================== +//// +package internal + + +import ( + "context" + "github.com/gogf/gf/database/gdb" + "github.com/gogf/gf/frame/g" +) + + +// {{.table.ClassName}}Dao is the manager for logic model data accessing and custom defined data operations functions management. +type {{.table.ClassName}}Dao struct { + Table string // Table is the underlying table name of the DAO. + Group string // Group is the database configuration group name of current DAO. + Columns {{.table.ClassName}}Columns // Columns is the short type for Columns, which contains all the column names of Table for convenient usage. +} + + +// {{.table.ClassName}}Columns defines and stores column names for table {{.table.TableName}}. +type {{.table.ClassName}}Columns struct { + {{range $index, $column := .table.Columns}} + {{$column.GoField}} string // {{$column.ColumnComment}} + {{end}} +} + +var {{.table.BusinessName | CaseCamelLower}}Columns = {{.table.ClassName}}Columns{ + {{range $index, $column := .table.Columns}} + {{$column.GoField}}: "{{$column.ColumnName}}", + {{end}} +} + +// New{{.table.ClassName}}Dao creates and returns a new DAO object for table data access. +func New{{.table.ClassName}}Dao() *{{.table.ClassName}}Dao { + return &{{.table.ClassName}}Dao{ + Group: "default", + Table: "{{.table.TableName}}", + Columns:{{.table.BusinessName | CaseCamelLower}}Columns, + } +} + + +// DB retrieves and returns the underlying raw database management object of current DAO. +func (dao *{{.table.ClassName}}Dao) DB() gdb.DB { + return g.DB(dao.Group) +} + +// Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation. +func (dao *{{.table.ClassName}}Dao) Ctx(ctx context.Context) *gdb.Model { + return dao.DB().Model(dao.Table).Safe().Ctx(ctx) +} + +// Transaction wraps the transaction logic using function f. +// It rollbacks the transaction and returns the error from function f if it returns non-nil error. +// It commits the transaction and returns nil if function f returns nil. +// +// Note that, you should not Commit or Rollback the transaction in function f +// as it is automatically handled by this function. +func (dao *{{.table.ClassName}}Dao) Transaction(ctx context.Context, f func(ctx context.Context, tx *gdb.TX) error) (err error) { + return dao.Ctx(ctx).Transaction(ctx, f) +} \ No newline at end of file diff --git a/resource/template/go/entity.template b/resource/template/go/entity.template new file mode 100644 index 0000000..f4c9cbf --- /dev/null +++ b/resource/template/go/entity.template @@ -0,0 +1,86 @@ +// ========================================================================== +// GFast自动生成dao操作代码,无需手动修改,重新生成不会自动覆盖. +// 生成日期:{{.table.CreateTime}} +// 生成路径: {{.table.PackageName}}/dao/{{.table.TableName}}.go +// 生成人:{{.table.FunctionAuthor}} +// ========================================================================== +//// +package dao + +{{$hasGTime:=false}} +{{range $index, $column := .table.Columns}} +{{if eq $column.GoType "Time"}} +{{$hasGTime = true}} +{{end}} +{{end}} + +import ( + comModel "gfast/app/common/model" + "{{.table.PackageName}}/dao/internal" + {{if $hasGTime}} + "github.com/gogf/gf/os/gtime" + {{end}} +) + + +// {{.table.BusinessName | CaseCamelLower}}Dao is the manager for logic model data accessing and custom defined data operations functions management. +// You can define custom methods on it to extend its functionality as you wish. +type {{.table.BusinessName | CaseCamelLower}}Dao struct { + *internal.{{.table.BusinessName | CaseCamel}}Dao +} + +var ( + // {{.table.ClassName}} is globally public accessible object for table tools_gen_table operations. + {{.table.ClassName}} = {{.table.BusinessName | CaseCamelLower}}Dao{ + internal.New{{.table.ClassName}}Dao(), + } +) + +//// +// Fill with you ideas below. +//// + + +// {{.table.ClassName}}SearchReq 分页请求参数 +type {{.table.ClassName}}SearchReq struct { + {{range $index, $column := .table.Columns}} + {{if eq $column.IsQuery "1"}} + {{$column.GoField}} {{if eq $column.GoType "Time"}}*gtime.Time{{else if or (eq $column.GoType "int") (eq $column.GoType "int64") (eq $column.GoType "uint") (eq $column.GoType "uint64")}}string{{else}}{{$column.GoType}}{{end}} `p:"{{$column.HtmlField}}"` //{{$column.ColumnComment}} + {{end}} + {{end}} + comModel.PageReq +} + + +// {{.table.ClassName}}AddReq 添加操作请求参数 +type {{.table.ClassName}}AddReq struct { + {{range $index, $column := .table.Columns}} + {{if and (eq $column.IsInsert "1") (ne $column.IsPk "1")}} + {{$column.GoField}} {{if eq $column.GoType "Time"}}*gtime.Time{{else}}{{$column.GoType}}{{end}} `p:"{{$column.HtmlField}}" {{if eq $column.IsRequired "1"}}v:"required#{{$column.ColumnComment}}不能为空"{{end}}` + {{end}} + {{if eq $column.ColumnName "created_by"}}CreatedBy uint64 {{end}} + {{end}} +} + + +// {{.table.ClassName}}EditReq 修改操作请求参数 +type {{.table.ClassName}}EditReq struct { + {{.table.PkColumn.GoField}} {{.table.PkColumn.GoType}} `p:"{{.table.PkColumn.HtmlField}}" v:"required#主键ID不能为空"` + {{range $index, $column := .table.Columns}} + {{if eq $column.IsEdit "1"}} + {{$column.GoField}} {{if eq $column.GoType "Time"}}*gtime.Time{{else}}{{$column.GoType}}{{end}} `p:"{{$column.HtmlField}}" {{if eq $column.IsRequired "1"}}v:"required#{{$column.ColumnComment}}不能为空"{{end}}`{{end}} + {{if eq $column.ColumnName "updated_by"}}UpdatedBy uint64 {{end}} + {{end}} +} + + + +{{range $index,$column:= .table.Columns}} +{{if and (HasSuffix $column.ColumnName "status") (eq $column.IsList "1") }} +// {{$.table.ClassName}}{{$column.GoField}}Req 设置用户状态参数 +type {{$.table.ClassName}}{{$column.GoField}}Req struct { + {{$.table.PkColumn.GoField}} {{$.table.PkColumn.GoType}} `p:"{{$.table.PkColumn.HtmlField}}" v:"required#主键ID不能为空"` + {{$column.GoField}} {{$column.GoType}} `p:"{{$column.HtmlField}}" v:"required#{{$column.ColumnComment}}不能为空"` +} +{{end}} +{{end}} \ No newline at end of file diff --git a/resource/template/go/model.template b/resource/template/go/model.template new file mode 100644 index 0000000..a9d9774 --- /dev/null +++ b/resource/template/go/model.template @@ -0,0 +1,27 @@ +// ========================================================================== +// GFast自动生成model代码,无需手动修改,重新生成会自动覆盖. +// 生成日期:{{.table.CreateTime}} +// 生成路径: {{.table.PackageName}}/model/{{.table.TableName}}.go +// 生成人:{{.table.FunctionAuthor}} +// ========================================================================== +//// +package model + + +{{$hasGTime:=false}} +{{range $index, $column := .table.Columns}} +{{if eq $column.GoType "Time"}} +{{$hasGTime = true}} +{{end}} +{{end}} + +{{if $hasGTime}} +import "github.com/gogf/gf/os/gtime" +{{end}} + +// {{.table.ClassName}} is the golang structure for table {{.table.TableName}}. +type {{.table.ClassName}} struct { + {{range $index, $column := .table.Columns}} + {{if eq $column.IsPk "1"}} {{$column.GoField}} {{if eq $column.GoType "Time"}}*gtime.Time{{else}}{{$column.GoType}}{{end}} `orm:"{{$column.ColumnName}},primary" json:"{{$column.HtmlField}}"` // {{$column.ColumnComment}} {{else}} {{$column.GoField}} {{if eq $column.GoType "Time"}}*gtime.Time{{else}}{{$column.GoType}}{{end}} `orm:"{{$column.ColumnName}}" json:"{{$column.HtmlField}}"` // {{$column.ColumnComment}} {{end}} + {{end}} +} \ No newline at end of file diff --git a/resource/template/go/router.template b/resource/template/go/router.template new file mode 100644 index 0000000..761bfda --- /dev/null +++ b/resource/template/go/router.template @@ -0,0 +1,57 @@ +// ========================================================================== +// GFast自动生成路由代码,只生成一次,按需修改,再次生成不会覆盖. +// 生成日期:{{.table.CreateTime}} +// 生成路径: {{.table.PackageName}}/router/{{.table.BusinessName}}.go +// 生成人:{{.table.FunctionAuthor}} +// ========================================================================== +//// +package router + +import ( + "{{.table.PackageName}}/api" + "gfast/middleware" + "github.com/gogf/gf/frame/g" + "github.com/gogf/gf/net/ghttp" + {{if ne $.table.ModuleName "system"}} + sysApi "gfast/app/system/api" + {{end}} +) + +{{$plugin:=""}} +{{if ContainsI $.table.PackageName "plugins"}} +{{$plugin = "plugins/"}} +{{end}} + + +//加载路由 +func init() { + s := g.Server() + s.Group("/", func(group *ghttp.RouterGroup) { + group.Group("/{{$plugin}}{{.table.ModuleName}}", func(group *ghttp.RouterGroup) { + group.Group("/{{.table.BusinessName | CaseCamelLower}}", func(group *ghttp.RouterGroup) { + //gToken拦截器 + {{if ne $.table.ModuleName "system"}} + sysApi.GfToken.AuthMiddleware(group) + {{else}} + api.GfToken.AuthMiddleware(group) + {{end}} + //context拦截器 + group.Middleware(middleware.Ctx, middleware.Auth) + {{if ne $.table.ModuleName "system"}} + //后台操作日志记录 + group.Hook("/*", ghttp.HookAfterOutput, sysApi.SysOperLog.OperationLog) + {{end}} + group.GET("list", api.{{.table.ClassName}}.List) + group.GET("get", api.{{.table.ClassName}}.Get) + group.POST("add", api.{{.table.ClassName}}.Add) + group.PUT("edit", api.{{.table.ClassName}}.Edit) + group.DELETE("delete", api.{{.table.ClassName}}.Delete) + {{range $index,$column:= .table.Columns}} + {{if and (HasSuffix $column.ColumnName "status") (eq $column.IsList "1") }} + group.PUT("change{{$column.GoField}}",api.{{$.table.ClassName}}.Change{{$column.GoField}}) + {{end}} + {{end}} + }) + }) + }) +} diff --git a/resource/template/go/service.template b/resource/template/go/service.template new file mode 100644 index 0000000..766ef84 --- /dev/null +++ b/resource/template/go/service.template @@ -0,0 +1,198 @@ +// ========================================================================== +// Panda自动生成业务逻辑层相关代码,只生成一次,按需修改,再次生成不会覆盖. +// 生成日期:{{.table.CreateTime}} +// 生成路径: {{.table.PackageName}}/service/{{.table.BusinessName}}.go +// 生成人:{{.table.FunctionAuthor}} +// ========================================================================== +//// +{{$structName := .table.BusinessName | CaseCamelLower}} + +package service + + +import ( + "context" + comModel "gfast/app/common/model" + "pandax/apps/{{.table.PackageName}}/entity" + "pandax/base/biz" + "pandax/base/global" +) + + +type {{$structName}} struct { +} + +var {{.table.ClassName}} = new({{$structName}}) + + +{{$pk:=""}} +{{$pkGoField:=""}} + +{{$createdAt:=""}} +{{$createdAtGoField:=""}} + +{{range $index, $column := .table.Columns}} +{{if eq $column.IsPk "1"}} + {{$pk = $column.ColumnName}} + {{$pkGoField = $column.GoField}} +{{end}} +{{if eq $column.ColumnName "created_at"}} + {{$createdAt = $column.ColumnName}} + {{$createdAtGoField = $column.GoField}} +{{end}} +{{end}} + +// GetList 获取任务列表 +func (s *{{$structName}}) GetList(req *dao.{{.table.ClassName}}SearchReq) (total, page int, list []*model.{{.table.ClassName}}, err error) { + m := dao.{{.table.ClassName}}.Ctx(req.Ctx) + {{range $index, $column := .table.Columns}} {{if eq $column.IsQuery "1"}} + {{if eq $column.QueryType "LIKE"}} + if req.{{$column.GoField}} != "" { + m = m.Where(dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" like ?", "%"+req.{{$column.GoField}}+"%") + } {{end}} + {{if eq $column.QueryType "EQ"}} {{if eq $column.GoType "string"}} + if req.{{$column.GoField}} != "" { + m = m.Where(dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" = ?", req.{{$column.GoField}}) + } + {{else if and (eq $column.GoType "Time") (eq $column.ColumnName "created_at")}} + if req.BeginTime != "" { + m = m.Where(dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" >=", req.BeginTime) + } + if req.EndTime != "" { + m = m.Where(dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" <", req.EndTime) + } + {{else if or (eq $column.GoType "int") (eq $column.GoType "int64") (eq $column.GoType "uint") (eq $column.GoType "uint64") }} + if req.{{$column.GoField}} != "" { + m = m.Where(dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" = ?", req.{{$column.GoField}}) + } + {{end}} {{end}} + {{if and (eq $column.QueryType "BETWEEN") (eq $column.ColumnType "datetime") }} + if req.{{$column.GoField}} != nil { + m = m.Where(dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" >= ? AND "+dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}+" < ?", req.{{$column.GoField}}, req.{{$column.GoField}}.Add(gtime.D)) + } + {{end}} + {{end}} + {{end}} + + total, err = m.Count() + if err != nil { + g.Log().Error(err) + err = gerror.New("获取总行数失败") + return + } + {{if ne .table.TplCategory "tree"}} + if req.PageNum == 0 { + req.PageNum = 1 + } + page = req.PageNum + if req.PageSize == 0 { + req.PageSize = comModel.PageSize + } + order:= "{{$pk}} asc" + if req.OrderBy!=""{ + order = req.OrderBy + } + err = m.Page(page, req.PageSize).Order(order).Scan(&list) + {{else}} + order:= "{{$pk}} asc" + if req.OrderBy!=""{ + order = req.OrderBy + } + err = m.Order(order).Scan(&list) + {{end}} + if err != nil { + g.Log().Error(err) + err = gerror.New("获取数据失败") + } + return +} + + +// GetInfoById 通过id获取 +func (s *{{$structName}}) GetInfoById(ctx context.Context,id {{$.table.PkColumn.GoType}}) (info *model.{{.table.ClassName}}, err error) { + if id == 0 { + err = gerror.New("参数错误") + return + } + err = dao.{{.table.ClassName}}.Ctx(ctx).Where(dao.{{.table.ClassName}}.Columns.{{$pkGoField}}, id).Scan(&info) + if err != nil { + g.Log().Error(err) + } + if info == nil || err != nil { + err = gerror.New("获取信息失败") + } + return +} + +// Add 添加 +func (s *{{$structName}}) Add(ctx context.Context,req *dao.{{.table.ClassName}}AddReq) (err error) { + _, err = dao.{{.table.ClassName}}.Ctx(ctx).Insert(req) + return +} + +// Edit 修改 +func (s *{{$structName}}) Edit(ctx context.Context,req *dao.{{.table.ClassName}}EditReq) error { + {{ $fieldsEx:= concat "dao." $.table.ClassName ".Columns." $pkGoField }} + {{if ne $createdAt ""}} + {{$fieldsEx = concat "dao." $.table.ClassName ".Columns." $pkGoField "," "dao." $.table.ClassName ".Columns." $createdAtGoField}} + {{end}} + _, err := dao.{{.table.ClassName}}.Ctx(ctx).FieldsEx({{$fieldsEx}}).Where(dao.{{.table.ClassName}}.Columns.{{$pkGoField}}, req.{{$pkGoField}}). + Update(req) + return err +} + + +// DeleteByIds 删除 +func (s *{{$structName}}) DeleteByIds(ctx context.Context,ids []int) (err error) { + if len(ids) == 0 { + err = gerror.New("参数错误") + return + } + {{if eq .table.TplCategory "tree"}} + ids, err = s.GetChildrenIds(ctx,ids) + if err != nil { + return + } + {{end}} + _, err = dao.{{.table.ClassName}}.Ctx(ctx).Delete(dao.{{.table.ClassName}}.Columns.{{$pkGoField}}+" in (?)", ids) + if err != nil { + g.Log().Error(err) + err = gerror.New("删除失败") + } + return +} + + +{{range $index,$column:= .table.Columns}} +{{if and (HasSuffix $column.ColumnName "status") (eq $column.IsList "1") }} +// Change{{$column.GoField}} 修改状态 +func (s *{{$structName}}) Change{{$column.GoField}}(ctx context.Context,req *dao.{{$.table.ClassName}}{{$column.GoField}}Req) error { + _, err := dao.{{$.table.ClassName}}.Ctx(ctx).WherePri(req.{{$pkGoField}}).Update(g.Map{ + dao.{{$.table.ClassName}}.Columns.{{$column.GoField}}: req.{{$column.GoField}}, + }) + return err +} +{{end}} +{{end}} + +{{if eq .table.TplCategory "tree"}} +// GetChildrenIds 通过ID获取子级ID +func (s *{{$structName}})GetChildrenIds(ctx context.Context,ids []int) ([]int, error) { + //获取所有 + _,_,all, err := s.GetList(&dao.{{.table.ClassName}}SearchReq{PageReq:comModel.PageReq{Ctx: ctx}}) + if err != nil { + return nil, err + } + list := make(g.List, len(all)) + for k, info := range all { + list[k] = gconv.Map(info) + } + for _, id := range ids { + children := library.FindSonByParentId(list, id, "{{.table.TreeParentCode}}", "{{.table.TreeCode}}") + for _, cid := range children { + ids = append(ids, gconv.Int(cid["{{.table.TreeCode}}"])) + } + } + return ids, nil +} +{{end}} \ No newline at end of file diff --git a/resource/template/js/api.template b/resource/template/js/api.template new file mode 100644 index 0000000..8b8a99e --- /dev/null +++ b/resource/template/js/api.template @@ -0,0 +1,102 @@ +import request from '@/utils/request' + +{{$businessName := .table.BusinessName | CaseCamelLower}} + +{{$plugin:=""}} +{{if ContainsI $.table.PackageName "plugins"}} +{{$plugin = "plugins/"}} +{{end}} + + +// 查询{{.table.FunctionName}}列表 +export function list{{.table.ClassName}}(query) { + return request({ + url: '/{{$plugin}}{{.table.ModuleName}}/{{$businessName}}/list', + method: 'get', + params: query + }) +} + +// 查询{{.table.FunctionName}}详细 +export function get{{.table.ClassName}}({{.table.PkColumn.HtmlField}}) { + return request({ + url: '/{{$plugin}}{{.table.ModuleName}}/{{$businessName}}/get', + method: 'get', + params: { + id: {{.table.PkColumn.HtmlField}}.toString() + } + }) +} + +// 新增{{.table.FunctionName}} +export function add{{.table.ClassName}}(data) { + return request({ + url: '/{{$plugin}}{{.table.ModuleName}}/{{$businessName}}/add', + method: 'post', + data: data + }) +} + +// 修改{{.table.FunctionName}} +export function update{{.table.ClassName}}(data) { + return request({ + url: '/{{$plugin}}{{.table.ModuleName}}/{{$businessName}}/edit', + method: 'put', + data: data + }) +} + +// 删除{{.table.FunctionName}} +export function del{{.table.ClassName}}({{.table.PkColumn.HtmlField}}s) { + return request({ + url: '/{{$plugin}}{{.table.ModuleName}}/{{$businessName}}/delete', + method: 'delete', + data:{ + ids:{{.table.PkColumn.HtmlField}}s + } + }) +} + + +{{$getUserList:=false}} + +{{range $index,$column:= .table.Columns}} +{{if and (HasSuffix $column.ColumnName "status") (eq $column.IsList "1") }} +// {{$.table.FunctionName}}{{$column.ColumnComment}}修改 +export function change{{$.table.ClassName}}{{$column.GoField}}({{$.table.PkColumn.HtmlField}},{{$column.HtmlField}}) { + const data = { + {{$.table.PkColumn.HtmlField}}, + {{$column.HtmlField}} + } + return request({ + url: '/{{$plugin}}{{$.table.ModuleName}}/{{$businessName}}/change{{$column.GoField}}', + method: 'put', + data:data + }) +} +{{end}} +{{if ne $column.LinkTableName ""}} +// 关联{{$column.LinkTableName}}表选项 +export function list{{$column.LinkTableClass}}(query){ + return request({ + url: '/{{$plugin}}{{$.table.ModuleName}}/{{$column.LinkTableName | CaseCamelLower}}/list', + method: 'get', + params: query + }) +} +{{end}} +{{if eq $column.HtmlField "createdBy" "updatedBy"}} +{{$getUserList = true}} +{{end}} +{{end}} + +{{if $getUserList}} +//获取用户信息列表 +export function getUserList(uIds){ + return request({ + url: '/system/auth/usersGet', + method: 'get', + params: {ids:uIds} + }) +} +{{end}} \ No newline at end of file diff --git a/resource/template/sql/sql.template b/resource/template/sql/sql.template new file mode 100644 index 0000000..947cbcc --- /dev/null +++ b/resource/template/sql/sql.template @@ -0,0 +1,50 @@ +/* +========================================================================== +GFast自动生成菜单SQL,只生成一次,按需修改. +生成日期:{{.table.CreateTime}} +生成路径: data/gen_sql/{{.table.ModuleName}}/{{.table.BusinessName}}_menu.sql +生成人:{{.table.FunctionAuthor}} +========================================================================== +*/ + +{{$plugin:=""}} +{{if ContainsI $.table.PackageName "plugins"}} +{{$plugin = "plugins/"}} +{{end}} + +-- 当前日期 +select @now := now(); + +-- 目录 SQL +INSERT INTO `sys_auth_rule` (`pid`,`name`,`title`,`icon`,`condition`,`remark`,`menu_type`,`weigh`,`status`,`always_show`,`path`,`jump_path`,`component`,`is_frame`,`module_type`,`model_id`,`created_at`,`updated_at`,`deleted_at` ) +VALUES(0,'{{$plugin}}{{.table.ModuleName}}/{{.table.BusinessName | CaseCamelLower}}','{{.table.FunctionName}}管理','form','','{{.table.FunctionName}}管理',0,0,1,1,'{{$plugin}}{{.table.BusinessName | CaseCamelLower}}','','',0,'sys_admin',0,@now,@now,NULL ); + +-- 菜单父目录ID +SELECT @parentId := LAST_INSERT_ID(); + +-- 菜单 SQL +INSERT INTO `sys_auth_rule` (`pid`,`name`,`title`,`icon`,`condition`,`remark`,`menu_type`,`weigh`,`status`,`always_show`,`path`,`jump_path`,`component`,`is_frame`,`module_type`,`model_id`,`created_at`,`updated_at`,`deleted_at` ) +VALUES(@parentId,'{{$plugin}}{{.table.ModuleName}}/{{.table.BusinessName | CaseCamelLower}}/list','{{.table.FunctionName}}列表','list','','{{.table.FunctionName}}列表',1,0,1,1,'{{.table.BusinessName | CaseCamelLower}}List','','{{$plugin}}{{.table.ModuleName}}/{{.table.BusinessName | CaseCamelLower}}/list',0,'sys_admin',0,@now,@now,NULL ); + +-- 按钮父目录ID +SELECT @parentId := LAST_INSERT_ID(); + +-- 按钮 SQL +INSERT INTO `sys_auth_rule` (`pid`,`name`,`title`,`icon`,`condition`,`remark`,`menu_type`,`weigh`,`status`,`always_show`,`path`,`jump_path`,`component`,`is_frame`,`module_type`,`model_id`,`created_at`,`updated_at`,`deleted_at` ) +VALUES(@parentId,'{{$plugin}}{{.table.ModuleName}}/{{.table.BusinessName | CaseCamelLower}}/get','{{.table.FunctionName}}查询','','','{{.table.FunctionName}}查询',2,0,1,1,'','','',0,'sys_admin',0,@now,@now,NULL ); + +INSERT INTO `sys_auth_rule` (`pid`,`name`,`title`,`icon`,`condition`,`remark`,`menu_type`,`weigh`,`status`,`always_show`,`path`,`jump_path`,`component`,`is_frame`,`module_type`,`model_id`,`created_at`,`updated_at`,`deleted_at` ) +VALUES(@parentId,'{{$plugin}}{{.table.ModuleName}}/{{.table.BusinessName | CaseCamelLower}}/add','{{.table.FunctionName}}添加','','','{{.table.FunctionName}}添加',2,0,1,1,'','','',0,'sys_admin',0,@now,@now,NULL ); + +INSERT INTO `sys_auth_rule` (`pid`,`name`,`title`,`icon`,`condition`,`remark`,`menu_type`,`weigh`,`status`,`always_show`,`path`,`jump_path`,`component`,`is_frame`,`module_type`,`model_id`,`created_at`,`updated_at`,`deleted_at` ) +VALUES(@parentId,'{{$plugin}}{{.table.ModuleName}}/{{.table.BusinessName | CaseCamelLower}}/edit','{{.table.FunctionName}}修改','','','{{.table.FunctionName}}修改',2,0,1,1,'','','',0,'sys_admin',0,@now,@now,NULL ); + +INSERT INTO `sys_auth_rule` (`pid`,`name`,`title`,`icon`,`condition`,`remark`,`menu_type`,`weigh`,`status`,`always_show`,`path`,`jump_path`,`component`,`is_frame`,`module_type`,`model_id`,`created_at`,`updated_at`,`deleted_at` ) +VALUES(@parentId,'{{$plugin}}{{.table.ModuleName}}/{{.table.BusinessName | CaseCamelLower}}/delete','{{.table.FunctionName}}删除','','','{{.table.FunctionName}}删除',2,0,1,1,'','','',0,'sys_admin',0,@now,@now,NULL ); + +{{range $index,$column:= .table.Columns}} +{{if and (HasSuffix $column.ColumnName "status") (eq $column.IsList "1") }} +INSERT INTO `sys_auth_rule` (`pid`,`name`,`title`,`icon`,`condition`,`remark`,`menu_type`,`weigh`,`status`,`always_show`,`path`,`jump_path`,`component`,`is_frame`,`module_type`,`model_id`,`created_at`,`updated_at`,`deleted_at` ) +VALUES(@parentId,'{{$plugin}}{{$.table.ModuleName}}/{{$.table.BusinessName | CaseCamelLower}}/change{{$column.GoField}}','{{$.table.FunctionName}}{{$column.ColumnComment}}修改','','','{{$.table.FunctionName}}{{$column.ColumnComment}}修改',2,0,1,1,'','','',0,'sys_admin',0,@now,@now,NULL ); +{{end}} +{{end}} diff --git a/resource/template/vue/list-vue.template b/resource/template/vue/list-vue.template new file mode 100644 index 0000000..3153192 --- /dev/null +++ b/resource/template/vue/list-vue.template @@ -0,0 +1,513 @@ + + + \ No newline at end of file diff --git a/resource/template/vue/tree-vue.template b/resource/template/vue/tree-vue.template new file mode 100644 index 0000000..17e9815 --- /dev/null +++ b/resource/template/vue/tree-vue.template @@ -0,0 +1,536 @@ + + + \ No newline at end of file