Merge pull request #14 from bufanyun/v2.0

修复树表上级关系绑定验证,优化CURD代码生成
This commit is contained in:
maxbad 2023-05-29 21:30:52 +08:00 committed by GitHub
commit e4bf595b8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
49 changed files with 1453 additions and 1001 deletions

View File

@ -3,8 +3,7 @@
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
// @AutoGenerate Version 2.5.3 // @AutoGenerate Version 2.7.3
// @AutoGenerate Date 2023-04-28 15:28:40
package curddemo package curddemo
import ( import (

View File

@ -12,16 +12,6 @@ import (
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
) )
// NameUniqueReq 名称是否唯一
type NameUniqueReq struct {
Name string `json:"name" v:"required#部门名称不能为空" dc:"部门名称"`
Id int64 `json:"id" dc:"部门ID"`
g.Meta `path:"/dept/name_unique" method:"get" tags:"部门" summary:"部门名称是否唯一"`
}
type NameUniqueRes struct {
IsUnique bool `json:"is_unique" dc:"是否唯一"`
}
// ListReq 查询列表 // ListReq 查询列表
type ListReq struct { type ListReq struct {
Name string `json:"name" dc:"部门名称"` Name string `json:"name" dc:"部门名称"`

View File

@ -3,38 +3,14 @@
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
package role package role
import ( import (
"github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/frame/g"
"hotgo/internal/model/entity"
"hotgo/internal/model/input/adminin" "hotgo/internal/model/input/adminin"
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
) )
// MemberListReq 查询列表
type MemberListReq struct {
g.Meta `path:"/role/member_list" method:"get" tags:"角色" summary:"获取角色下的用户列表"`
form.PageReq
form.RangeDateReq
form.StatusReq
Role int `json:"role" description:"角色ID"`
DeptId int `json:"deptId" description:"部门ID"`
Mobile int `json:"mobile" description:"手机号"`
Username string `json:"username" description:"用户名"`
Realname string `json:"realname" description:"真实姓名"`
StartTime string `json:"start_time" description:"开始时间"`
EndTime string `json:"end_time" description:"结束时间"`
Name string `json:"name" description:"岗位名称"`
Code string `json:"code" description:"岗位编码"`
}
type MemberListRes struct {
List []*adminin.MemberListModel `json:"list" description:"数据列表"`
form.PageRes
}
// ListReq 查询列表 // ListReq 查询列表
type ListReq struct { type ListReq struct {
g.Meta `path:"/role/list" method:"get" tags:"角色" summary:"获取角色列表"` g.Meta `path:"/role/list" method:"get" tags:"角色" summary:"获取角色列表"`
@ -81,42 +57,33 @@ type DynamicRes struct {
List []adminin.MenuRoute `json:"list" description:"数据列表"` List []adminin.MenuRoute `json:"list" description:"数据列表"`
} }
type MenuEditReq struct {
g.Meta `path:"/role/edit" method:"post" tags:"角色" summary:"编辑角色"`
RoleId int64 `json:"id"`
MenuIds []int64 `json:"menuIds"`
}
type MenuEditRes struct{}
type UpdatePermissionsReq struct { type UpdatePermissionsReq struct {
g.Meta `path:"/role/updatePermissions" method:"post" tags:"角色" summary:"编辑角色菜单权限"` g.Meta `path:"/role/updatePermissions" method:"post" tags:"角色" summary:"编辑角色菜单权限"`
RoleId int64 `json:"id"` adminin.UpdatePermissionsInp
MenuIds []int64 `json:"menuIds"`
} }
type UpdatePermissionsRes struct{} type UpdatePermissionsRes struct{}
type GetPermissionsReq struct { type GetPermissionsReq struct {
g.Meta `path:"/role/getPermissions" method:"get" tags:"角色" summary:"获取指定角色权限"` g.Meta `path:"/role/getPermissions" method:"get" tags:"角色" summary:"获取指定角色权限"`
RoleId int64 `json:"id"` adminin.GetPermissionsInp
} }
type GetPermissionsRes struct { type GetPermissionsRes struct {
MenuIds []int64 `json:"menuIds"` *adminin.GetPermissionsModel
} }
// EditReq 修改/新增角色 // EditReq 修改/新增角色
type EditReq struct { type EditReq struct {
g.Meta `path:"/role/edit" method:"post" tags:"角色" summary:"修改/新增角色"` g.Meta `path:"/role/edit" method:"post" tags:"角色" summary:"修改/新增角色"`
entity.AdminRole adminin.RoleEditInp
} }
type EditRes struct{} type EditRes struct{}
// DeleteReq 删除角色 // DeleteReq 删除角色
type DeleteReq struct { type DeleteReq struct {
g.Meta `path:"/role/delete" method:"post" tags:"角色" summary:"删除角色"` g.Meta `path:"/role/delete" method:"post" tags:"角色" summary:"删除角色"`
Id int64 `json:"id" v:"required"` adminin.RoleDeleteInp
} }
type DeleteRes struct{} type DeleteRes struct{}

View File

@ -5,7 +5,9 @@
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
package consts package consts
import "github.com/gogf/gf/v2/util/gconv" import (
"github.com/gogf/gf/v2/util/gconv"
)
// RequestEncryptKey // RequestEncryptKey
// 请求加密密钥用于敏感数据加密16位字符前后端需保持一致 // 请求加密密钥用于敏感数据加密16位字符前后端需保持一致
@ -44,6 +46,29 @@ var ConfigTypes = []string{ConfigTypeString,
ConfigTypeSliceString, ConfigTypeSliceInt, ConfigTypeSliceInt64, ConfigTypeSliceString, ConfigTypeSliceInt, ConfigTypeSliceInt64,
} }
// ConfigMaskDemoField 演示环境下需要隐藏的配置
var ConfigMaskDemoField = map[string]struct{}{
// 邮箱
"smtpUser": {}, "smtpPass": {},
// 云存储
"uploadUCloudPublicKey": {}, "uploadUCloudPrivateKey": {}, "uploadCosSecretId": {}, "uploadCosSecretKey": {},
"uploadOssSecretId": {}, "uploadOssSecretKey": {}, "uploadQiNiuAccessKey": {}, "uploadQiNiuSecretKey": {},
// 地图
"geoAmapWebKey": {},
// 短信
"smsAliYunAccessKeyID": {}, "smsAliYunAccessKeySecret": {}, "smsTencentSecretId": {}, "smsTencentSecretKey": {},
// 支付
"payWxPayMchId": {}, "payWxPaySerialNo": {}, "payWxPayAPIv3Key": {}, "payWxPayPrivateKey": {}, "payQQPayMchId": {}, "payQQPayApiKey": {},
// 微信
"officialAccountAppSecret": {}, "officialAccountToken": {}, "officialAccountEncodingAESKey": {}, "openPlatformAppSecret": {},
"openPlatformToken": {}, "openPlatformEncodingAESKey": {},
}
// ConvType 类型转换 // ConvType 类型转换
func ConvType(val interface{}, t string) interface{} { func ConvType(val interface{}, t string) interface{} {
switch t { switch t {

View File

@ -22,27 +22,27 @@ var (
type cCash struct{} type cCash struct{}
// View 获取指定信息 // View 获取指定信息
func (c *cCash) View(ctx context.Context, req *cash.ViewReq) (*cash.ViewRes, error) { func (c *cCash) View(ctx context.Context, req *cash.ViewReq) (res *cash.ViewRes, err error) {
data, err := service.AdminCash().View(ctx, adminin.CashViewInp{Id: req.Id}) data, err := service.AdminCash().View(ctx, adminin.CashViewInp{Id: req.Id})
if err != nil { if err != nil {
return nil, err return
} }
var res cash.ViewRes res = new(cash.ViewRes)
res.CashViewModel = data res.CashViewModel = data
return &res, nil return
} }
// List 查看列表 // List 查看列表
func (c *cCash) List(ctx context.Context, req *cash.ListReq) (res *cash.ListRes, err error) { func (c *cCash) List(ctx context.Context, req *cash.ListReq) (res *cash.ListRes, err error) {
var in adminin.CashListInp var in adminin.CashListInp
if err = gconv.Scan(req, &in); err != nil { if err = gconv.Scan(req, &in); err != nil {
return nil, err return
} }
list, totalCount, err := service.AdminCash().List(ctx, in) list, totalCount, err := service.AdminCash().List(ctx, in)
if err != nil { if err != nil {
return nil, err return
} }
res = new(cash.ListRes) res = new(cash.ListRes)

View File

@ -65,7 +65,7 @@ func (c *cCreditsLog) Export(ctx context.Context, req *creditslog.ExportReq) (re
} }
// Option 获取变动状态选项 // Option 获取变动状态选项
func (c *cCreditsLog) Option(ctx context.Context, req *creditslog.OptionReq) (res *creditslog.OptionRes, err error) { func (c *cCreditsLog) Option(_ context.Context, _ *creditslog.OptionReq) (res *creditslog.OptionRes, err error) {
res = &creditslog.OptionRes{ res = &creditslog.OptionRes{
CreditType: consts.CreditTypeOptions, CreditType: consts.CreditTypeOptions,
CreditGroup: consts.CreditGroupOptions, CreditGroup: consts.CreditGroupOptions,

View File

@ -12,6 +12,7 @@ import (
"hotgo/internal/model/input/adminin" "hotgo/internal/model/input/adminin"
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
"hotgo/internal/service" "hotgo/internal/service"
"hotgo/utility/validate"
) )
var ( var (
@ -20,18 +21,6 @@ var (
type cDept struct{} type cDept struct{}
// NameUnique 名称是否唯一
func (c *cDept) NameUnique(ctx context.Context, req *dept.NameUniqueReq) (res *dept.NameUniqueRes, err error) {
data, err := service.AdminDept().NameUnique(ctx, adminin.DeptNameUniqueInp{Id: req.Id, Name: req.Name})
if err != nil {
return
}
res = new(dept.NameUniqueRes)
res.IsUnique = data.IsUnique
return
}
// Delete 删除 // Delete 删除
func (c *cDept) Delete(ctx context.Context, req *dept.DeleteReq) (res *dept.DeleteRes, err error) { func (c *cDept) Delete(ctx context.Context, req *dept.DeleteReq) (res *dept.DeleteRes, err error) {
var in adminin.DeptDeleteInp var in adminin.DeptDeleteInp
@ -50,6 +39,10 @@ func (c *cDept) Edit(ctx context.Context, req *dept.EditReq) (res *dept.EditRes,
return nil, err return nil, err
} }
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.AdminDept().Edit(ctx, in) err = service.AdminDept().Edit(ctx, in)
return return
} }
@ -102,6 +95,10 @@ func (c *cDept) Status(ctx context.Context, req *dept.StatusReq) (res *dept.Stat
return return
} }
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.AdminDept().Status(ctx, in) err = service.AdminDept().Status(ctx, in)
return return
} }

View File

@ -115,6 +115,10 @@ func (c *cMember) Delete(ctx context.Context, req *member.DeleteReq) (res *membe
return return
} }
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.AdminMember().Delete(ctx, in) err = service.AdminMember().Delete(ctx, in)
return return
} }
@ -174,12 +178,16 @@ func (c *cMember) Status(ctx context.Context, req *member.StatusReq) (res *membe
return return
} }
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.AdminMember().Status(ctx, in) err = service.AdminMember().Status(ctx, in)
return return
} }
// Select 获取可选的后台用户选项 // Select 获取可选的后台用户选项
func (c *cMember) Select(ctx context.Context, req *member.SelectReq) (res *member.SelectRes, err error) { func (c *cMember) Select(ctx context.Context, _ *member.SelectReq) (res *member.SelectRes, err error) {
data, err := service.AdminMember().Select(ctx, adminin.MemberSelectInp{}) data, err := service.AdminMember().Select(ctx, adminin.MemberSelectInp{})
if err != nil { if err != nil {
return return

View File

@ -13,6 +13,7 @@ import (
"hotgo/internal/model/input/adminin" "hotgo/internal/model/input/adminin"
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
"hotgo/internal/service" "hotgo/internal/service"
"hotgo/utility/validate"
) )
var ( var (
@ -21,26 +22,6 @@ var (
type cRole struct{} type cRole struct{}
// RoleMemberList 获取角色下的用户列表
func (c *cRole) RoleMemberList(ctx context.Context, req *role.MemberListReq) (res *role.MemberListRes, err error) {
var in adminin.RoleMemberListInp
if err = gconv.Scan(req, &in); err != nil {
return
}
list, totalCount, err := service.AdminMember().RoleMemberList(ctx, in)
if err != nil {
return
}
res = new(role.MemberListRes)
res.List = list
res.PageCount = form.CalPageCount(totalCount, req.PerPage)
res.PerPage = req.Page
res.PerPage = req.PerPage
return
}
// List 获取列表 // List 获取列表
func (c *cRole) List(ctx context.Context, req *role.ListReq) (res *role.ListRes, err error) { func (c *cRole) List(ctx context.Context, req *role.ListReq) (res *role.ListRes, err error) {
var in adminin.RoleListInp var in adminin.RoleListInp
@ -63,49 +44,79 @@ func (c *cRole) List(ctx context.Context, req *role.ListReq) (res *role.ListRes,
// Edit 修改角色 // Edit 修改角色
func (c *cRole) Edit(ctx context.Context, req *role.EditReq) (res *role.EditRes, err error) { func (c *cRole) Edit(ctx context.Context, req *role.EditReq) (res *role.EditRes, err error) {
err = service.AdminRole().Edit(ctx, req) var in adminin.RoleEditInp
if err = gconv.Scan(req, &in); err != nil {
return
}
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.AdminRole().Edit(ctx, in)
return return
} }
// Delete 删除 // Delete 删除
func (c *cRole) Delete(ctx context.Context, req *role.DeleteReq) (res *role.DeleteRes, err error) { func (c *cRole) Delete(ctx context.Context, req *role.DeleteReq) (res *role.DeleteRes, err error) {
err = service.AdminRole().Delete(ctx, req) var in adminin.RoleDeleteInp
if err = gconv.Scan(req, &in); err != nil {
return
}
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.AdminRole().Delete(ctx, in)
return return
} }
// Dynamic 动态路由 // Dynamic 动态路由
func (c *cRole) Dynamic(ctx context.Context, req *role.DynamicReq) (res role.DynamicRes, err error) { func (c *cRole) Dynamic(ctx context.Context, _ *role.DynamicReq) (res *role.DynamicRes, err error) {
return service.AdminMenu().GetMenuList(ctx, contexts.GetUserId(ctx)) return service.AdminMenu().GetMenuList(ctx, contexts.GetUserId(ctx))
} }
// GetPermissions 获取指定角色权限 // GetPermissions 获取指定角色权限
func (c *cRole) GetPermissions(ctx context.Context, req *role.GetPermissionsReq) (res *role.GetPermissionsRes, err error) { func (c *cRole) GetPermissions(ctx context.Context, req *role.GetPermissionsReq) (res *role.GetPermissionsRes, err error) {
MenuIds, err := service.AdminRole().GetPermissions(ctx, req) var in adminin.GetPermissionsInp
if err = gconv.Scan(req, &in); err != nil {
return
}
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
data, err := service.AdminRole().GetPermissions(ctx, in)
if err != nil { if err != nil {
return nil, err return
} }
res = &role.GetPermissionsRes{ res = new(role.GetPermissionsRes)
MenuIds: []int64{}, res.GetPermissionsModel = data
} return
if MenuIds != nil {
res.MenuIds = MenuIds
}
return res, nil
} }
// UpdatePermissions 修改角色菜单权限 // UpdatePermissions 修改角色菜单权限
func (c *cRole) UpdatePermissions(ctx context.Context, req *role.UpdatePermissionsReq) (res *role.UpdatePermissionsRes, err error) { func (c *cRole) UpdatePermissions(ctx context.Context, req *role.UpdatePermissionsReq) (res *role.UpdatePermissionsRes, err error) {
err = service.AdminRole().UpdatePermissions(ctx, req) var in adminin.UpdatePermissionsInp
if err = gconv.Scan(req, &in); err != nil {
return
}
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.AdminRole().UpdatePermissions(ctx, in)
return return
} }
// DataScopeSelect 获取数据权限选项 // DataScopeSelect 获取数据权限选项
func (c *cRole) DataScopeSelect(ctx context.Context, _ *role.DataScopeSelectReq) (res *role.DataScopeSelectRes, err error) { func (c *cRole) DataScopeSelect(_ context.Context, _ *role.DataScopeSelectReq) (res *role.DataScopeSelectRes, err error) {
data := service.AdminRole().DataScopeSelect(ctx)
res = new(role.DataScopeSelectRes) res = new(role.DataScopeSelectRes)
res.List = data res.List = service.AdminRole().DataScopeSelect()
return return
} }
@ -117,6 +128,10 @@ func (c *cRole) DataScopeEdit(ctx context.Context, req *role.DataScopeEditReq) (
} }
in.CustomDept = req.CustomDept in.CustomDept = req.CustomDept
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.AdminRole().DataScopeEdit(ctx, &in) err = service.AdminRole().DataScopeEdit(ctx, &in)
return return
} }

View File

@ -12,6 +12,7 @@ import (
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
"hotgo/internal/model/input/sysin" "hotgo/internal/model/input/sysin"
"hotgo/internal/service" "hotgo/internal/service"
"hotgo/utility/validate"
) )
var ( var (
@ -38,6 +39,10 @@ func (c *cCronGroup) Edit(ctx context.Context, req *cron.GroupEditReq) (res *cro
return return
} }
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.SysCronGroup().Edit(ctx, in) err = service.SysCronGroup().Edit(ctx, in)
return res, nil return res, nil
} }
@ -93,6 +98,10 @@ func (c *cCronGroup) Status(ctx context.Context, req *cron.GroupStatusReq) (res
return return
} }
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.SysCronGroup().Status(ctx, in) err = service.SysCronGroup().Status(ctx, in)
return res, nil return res, nil
} }

View File

@ -3,8 +3,7 @@
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
// @AutoGenerate Version 2.5.3 // @AutoGenerate Version 2.7.3
// @AutoGenerate Date 2023-04-28 15:28:40
package sys package sys
import ( import (

View File

@ -13,6 +13,7 @@ import (
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
"hotgo/internal/model/input/sysin" "hotgo/internal/model/input/sysin"
"hotgo/internal/service" "hotgo/internal/service"
"hotgo/utility/validate"
) )
var ( var (
@ -39,6 +40,10 @@ func (c *cDictData) Edit(ctx context.Context, req *dict.DataEditReq) (res *dict.
return return
} }
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.SysDictData().Edit(ctx, in) err = service.SysDictData().Edit(ctx, in)
return return
} }

View File

@ -11,6 +11,7 @@ import (
"hotgo/api/admin/dict" "hotgo/api/admin/dict"
"hotgo/internal/model/input/sysin" "hotgo/internal/model/input/sysin"
"hotgo/internal/service" "hotgo/internal/service"
"hotgo/utility/validate"
) )
var ( var (
@ -44,6 +45,10 @@ func (c *cDictType) Edit(ctx context.Context, req *dict.TypeEditReq) (res *dict.
return return
} }
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.SysDictType().Edit(ctx, in) err = service.SysDictType().Edit(ctx, in)
return return
} }

View File

@ -3,7 +3,6 @@
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
package sys package sys
import ( import (
@ -14,6 +13,7 @@ import (
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
"hotgo/internal/model/input/sysin" "hotgo/internal/model/input/sysin"
"hotgo/internal/service" "hotgo/internal/service"
"hotgo/utility/validate"
) )
var ( var (
@ -23,7 +23,7 @@ var (
type cProvinces struct{} type cProvinces struct{}
// Tree 关系树选项列表 // Tree 关系树选项列表
func (c *cProvinces) Tree(ctx context.Context, req *provinces.TreeReq) (res *provinces.TreeRes, err error) { func (c *cProvinces) Tree(ctx context.Context, _ *provinces.TreeReq) (res *provinces.TreeRes, err error) {
res = new(provinces.TreeRes) res = new(provinces.TreeRes)
res.List, err = service.SysProvinces().Tree(ctx) res.List, err = service.SysProvinces().Tree(ctx)
return return
@ -47,6 +47,10 @@ func (c *cProvinces) Edit(ctx context.Context, req *provinces.EditReq) (res *pro
return return
} }
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.SysProvinces().Edit(ctx, in) err = service.SysProvinces().Edit(ctx, in)
return return
} }
@ -102,6 +106,10 @@ func (c *cProvinces) Status(ctx context.Context, req *provinces.StatusReq) (res
return return
} }
if err = validate.PreFilter(ctx, &in); err != nil {
return
}
err = service.SysProvinces().Status(ctx, in) err = service.SysProvinces().Status(ctx, in)
return return
} }

View File

@ -30,14 +30,13 @@ func Init(ctx context.Context) {
// 设置服务日志处理 // 设置服务日志处理
g.Log().SetHandlers(LoggingServeLogHandler) g.Log().SetHandlers(LoggingServeLogHandler)
_, err := g.Cfg().Get(ctx, "hotgo.debug") if _, err := g.Cfg().Get(ctx, "hotgo.debug"); err != nil {
if err != nil {
g.Log().Fatal(ctx, "配置读取异常:", err, "\r\n你确定 config/config.yaml 文件存在且格式正确吗?\r\n") g.Log().Fatal(ctx, "配置读取异常:", err, "\r\n你确定 config/config.yaml 文件存在且格式正确吗?\r\n")
return return
} }
// 默认上海时区 // 默认上海时区
if err = gtime.SetTimeZone("Asia/Shanghai"); err != nil { if err := gtime.SetTimeZone("Asia/Shanghai"); err != nil {
g.Log().Fatalf(ctx, "时区设置异常 err%+v", err) g.Log().Fatalf(ctx, "时区设置异常 err%+v", err)
return return
} }

View File

@ -23,6 +23,13 @@ var defaultFormModeMap = map[string]string{
TsTypeAny: FormModeInput, TsTypeAny: FormModeInput,
} }
var defaultEditFields = map[string]bool{
"id": false,
"created_at": false,
"updated_at": false,
"deleted_at": false,
}
var defaultEditSwitch = map[string]bool{ var defaultEditSwitch = map[string]bool{
"id": false, "id": false,
"level": false, "level": false,
@ -33,6 +40,7 @@ var defaultEditSwitch = map[string]bool{
"updated_at": false, "updated_at": false,
"deleted_at": false, "deleted_at": false,
} }
var defaultListSwitch = map[string]bool{ var defaultListSwitch = map[string]bool{
"level": false, "level": false,
"tree": false, "tree": false,
@ -135,6 +143,10 @@ func setDefaultEdit(field *sysin.GenCodesColumnListModel) {
return return
} }
if df, ok := defaultEditFields[field.Name]; ok {
field.IsEdit = df
}
if df, ok := defaultEditSwitch[field.Name]; ok { if df, ok := defaultEditSwitch[field.Name]; ok {
field.IsEdit = df field.IsEdit = df
} }

View File

@ -25,7 +25,8 @@ const (
InputTypeListModel = 2 // 列表输出 InputTypeListModel = 2 // 列表输出
InputTypeExportModel = 3 // 列表导出 InputTypeExportModel = 3 // 列表导出
InputTypeEditInpValidator = 4 // 添加&编辑验证器 InputTypeEditInpValidator = 4 // 添加&编辑验证器
InputTypeUpdateFields = 5 // 编辑修改过滤字段
InputTypeInsertFields = 6 // 编辑新增过滤字段
EditInpValidatorGenerally = "if err := g.Validator().Rules(\"%s\").Data(in.%s).Messages(\"%s\").Run(ctx); err != nil {\n\t\treturn err.Current()\n\t}\n" EditInpValidatorGenerally = "if err := g.Validator().Rules(\"%s\").Data(in.%s).Messages(\"%s\").Run(ctx); err != nil {\n\t\treturn err.Current()\n\t}\n"
) )
@ -35,6 +36,8 @@ func (l *gCurd) inputTplData(ctx context.Context, in *CurdPreviewInput) (data g.
data["listModelColumns"] = l.generateInputListColumns(ctx, in, InputTypeListModel) data["listModelColumns"] = l.generateInputListColumns(ctx, in, InputTypeListModel)
data["exportModelColumns"] = l.generateInputListColumns(ctx, in, InputTypeExportModel) data["exportModelColumns"] = l.generateInputListColumns(ctx, in, InputTypeExportModel)
data["editInpValidator"] = l.generateInputListColumns(ctx, in, InputTypeEditInpValidator) data["editInpValidator"] = l.generateInputListColumns(ctx, in, InputTypeEditInpValidator)
data["updateFieldsColumns"] = l.generateInputListColumns(ctx, in, InputTypeUpdateFields)
data["insertFieldsColumns"] = l.generateInputListColumns(ctx, in, InputTypeInsertFields)
return return
} }
@ -132,7 +135,7 @@ func (l *gCurd) generateStructFieldDefinition(field *sysin.GenCodesColumnListMod
if !field.Required && (field.FormRole == "none" || field.FormRole == "") { if !field.Required && (field.FormRole == "none" || field.FormRole == "") {
return nil return nil
} }
rule := "// 验证" + field.GoName + "\n" rule := "// 验证" + field.Dc + "\n"
if field.Required && (field.FormRole == FormRoleNone || field.FormRole == "") { if field.Required && (field.FormRole == FormRoleNone || field.FormRole == "") {
field.FormRole = "required" field.FormRole = "required"
} }
@ -142,6 +145,22 @@ func (l *gCurd) generateStructFieldDefinition(field *sysin.GenCodesColumnListMod
rule += s rule += s
} }
result = []string{rule} result = []string{rule}
case InputTypeUpdateFields:
if !field.IsEdit && field.GoName != "UpdatedBy" {
return nil
}
result = append(result, " #"+field.GoType)
result = append(result, " #"+fmt.Sprintf(tagKey+`json:"%s"`, field.TsName))
result = append(result, " #"+fmt.Sprintf(`dc:"%s"`+tagKey, descriptionTag))
case InputTypeInsertFields:
if !field.IsEdit && field.GoName != "CreatedBy" {
return nil
}
result = append(result, " #"+field.GoType)
result = append(result, " #"+fmt.Sprintf(tagKey+`json:"%s"`, field.TsName))
result = append(result, " #"+fmt.Sprintf(`dc:"%s"`+tagKey, descriptionTag))
default: default:
panic("inputType is invalid") panic("inputType is invalid")
} }

View File

@ -21,8 +21,8 @@ const (
LogicListSimpleSelect = "\tfields, err := hgorm.GenSelect(ctx, sysin.%sListModel{}, dao.%s)\n\tif err != nil {\n\t\treturn\n\t}" LogicListSimpleSelect = "\tfields, err := hgorm.GenSelect(ctx, sysin.%sListModel{}, dao.%s)\n\tif err != nil {\n\t\treturn\n\t}"
LogicListJoinSelect = "\t//关联表select\n\tfields, err := hgorm.GenJoinSelect(ctx, %sin.%sListModel{}, dao.%s, []*hgorm.Join{\n%v\t})" LogicListJoinSelect = "\t//关联表select\n\tfields, err := hgorm.GenJoinSelect(ctx, %sin.%sListModel{}, dao.%s, []*hgorm.Join{\n%v\t})"
LogicListJoinOnRelation = "\t// 关联表%s\n\tmod = mod.%s(hgorm.GenJoinOnRelation(\n\t\tdao.%s.Table(), dao.%s.Columns().%s, // 主表表名,关联字段\n\t\tdao.%s.Table(), \"%s\", dao.%s.Columns().%s, // 关联表表名,别名,关联字段\n\t)...)\n\n" LogicListJoinOnRelation = "\t// 关联表%s\n\tmod = mod.%s(hgorm.GenJoinOnRelation(\n\t\tdao.%s.Table(), dao.%s.Columns().%s, // 主表表名,关联字段\n\t\tdao.%s.Table(), \"%s\", dao.%s.Columns().%s, // 关联表表名,别名,关联字段\n\t)...)\n\n"
LogicEditUpdate = "\t\t_, err = s.Model(ctx%s).\n\t\t\tFields(\n%s\t\t\t).\n\t\t\tWhere(dao.%s.Columns().%s, in.%s).Data(in).Update()\n\t\treturn " LogicEditUpdate = "\t\t_, err = s.Model(ctx%s).\n\t\t\tFields(%sin.%sUpdateFields{}).\n\t\t\tWherePri(in.%s).Data(in).Update()\n\t\treturn "
LogicEditInsert = "\t_, err = s.Model(ctx, &handler.Option{FilterAuth: false}).\n\t\tFields(\n%s\t\t).\n\t\tData(in).Insert()" LogicEditInsert = "\t_, err = s.Model(ctx, &handler.Option{FilterAuth: false}).\n\t\tFields(%sin.%sInsertFields{}).\n\t\tData(in).Insert()"
LogicEditUnique = "\t// 验证'%s'唯一\n\tif err = hgorm.IsUnique(ctx, dao.%s, g.Map{dao.%s.Columns().%s: in.%s}, \"%s已存在\", in.Id); err != nil {\n\t\treturn\n\t}\n" LogicEditUnique = "\t// 验证'%s'唯一\n\tif err = hgorm.IsUnique(ctx, dao.%s, g.Map{dao.%s.Columns().%s: in.%s}, \"%s已存在\", in.Id); err != nil {\n\t\treturn\n\t}\n"
LogicSwitchUpdate = "g.Map{\n\t\tin.Key: in.Value,\n%s}" LogicSwitchUpdate = "g.Map{\n\t\tin.Key: in.Value,\n%s}"
LogicStatusUpdate = "g.Map{\n\t\tdao.%s.Columns().Status: in.Status,\n%s}" LogicStatusUpdate = "g.Map{\n\t\tdao.%s.Columns().Status: in.Status,\n%s}"
@ -69,7 +69,7 @@ func (l *gCurd) generateLogicSwitchFields(ctx context.Context, in *CurdPreviewIn
if in.options.Step.HasSwitch { if in.options.Step.HasSwitch {
for _, field := range in.masterFields { for _, field := range in.masterFields {
if field.FormMode == "Switch" { if field.FormMode == "Switch" {
buffer.WriteString("\t\t\"" + field.TsName + "\",\n") buffer.WriteString("\t\tdao." + in.In.DaoName + ".Columns()." + field.GoName + ",\n")
} }
} }
} }
@ -79,9 +79,7 @@ func (l *gCurd) generateLogicSwitchFields(ctx context.Context, in *CurdPreviewIn
func (l *gCurd) generateLogicEdit(ctx context.Context, in *CurdPreviewInput) g.Map { func (l *gCurd) generateLogicEdit(ctx context.Context, in *CurdPreviewInput) g.Map {
var ( var (
data = make(g.Map) data = make(g.Map)
updateFields = ""
updateBuffer = bytes.NewBuffer(nil) updateBuffer = bytes.NewBuffer(nil)
insertFields = ""
insertBuffer = bytes.NewBuffer(nil) insertBuffer = bytes.NewBuffer(nil)
uniqueBuffer = bytes.NewBuffer(nil) uniqueBuffer = bytes.NewBuffer(nil)
) )
@ -95,14 +93,6 @@ func (l *gCurd) generateLogicEdit(ctx context.Context, in *CurdPreviewInput) g.M
insertBuffer.WriteString("\tin.CreatedBy = contexts.GetUserId(ctx)\n") insertBuffer.WriteString("\tin.CreatedBy = contexts.GetUserId(ctx)\n")
} }
if field.Index != consts.GenCodesIndexPK && (field.IsEdit == true || field.GoName == "UpdatedAt" || field.GoName == "UpdatedBy") {
updateFields = updateFields + "\t\t\t\tdao." + in.In.DaoName + ".Columns()." + field.GoName + ",\n"
}
if field.Index != consts.GenCodesIndexPK && (field.IsEdit == true || field.Required == true || field.GoName == "CreatedAt" || field.GoName == "CreatedBy") {
insertFields = insertFields + "\t\t\t\tdao." + in.In.DaoName + ".Columns()." + field.GoName + ",\n"
}
if field.Unique { if field.Unique {
uniqueBuffer.WriteString(fmt.Sprintf(LogicEditUnique, field.GoName, in.In.DaoName, in.In.DaoName, field.GoName, field.GoName, field.Dc)) uniqueBuffer.WriteString(fmt.Sprintf(LogicEditUnique, field.GoName, in.In.DaoName, in.In.DaoName, field.GoName, field.GoName, field.Dc))
} }
@ -113,8 +103,8 @@ func (l *gCurd) generateLogicEdit(ctx context.Context, in *CurdPreviewInput) g.M
notFilterAuth = ", &handler.Option{FilterAuth: false}" notFilterAuth = ", &handler.Option{FilterAuth: false}"
} }
updateBuffer.WriteString(fmt.Sprintf(LogicEditUpdate, notFilterAuth, updateFields, in.In.DaoName, in.pk.GoName, in.pk.GoName)) updateBuffer.WriteString(fmt.Sprintf(LogicEditUpdate, notFilterAuth, in.options.TemplateGroup, in.In.VarName, in.pk.GoName))
insertBuffer.WriteString(fmt.Sprintf(LogicEditInsert, insertFields)) insertBuffer.WriteString(fmt.Sprintf(LogicEditInsert, in.options.TemplateGroup, in.In.VarName))
data["update"] = updateBuffer.String() data["update"] = updateBuffer.String()
data["insert"] = insertBuffer.String() data["insert"] = insertBuffer.String()

View File

@ -9,7 +9,7 @@ import (
"context" "context"
"github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/frame/g"
"hotgo/internal/consts" "hotgo/internal/consts"
"hotgo/internal/dao" "hotgo/internal/dao"
"hotgo/internal/library/contexts" "hotgo/internal/library/contexts"
@ -20,7 +20,6 @@ import (
"hotgo/internal/service" "hotgo/internal/service"
"hotgo/utility/convert" "hotgo/utility/convert"
"hotgo/utility/tree" "hotgo/utility/tree"
"hotgo/utility/validate"
) )
type sAdminDept struct{} type sAdminDept struct{}
@ -33,18 +32,6 @@ func init() {
service.RegisterAdminDept(NewAdminDept()) service.RegisterAdminDept(NewAdminDept())
} }
// NameUnique 菜单名称是否唯一
func (s *sAdminDept) NameUnique(ctx context.Context, in adminin.DeptNameUniqueInp) (res *adminin.DeptNameUniqueModel, err error) {
isUnique, err := dao.AdminDept.IsUniqueName(ctx, in.Id, in.Name)
if err != nil {
return
}
res = new(adminin.DeptNameUniqueModel)
res.IsUnique = isUnique
return
}
// Delete 删除 // Delete 删除
func (s *sAdminDept) Delete(ctx context.Context, in adminin.DeptDeleteInp) (err error) { func (s *sAdminDept) Delete(ctx context.Context, in adminin.DeptDeleteInp) (err error) {
var models *entity.AdminDept var models *entity.AdminDept
@ -71,18 +58,7 @@ func (s *sAdminDept) Delete(ctx context.Context, in adminin.DeptDeleteInp) (err
// Edit 修改/新增 // Edit 修改/新增
func (s *sAdminDept) Edit(ctx context.Context, in adminin.DeptEditInp) (err error) { func (s *sAdminDept) Edit(ctx context.Context, in adminin.DeptEditInp) (err error) {
if in.Name == "" { if err = hgorm.IsUnique(ctx, dao.AdminDept, g.Map{dao.AdminDept.Columns().Name: in.Name}, "名称已存在", in.Id); err != nil {
err = gerror.New("名称不能为空")
return
}
uniqueName, err := dao.AdminDept.IsUniqueName(ctx, in.Id, in.Name)
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
if !uniqueName {
err = gerror.New("名称已存在")
return return
} }
@ -103,7 +79,7 @@ func (s *sAdminDept) Edit(ctx context.Context, in adminin.DeptEditInp) (err erro
err = dao.AdminDept.Transaction(ctx, func(ctx context.Context, tx gdb.TX) error { err = dao.AdminDept.Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
// 更新数据 // 更新数据
_, err = dao.AdminDept.Ctx(ctx).Where("id", in.Id).Data(in).Update() _, err = dao.AdminDept.Ctx(ctx).Fields(adminin.DeptUpdateFields{}).WherePri(in.Id).Data(in).Update()
if err != nil { if err != nil {
return err return err
} }
@ -116,7 +92,7 @@ func (s *sAdminDept) Edit(ctx context.Context, in adminin.DeptEditInp) (err erro
} }
// 新增 // 新增
_, err = dao.AdminDept.Ctx(ctx).Data(in).Insert() _, err = dao.AdminDept.Ctx(ctx).Fields(adminin.DeptInsertFields{}).Data(in).Insert()
return return
} }
@ -144,24 +120,9 @@ func updateChildrenTree(ctx context.Context, _id int64, _level int, _tree string
// Status 更新部门状态 // Status 更新部门状态
func (s *sAdminDept) Status(ctx context.Context, in adminin.DeptStatusInp) (err error) { func (s *sAdminDept) Status(ctx context.Context, in adminin.DeptStatusInp) (err error) {
if in.Id <= 0 { if _, err = dao.AdminDept.Ctx(ctx).Where("id", in.Id).Data("status", in.Status).Update(); err != nil {
err = gerror.New("ID不能为空") err = gerror.Wrap(err, consts.ErrorORM)
return
} }
if in.Status <= 0 {
err = gerror.New("状态不能为空")
return
}
if !validate.InSliceInt(consts.StatusSlice, in.Status) {
err = gerror.New("状态不正确")
return
}
// 修改
in.UpdatedAt = gtime.Now()
_, err = dao.AdminDept.Ctx(ctx).Where("id", in.Id).Data("status", in.Status).Update()
return return
} }
@ -177,6 +138,7 @@ func (s *sAdminDept) MaxSort(ctx context.Context, in adminin.DeptMaxSortInp) (re
if res == nil { if res == nil {
res = new(adminin.DeptMaxSortModel) res = new(adminin.DeptMaxSortModel)
} }
res.Sort = form.DefaultMaxSort(ctx, res.Sort) res.Sort = form.DefaultMaxSort(ctx, res.Sort)
return return
} }

View File

@ -47,17 +47,17 @@ func (s *sAdminMember) AddBalance(ctx context.Context, in adminin.MemberAddBalan
memberId = contexts.GetUserId(ctx) memberId = contexts.GetUserId(ctx)
) )
if err = s.FilterAuthModel(ctx, memberId).Where("id", in.Id).Scan(&mb); err != nil { if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&mb); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
return err return
} }
if mb == nil { if mb == nil {
err = gerror.New("用户信息不存在") err = gerror.New("用户信息不存在")
return err return
} }
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) { return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
// 更新我的余额 // 更新我的余额
_, err = service.AdminCreditsLog().SaveBalance(ctx, adminin.CreditsLogSaveBalanceInp{ _, err = service.AdminCreditsLog().SaveBalance(ctx, adminin.CreditsLogSaveBalanceInp{
MemberId: memberId, MemberId: memberId,
@ -68,7 +68,7 @@ func (s *sAdminMember) AddBalance(ctx context.Context, in adminin.MemberAddBalan
Remark: fmt.Sprintf("为后台用户:%v 操作%v", mb.Id, in.Remark), Remark: fmt.Sprintf("为后台用户:%v 操作%v", mb.Id, in.Remark),
}) })
if err != nil { if err != nil {
return err return
} }
// 更新对方余额 // 更新对方余额
@ -82,8 +82,6 @@ func (s *sAdminMember) AddBalance(ctx context.Context, in adminin.MemberAddBalan
}) })
return return
}) })
return
} }
// AddIntegral 增加积分 // AddIntegral 增加积分
@ -93,17 +91,17 @@ func (s *sAdminMember) AddIntegral(ctx context.Context, in adminin.MemberAddInte
memberId = contexts.GetUserId(ctx) memberId = contexts.GetUserId(ctx)
) )
if err = s.FilterAuthModel(ctx, memberId).Where("id", in.Id).Scan(&mb); err != nil { if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&mb); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
return err return
} }
if mb == nil { if mb == nil {
err = gerror.New("用户信息不存在") err = gerror.New("用户信息不存在")
return err return
} }
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) { return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
// 更新我的余额 // 更新我的余额
_, err = service.AdminCreditsLog().SaveIntegral(ctx, adminin.CreditsLogSaveIntegralInp{ _, err = service.AdminCreditsLog().SaveIntegral(ctx, adminin.CreditsLogSaveIntegralInp{
MemberId: memberId, MemberId: memberId,
@ -114,7 +112,7 @@ func (s *sAdminMember) AddIntegral(ctx context.Context, in adminin.MemberAddInte
Remark: fmt.Sprintf("为后台用户:%v 操作%v", mb.Id, in.Remark), Remark: fmt.Sprintf("为后台用户:%v 操作%v", mb.Id, in.Remark),
}) })
if err != nil { if err != nil {
return err return
} }
// 更新对方余额 // 更新对方余额
@ -128,8 +126,6 @@ func (s *sAdminMember) AddIntegral(ctx context.Context, in adminin.MemberAddInte
}) })
return return
}) })
return
} }
// UpdateCash 修改提现信息 // UpdateCash 修改提现信息
@ -140,19 +136,18 @@ func (s *sAdminMember) UpdateCash(ctx context.Context, in adminin.MemberUpdateCa
return return
} }
var memberInfo entity.AdminMember var mb entity.AdminMember
if err = dao.AdminMember.Ctx(ctx).Where("id", memberId).Scan(&memberInfo); err != nil { if err = dao.AdminMember.Ctx(ctx).WherePri(memberId).Scan(&mb); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
return return
} }
if gmd5.MustEncryptString(in.Password+memberInfo.Salt) != memberInfo.PasswordHash { if gmd5.MustEncryptString(in.Password+mb.Salt) != mb.PasswordHash {
err = gerror.New("登录密码不正确") err = gerror.New("登录密码不正确")
return return
} }
_, err = dao.AdminMember.Ctx(ctx). _, err = dao.AdminMember.Ctx(ctx).WherePri(memberId).
Where("id", memberId).
Data(g.Map{ Data(g.Map{
dao.AdminMember.Columns().Cash: adminin.MemberCash{ dao.AdminMember.Columns().Cash: adminin.MemberCash{
Name: in.Name, Name: in.Name,
@ -162,6 +157,10 @@ func (s *sAdminMember) UpdateCash(ctx context.Context, in adminin.MemberUpdateCa
}). }).
Update() Update()
if err != nil {
err = gerror.New("修改提现信息失败!")
return
}
return return
} }
@ -170,21 +169,21 @@ func (s *sAdminMember) UpdateEmail(ctx context.Context, in adminin.MemberUpdateE
memberId := contexts.Get(ctx).User.Id memberId := contexts.Get(ctx).User.Id
if memberId <= 0 { if memberId <= 0 {
err = gerror.New("获取用户信息失败!") err = gerror.New("获取用户信息失败!")
return err return
} }
var memberInfo *entity.AdminMember var mb *entity.AdminMember
if err = dao.AdminMember.Ctx(ctx).Where("id", memberId).Scan(&memberInfo); err != nil { if err = dao.AdminMember.Ctx(ctx).WherePri(memberId).Scan(&mb); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
return err return
} }
if memberInfo == nil { if mb == nil {
err = gerror.New("用户信息不存在") err = gerror.New("用户信息不存在")
return err return
} }
if memberInfo.Email == in.Email { if mb.Email == in.Email {
err = gerror.New("新旧邮箱不能一样") err = gerror.New("新旧邮箱不能一样")
return return
} }
@ -195,14 +194,14 @@ func (s *sAdminMember) UpdateEmail(ctx context.Context, in adminin.MemberUpdateE
} }
// 存在原绑定号码,需要进行验证 // 存在原绑定号码,需要进行验证
if memberInfo.Email != "" { if mb.Email != "" {
err = service.SysEmsLog().VerifyCode(ctx, sysin.VerifyEmsCodeInp{ err = service.SysEmsLog().VerifyCode(ctx, sysin.VerifyEmsCodeInp{
Event: consts.EmsTemplateBind, Event: consts.EmsTemplateBind,
Email: memberInfo.Email, Email: mb.Email,
Code: in.Code, Code: in.Code,
}) })
if err != nil { if err != nil {
return err return
} }
} }
@ -210,12 +209,10 @@ func (s *sAdminMember) UpdateEmail(ctx context.Context, in adminin.MemberUpdateE
dao.AdminMember.Columns().Email: in.Email, dao.AdminMember.Columns().Email: in.Email,
} }
_, err = dao.AdminMember.Ctx(ctx).Where("id", memberId).Data(update).Update() if _, err = dao.AdminMember.Ctx(ctx).WherePri(memberId).Data(update).Update(); err != nil {
if err != nil { err = gerror.Wrap(err, "换绑邮箱失败,请稍后重试!")
err = gerror.Wrap(err, consts.ErrorORM) return
return err
} }
return return
} }
@ -224,18 +221,18 @@ func (s *sAdminMember) UpdateMobile(ctx context.Context, in adminin.MemberUpdate
memberId := contexts.Get(ctx).User.Id memberId := contexts.Get(ctx).User.Id
if memberId <= 0 { if memberId <= 0 {
err = gerror.New("获取用户信息失败!") err = gerror.New("获取用户信息失败!")
return err return
} }
var mb *entity.AdminMember var mb *entity.AdminMember
if err = dao.AdminMember.Ctx(ctx).Where("id", memberId).Scan(&mb); err != nil { if err = dao.AdminMember.Ctx(ctx).WherePri(memberId).Scan(&mb); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
return err return
} }
if mb == nil { if mb == nil {
err = gerror.New("用户信息不存在") err = gerror.New("用户信息不存在")
return err return
} }
if mb.Mobile == in.Mobile { if mb.Mobile == in.Mobile {
@ -256,7 +253,7 @@ func (s *sAdminMember) UpdateMobile(ctx context.Context, in adminin.MemberUpdate
Code: in.Code, Code: in.Code,
}) })
if err != nil { if err != nil {
return err return
} }
} }
@ -264,11 +261,10 @@ func (s *sAdminMember) UpdateMobile(ctx context.Context, in adminin.MemberUpdate
dao.AdminMember.Columns().Mobile: in.Mobile, dao.AdminMember.Columns().Mobile: in.Mobile,
} }
if _, err = dao.AdminMember.Ctx(ctx).Where("id", memberId).Data(update).Update(); err != nil { if _, err = dao.AdminMember.Ctx(ctx).WherePri(memberId).Data(update).Update(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "换绑手机号失败,请稍后重试!")
return err return
} }
return return
} }
@ -277,63 +273,59 @@ func (s *sAdminMember) UpdateProfile(ctx context.Context, in adminin.MemberUpdat
memberId := contexts.Get(ctx).User.Id memberId := contexts.Get(ctx).User.Id
if memberId <= 0 { if memberId <= 0 {
err = gerror.New("获取用户信息失败!") err = gerror.New("获取用户信息失败!")
return err return
} }
var mb *entity.AdminMember var mb *entity.AdminMember
if err = dao.AdminMember.Ctx(ctx).Where("id", memberId).Scan(&mb); err != nil { if err = dao.AdminMember.Ctx(ctx).WherePri(memberId).Scan(&mb); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
return err return
} }
if mb == nil { if mb == nil {
err = gerror.New("用户信息不存在") err = gerror.New("用户信息不存在")
return err return
} }
cols := dao.AdminMember.Columns()
update := g.Map{ update := g.Map{
dao.AdminMember.Columns().Avatar: in.Avatar, cols.Avatar: in.Avatar,
dao.AdminMember.Columns().RealName: in.RealName, cols.RealName: in.RealName,
dao.AdminMember.Columns().Qq: in.Qq, cols.Qq: in.Qq,
dao.AdminMember.Columns().Birthday: in.Birthday, cols.Birthday: in.Birthday,
dao.AdminMember.Columns().Sex: in.Sex, cols.Sex: in.Sex,
dao.AdminMember.Columns().CityId: in.CityId, cols.CityId: in.CityId,
dao.AdminMember.Columns().Address: in.Address, cols.Address: in.Address,
} }
if _, err = dao.AdminMember.Ctx(ctx).Where("id", memberId).Data(update).Update(); err != nil { if _, err = dao.AdminMember.Ctx(ctx).WherePri(memberId).Data(update).Update(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "更新资料失败,请稍后重试!")
return err return
} }
return return
} }
// UpdatePwd 修改登录密码 // UpdatePwd 修改登录密码
func (s *sAdminMember) UpdatePwd(ctx context.Context, in adminin.MemberUpdatePwdInp) (err error) { func (s *sAdminMember) UpdatePwd(ctx context.Context, in adminin.MemberUpdatePwdInp) (err error) {
var mb entity.AdminMember var mb entity.AdminMember
if err = dao.AdminMember.Ctx(ctx).Where("id", in.Id).Scan(&mb); err != nil { if err = dao.AdminMember.Ctx(ctx).WherePri(in.Id).Scan(&mb); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
return err return
} }
if gmd5.MustEncryptString(in.OldPassword+mb.Salt) != mb.PasswordHash { if gmd5.MustEncryptString(in.OldPassword+mb.Salt) != mb.PasswordHash {
err = gerror.New("原密码不正确") err = gerror.New("原密码不正确")
return err return
} }
_, err = dao.AdminMember.Ctx(ctx). update := g.Map{
Where("id", in.Id). dao.AdminMember.Columns().PasswordHash: gmd5.MustEncryptString(in.NewPassword + mb.Salt),
Data(g.Map{
dao.AdminMember.Columns().PasswordHash: gmd5.MustEncryptString(in.NewPassword + mb.Salt),
}).
Update()
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return err
} }
if _, err = dao.AdminMember.Ctx(ctx).WherePri(in.Id).Data(update).Update(); err != nil {
err = gerror.Wrap(err, "更新登录密码失败,请稍后重试!")
return
}
return return
} }
@ -344,8 +336,8 @@ func (s *sAdminMember) ResetPwd(ctx context.Context, in adminin.MemberResetPwdIn
memberId = contexts.GetUserId(ctx) memberId = contexts.GetUserId(ctx)
) )
if err = s.FilterAuthModel(ctx, memberId).Where("id", in.Id).Scan(&mb); err != nil { if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&mb); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
return return
} }
@ -354,12 +346,14 @@ func (s *sAdminMember) ResetPwd(ctx context.Context, in adminin.MemberResetPwdIn
return return
} }
_, err = s.FilterAuthModel(ctx, memberId). update := g.Map{
Where("id", in.Id). dao.AdminMember.Columns().PasswordHash: gmd5.MustEncryptString(in.Password + mb.Salt),
Data(g.Map{ }
dao.AdminMember.Columns().PasswordHash: gmd5.MustEncryptString(in.Password + mb.Salt),
}). if _, err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Data(update).Update(); err != nil {
Update() err = gerror.Wrap(err, "用户密码重置失败,请稍后重试!")
return
}
return return
} }
@ -369,11 +363,12 @@ func (s *sAdminMember) VerifyUnique(ctx context.Context, in adminin.VerifyUnique
return return
} }
cols := dao.AdminMember.Columns()
msgMap := g.MapStrStr{ msgMap := g.MapStrStr{
"username": "用户名已存在,请换一个", cols.Username: "用户名已存在,请换一个",
"email": "邮箱已存在,请换一个", cols.Email: "邮箱已存在,请换一个",
"mobile": "手机号已存在,请换一个", cols.Mobile: "手机号已存在,请换一个",
"invite_code": "邀请码已存在,请换一个", cols.InviteCode: "邀请码已存在,请换一个",
} }
for k, v := range in.Where { for k, v := range in.Where {
@ -389,7 +384,6 @@ func (s *sAdminMember) VerifyUnique(ctx context.Context, in adminin.VerifyUnique
return return
} }
} }
return return
} }
@ -406,8 +400,28 @@ func (s *sAdminMember) Delete(ctx context.Context, in adminin.MemberDeleteInp) (
return return
} }
_, err = s.FilterAuthModel(ctx, memberId).Where("id", in.Id).Delete() var models *entity.AdminMember
return if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&models); err != nil {
err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
return
}
if models == nil {
err = gerror.New("需要删除的用户不存在或已删除!")
return
}
return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
if _, err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Delete(); err != nil {
err = gerror.Wrap(err, "删除用户失败,请稍后重试!")
return
}
if _, err = dao.AdminMemberPost.Ctx(ctx).Where("member_id", memberId).Delete(); err != nil {
err = gerror.Wrap(err, "删除用户岗位失败,请稍后重试!")
}
return
})
} }
// Edit 修改/新增 // Edit 修改/新增
@ -423,12 +437,13 @@ func (s *sAdminMember) Edit(ctx context.Context, in adminin.MemberEditInp) (err
return return
} }
cols := dao.AdminMember.Columns()
err = s.VerifyUnique(ctx, adminin.VerifyUniqueInp{ err = s.VerifyUnique(ctx, adminin.VerifyUniqueInp{
Id: in.Id, Id: in.Id,
Where: g.Map{ Where: g.Map{
dao.AdminMember.Columns().Username: in.Username, cols.Username: in.Username,
dao.AdminMember.Columns().Mobile: in.Mobile, cols.Mobile: in.Mobile,
dao.AdminMember.Columns().Email: in.Email, cols.Email: in.Email,
}, },
}) })
if err != nil { if err != nil {
@ -450,28 +465,30 @@ func (s *sAdminMember) Edit(ctx context.Context, in adminin.MemberEditInp) (err
mod := s.FilterAuthModel(ctx, opMemberId) mod := s.FilterAuthModel(ctx, opMemberId)
if in.Password != "" { if in.Password != "" {
// 修改密码 // 修改密码,需要获取到密码盐
salt, err := s.FilterAuthModel(ctx, contexts.GetUserId(ctx)). salt, err := s.FilterAuthModel(ctx, opMemberId).Fields(cols.Salt).WherePri(in.Id).Value()
Fields(dao.AdminMember.Columns().Salt).
Where("id", in.Id).
Value()
if err != nil { if err != nil {
err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
return err
}
if salt.IsEmpty() {
err = gerror.New("该用户没有设置密码盐,请联系管理员!")
return err return err
} }
in.PasswordHash = gmd5.MustEncryptString(in.Password + salt.String()) in.PasswordHash = gmd5.MustEncryptString(in.Password + salt.String())
} else { } else {
mod = mod.FieldsEx(dao.AdminMember.Columns().PasswordHash) mod = mod.FieldsEx(cols.PasswordHash)
} }
return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) { return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
if _, err = mod.Where("id", in.Id).Data(in).Update(); err != nil { if _, err = mod.WherePri(in.Id).Data(in).Update(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "修改用户信息失败,请稍后重试!")
return return
} }
// 更新岗位 // 更新岗位
if err = dao.AdminMemberPost.UpdatePostIds(ctx, in.Id, in.PostIds); err != nil { if err = dao.AdminMemberPost.UpdatePostIds(ctx, in.Id, in.PostIds); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "更新用户岗位失败,请稍后重试!")
} }
return return
}) })
@ -499,62 +516,62 @@ func (s *sAdminMember) Edit(ctx context.Context, in adminin.MemberEditInp) (err
return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) { return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
id, err := dao.AdminMember.Ctx(ctx).Data(data).InsertAndGetId() id, err := dao.AdminMember.Ctx(ctx).Data(data).InsertAndGetId()
if err != nil { if err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "新增用户失败,请稍后重试!")
return return
} }
// 更新岗位 // 更新岗位
if err = dao.AdminMemberPost.UpdatePostIds(ctx, id, in.PostIds); err != nil { if err = dao.AdminMemberPost.UpdatePostIds(ctx, id, in.PostIds); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "新增用户岗位失败,请稍后重试!")
} }
return return
}) })
} }
// View 获取信息 // View 获取用户信息
func (s *sAdminMember) View(ctx context.Context, in adminin.MemberViewInp) (res *adminin.MemberViewModel, err error) { func (s *sAdminMember) View(ctx context.Context, in adminin.MemberViewInp) (res *adminin.MemberViewModel, err error) {
err = s.FilterAuthModel(ctx, contexts.GetUserId(ctx)). if err = s.FilterAuthModel(ctx, contexts.GetUserId(ctx)).Hook(hook.MemberInfo).WherePri(in.Id).Scan(&res); err != nil {
Hook(hook.MemberInfo). err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
Where("id", in.Id). }
Scan(&res)
return return
} }
// List 获取列表 // List 获取列表
func (s *sAdminMember) List(ctx context.Context, in adminin.MemberListInp) (list []*adminin.MemberListModel, totalCount int, err error) { func (s *sAdminMember) List(ctx context.Context, in adminin.MemberListInp) (list []*adminin.MemberListModel, totalCount int, err error) {
mod := s.FilterAuthModel(ctx, contexts.GetUserId(ctx)) mod := s.FilterAuthModel(ctx, contexts.GetUserId(ctx))
cols := dao.AdminMember.Columns()
if in.RealName != "" { if in.RealName != "" {
mod = mod.WhereLike("real_name", "%"+in.RealName+"%") mod = mod.WhereLike(cols.RealName, "%"+in.RealName+"%")
} }
if in.Username != "" { if in.Username != "" {
mod = mod.WhereLike("username", "%"+in.Username+"%") mod = mod.WhereLike(cols.Username, "%"+in.Username+"%")
} }
if in.Mobile > 0 { if in.Mobile > 0 {
mod = mod.Where("mobile", in.Mobile) mod = mod.Where(cols.Mobile, in.Mobile)
} }
if in.Status > 0 { if in.Status > 0 {
mod = mod.Where("status", in.Status) mod = mod.Where(cols.Status, in.Status)
} }
if in.DeptId > 0 { if in.DeptId > 0 {
mod = mod.Where("dept_id", in.DeptId) mod = mod.Where(cols.DeptId, in.DeptId)
} }
if in.RoleId > 0 { if in.RoleId > 0 {
mod = mod.Where("role_id", in.RoleId) mod = mod.Where(cols.RoleId, in.RoleId)
} }
if len(in.CreatedAt) == 2 { if len(in.CreatedAt) == 2 {
mod = mod.WhereBetween("created_at", gtime.New(in.CreatedAt[0]), gtime.New(in.CreatedAt[1])) mod = mod.WhereBetween(cols.CreatedAt, gtime.New(in.CreatedAt[0]), gtime.New(in.CreatedAt[1]))
} }
totalCount, err = mod.Count() totalCount, err = mod.Count()
if err != nil { if err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取用户数据行失败!")
return return
} }
@ -562,17 +579,19 @@ func (s *sAdminMember) List(ctx context.Context, in adminin.MemberListInp) (list
return return
} }
if err = mod.Hook(hook.MemberInfo).Page(in.Page, in.PerPage).Order("id desc").Scan(&list); err != nil { if err = mod.Hook(hook.MemberInfo).Page(in.Page, in.PerPage).OrderDesc(cols.Id).Scan(&list); err != nil {
err = gerror.Wrap(err, "获取用户列表失败!")
return return
} }
for i := 0; i < len(list); i++ { for i := 0; i < len(list); i++ {
posts, err := dao.AdminMemberPost.Ctx(ctx). posts, err := dao.AdminMemberPost.Ctx(ctx).
Fields("post_id"). Fields(dao.AdminMemberPost.Columns().PostId).
Where("member_id", list[i].Id). Where(dao.AdminMemberPost.Columns().MemberId, list[i].Id).
Array() Array()
if err != nil { if err != nil {
err = gerror.Wrap(err, "获取用户岗位数据失败!")
return nil, 0, err return nil, 0, err
} }
@ -586,36 +605,21 @@ func (s *sAdminMember) List(ctx context.Context, in adminin.MemberListInp) (list
// Status 更新状态 // Status 更新状态
func (s *sAdminMember) Status(ctx context.Context, in adminin.MemberStatusInp) (err error) { func (s *sAdminMember) Status(ctx context.Context, in adminin.MemberStatusInp) (err error) {
if in.Id <= 0 {
err = gerror.New("ID不能为空")
return
}
if s.VerifySuperId(ctx, in.Id) { if s.VerifySuperId(ctx, in.Id) {
err = gerror.New("超管账号不能更改状态") err = gerror.New("超管账号不能更改状态")
return return
} }
if in.Status <= 0 { if _, err = s.FilterAuthModel(ctx, contexts.GetUserId(ctx)).WherePri(in.Id).Data(dao.AdminMember.Columns().Status, in.Status).Update(); err != nil {
err = gerror.New("状态不能为空") err = gerror.Wrap(err, "更新用户状态失败,请稍后重试!")
return
} }
if !validate.InSliceInt(consts.StatusSlice, in.Status) {
err = gerror.New("状态不正确")
return
}
// 修改
in.UpdatedAt = gtime.Now()
_, err = s.FilterAuthModel(ctx, contexts.GetUserId(ctx)).Where("id", in.Id).Data("status", in.Status).Update()
return return
} }
// GenTree 生成关系树 // GenTree 生成关系树
func (s *sAdminMember) GenTree(ctx context.Context, pid int64) (level int, newTree string, err error) { func (s *sAdminMember) GenTree(ctx context.Context, pid int64) (level int, newTree string, err error) {
var pmb *entity.AdminMember var pmb *entity.AdminMember
if err = dao.AdminMember.Ctx(ctx).Where("id", pid).Scan(&pmb); err != nil { if err = dao.AdminMember.Ctx(ctx).WherePri(pid).Scan(&pmb); err != nil {
return return
} }
@ -629,26 +633,6 @@ func (s *sAdminMember) GenTree(ctx context.Context, pid int64) (level int, newTr
return return
} }
// RoleMemberList 获取角色下的用户列表
func (s *sAdminMember) RoleMemberList(ctx context.Context, in adminin.RoleMemberListInp) (list []*adminin.MemberListModel, totalCount int, err error) {
mod := dao.AdminMember.Ctx(ctx)
if in.Role > 0 {
mod = mod.Where("role", in.Role)
}
totalCount, err = mod.Count()
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
if err = mod.Page(in.Page, in.PerPage).Order("id desc").Scan(&list); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
return
}
// LoginMemberInfo 获取登录用户信息 // LoginMemberInfo 获取登录用户信息
func (s *sAdminMember) LoginMemberInfo(ctx context.Context) (res *adminin.LoginMemberInfoModel, err error) { func (s *sAdminMember) LoginMemberInfo(ctx context.Context) (res *adminin.LoginMemberInfoModel, err error) {
var memberId = contexts.GetUserId(ctx) var memberId = contexts.GetUserId(ctx)
@ -657,8 +641,8 @@ func (s *sAdminMember) LoginMemberInfo(ctx context.Context) (res *adminin.LoginM
return return
} }
if err = dao.AdminMember.Ctx(ctx).Hook(hook.MemberInfo).Where("id", memberId).Scan(&res); err != nil { if err = dao.AdminMember.Ctx(ctx).Hook(hook.MemberInfo).WherePri(memberId).Scan(&res); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
return return
} }
@ -677,7 +661,7 @@ func (s *sAdminMember) LoginMemberInfo(ctx context.Context) (res *adminin.LoginM
// 登录统计 // 登录统计
stat, err := s.MemberLoginStat(ctx, adminin.MemberLoginStatInp{MemberId: memberId}) stat, err := s.MemberLoginStat(ctx, adminin.MemberLoginStatInp{MemberId: memberId})
if err != nil { if err != nil {
return nil, err return
} }
res.MemberLoginStatModel = stat res.MemberLoginStatModel = stat
@ -689,11 +673,16 @@ func (s *sAdminMember) LoginMemberInfo(ctx context.Context) (res *adminin.LoginM
// MemberLoginStat 用户登录统计 // MemberLoginStat 用户登录统计
func (s *sAdminMember) MemberLoginStat(ctx context.Context, in adminin.MemberLoginStatInp) (res *adminin.MemberLoginStatModel, err error) { func (s *sAdminMember) MemberLoginStat(ctx context.Context, in adminin.MemberLoginStatInp) (res *adminin.MemberLoginStatModel, err error) {
var models *entity.SysLoginLog var (
models *entity.SysLoginLog
cols = dao.SysLoginLog.Columns()
)
err = dao.SysLoginLog.Ctx(ctx). err = dao.SysLoginLog.Ctx(ctx).
Fields("login_at,login_ip"). Fields(cols.LoginAt, cols.LoginIp).
Where("member_id", in.MemberId). Where(cols.MemberId, in.MemberId).
Where("status", consts.StatusEnabled). Where(cols.Status, consts.StatusEnabled).
OrderDesc(cols.Id).
Scan(&models) Scan(&models)
if err != nil { if err != nil {
@ -708,16 +697,16 @@ func (s *sAdminMember) MemberLoginStat(ctx context.Context, in adminin.MemberLog
res.LastLoginAt = models.LoginAt res.LastLoginAt = models.LoginAt
res.LastLoginIp = models.LoginIp res.LastLoginIp = models.LoginIp
res.LoginCount, err = dao.SysLoginLog.Ctx(ctx). res.LoginCount, err = dao.SysLoginLog.Ctx(ctx).
Where("member_id", in.MemberId). Where(cols.MemberId, in.MemberId).
Where("status", consts.StatusEnabled). Where(cols.Status, consts.StatusEnabled).
Count() Count()
return return
} }
// GetIdByCode 通过邀请码获取用户ID // GetIdByCode 通过邀请码获取用户ID
func (s *sAdminMember) GetIdByCode(ctx context.Context, in adminin.GetIdByCodeInp) (res *adminin.GetIdByCodeModel, err error) { func (s *sAdminMember) GetIdByCode(ctx context.Context, in adminin.GetIdByCodeInp) (res *adminin.GetIdByCodeModel, err error) {
if err = dao.AdminMember.Ctx(ctx).Fields(adminin.GetIdByCodeModel{}).Where("invite_code", in.Code).Scan(&res); err != nil { if err = dao.AdminMember.Ctx(ctx).Fields(adminin.GetIdByCodeModel{}).Where(dao.AdminMember.Columns().InviteCode, in.Code).Scan(&res); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
} }
return return
} }
@ -729,15 +718,14 @@ func (s *sAdminMember) Select(ctx context.Context, in adminin.MemberSelectInp) (
Handler(handler.FilterAuthWithField("id")). Handler(handler.FilterAuthWithField("id")).
Scan(&res) Scan(&res)
if err != nil { if err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取可选用户选项失败,请稍后重试!")
} }
return return
} }
// VerifySuperId 验证是否为超管 // VerifySuperId 验证是否为超管
func (s *sAdminMember) VerifySuperId(ctx context.Context, verifyId int64) bool { func (s *sAdminMember) VerifySuperId(ctx context.Context, verifyId int64) bool {
superIds := g.Cfg().MustGet(ctx, "hotgo.admin.superIds") for _, id := range g.Cfg().MustGet(ctx, "hotgo.admin.superIds").Int64s() {
for _, id := range superIds.Int64s() {
if id == verifyId { if id == verifyId {
return true return true
} }

View File

@ -217,7 +217,7 @@ func (s *sAdminMenu) getChildrenList(menu *adminin.MenuRouteSummary, treeMap map
} }
// GetMenuList 获取菜单列表 // GetMenuList 获取菜单列表
func (s *sAdminMenu) GetMenuList(ctx context.Context, memberId int64) (lists role.DynamicRes, err error) { func (s *sAdminMenu) GetMenuList(ctx context.Context, memberId int64) (res *role.DynamicRes, err error) {
var ( var (
allMenus []adminin.MenuRouteSummary allMenus []adminin.MenuRouteSummary
menus []adminin.MenuRouteSummary menus []adminin.MenuRouteSummary
@ -232,12 +232,12 @@ func (s *sAdminMenu) GetMenuList(ctx context.Context, memberId int64) (lists rol
Where("role_id", contexts.GetRoleId(ctx)). Where("role_id", contexts.GetRoleId(ctx)).
Array() Array()
if err != nil { if err != nil {
return lists, err return nil, err
} }
if len(array) > 0 { if len(array) > 0 {
pidList, err := dao.AdminMenu.Ctx(ctx).Fields("pid").WhereIn("id", array).Group("pid").Array() pidList, err := dao.AdminMenu.Ctx(ctx).Fields("pid").WhereIn("id", array).Group("pid").Array()
if err != nil { if err != nil {
return role.DynamicRes{}, err return nil, err
} }
if len(pidList) > 0 { if len(pidList) > 0 {
array = append(pidList, array...) array = append(pidList, array...)
@ -263,7 +263,8 @@ func (s *sAdminMenu) GetMenuList(ctx context.Context, memberId int64) (lists rol
err = s.getChildrenList(&menus[i], treeMap) err = s.getChildrenList(&menus[i], treeMap)
} }
lists.List = append(lists.List, s.genNaiveMenus(menus)...) res = new(role.DynamicRes)
res.List = append(res.List, s.genNaiveMenus(menus)...)
return return
} }

View File

@ -11,7 +11,6 @@ import (
"github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/frame/g"
"hotgo/api/admin/role"
"hotgo/internal/consts" "hotgo/internal/consts"
"hotgo/internal/dao" "hotgo/internal/dao"
"hotgo/internal/library/casbin" "hotgo/internal/library/casbin"
@ -39,9 +38,9 @@ func init() {
// Verify 验证权限 // Verify 验证权限
func (s *sAdminRole) Verify(ctx context.Context, path, method string) bool { func (s *sAdminRole) Verify(ctx context.Context, path, method string) bool {
var ( var (
user = contexts.Get(ctx).User user = contexts.Get(ctx).User
superRoleKey = g.Cfg().MustGet(ctx, "hotgo.admin.superRoleKey") sk = g.Cfg().MustGet(ctx, "hotgo.admin.superRoleKey")
err error err error
) )
if user == nil { if user == nil {
@ -49,7 +48,7 @@ func (s *sAdminRole) Verify(ctx context.Context, path, method string) bool {
return false return false
} }
if service.AdminMember().VerifySuperId(ctx, user.Id) || user.RoleKey == superRoleKey.String() { if service.AdminMember().VerifySuperId(ctx, user.Id) || user.RoleKey == sk.String() {
return true return true
} }
@ -93,81 +92,75 @@ func (s *sAdminRole) List(ctx context.Context, in adminin.RoleListInp) (res *adm
} }
// GetName 获取指定角色的名称 // GetName 获取指定角色的名称
func (s *sAdminRole) GetName(ctx context.Context, RoleId int64) (name string, err error) { func (s *sAdminRole) GetName(ctx context.Context, id int64) (name string, err error) {
roleName, err := dao.AdminRole.Ctx(ctx). r, err := dao.AdminRole.Ctx(ctx).
Fields("name"). Fields("name").
Where("id", RoleId). WherePri(id).
Order("id desc"). Order("id desc").
Value() Value()
if err != nil { if err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, consts.ErrorORM)
return name, err return
} }
return roleName.String(), nil return r.String(), nil
} }
// GetMemberList 获取指定用户的岗位列表 // GetMemberList 获取指定用户的岗位列表
func (s *sAdminRole) GetMemberList(ctx context.Context, RoleId int64) (list []*adminin.RoleListModel, err error) { func (s *sAdminRole) GetMemberList(ctx context.Context, id int64) (list []*adminin.RoleListModel, err error) {
err = dao.AdminRole.Ctx(ctx). if err = dao.AdminRole.Ctx(ctx).WherePri(id).Order("id desc").Scan(&list); err != nil {
Where("id", RoleId).
Order("id desc").
Scan(&list)
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, consts.ErrorORM)
return list, err
} }
return
return list, err
} }
// GetPermissions 更改角色菜单权限 // GetPermissions 更改角色菜单权限
func (s *sAdminRole) GetPermissions(ctx context.Context, reqInfo *role.GetPermissionsReq) (MenuIds []int64, err error) { func (s *sAdminRole) GetPermissions(ctx context.Context, in adminin.GetPermissionsInp) (res *adminin.GetPermissionsModel, err error) {
values, err := dao.AdminRoleMenu.Ctx(ctx). values, err := dao.AdminRoleMenu.Ctx(ctx).
Fields("menu_id"). Fields("menu_id").
Where("role_id", reqInfo.RoleId). Where("role_id", in.RoleId).
Array() Array()
if err != nil { if err != nil {
return nil, err return
} }
if len(values) == 0 { if len(values) == 0 {
return return
} }
res = new(adminin.GetPermissionsModel)
for i := 0; i < len(values); i++ { for i := 0; i < len(values); i++ {
MenuIds = append(MenuIds, values[i].Int64()) res.MenuIds = append(res.MenuIds, values[i].Int64())
} }
return return
} }
// UpdatePermissions 更改角色菜单权限 // UpdatePermissions 更改角色菜单权限
func (s *sAdminRole) UpdatePermissions(ctx context.Context, reqInfo *role.UpdatePermissionsReq) (err error) { func (s *sAdminRole) UpdatePermissions(ctx context.Context, in adminin.UpdatePermissionsInp) (err error) {
err = dao.AdminRoleMenu.Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) { err = dao.AdminRoleMenu.Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
_, err = dao.AdminRoleMenu.Ctx(ctx).Where("role_id", reqInfo.RoleId).Delete() if _, err = dao.AdminRoleMenu.Ctx(ctx).Where("role_id", in.RoleId).Delete(); err != nil {
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, consts.ErrorORM)
return err return
} }
if len(reqInfo.MenuIds) == 0 { if len(in.MenuIds) == 0 {
return nil return
} }
// 去重 // 去重
reqInfo.MenuIds = convert.UniqueSliceInt64(reqInfo.MenuIds) in.MenuIds = convert.UniqueSliceInt64(in.MenuIds)
addMap := make(g.List, 0, len(reqInfo.MenuIds)) list := make(g.List, 0, len(in.MenuIds))
for _, v := range reqInfo.MenuIds { for _, v := range in.MenuIds {
addMap = append(addMap, g.Map{ list = append(list, g.Map{
"role_id": reqInfo.RoleId, "role_id": in.RoleId,
"menu_id": v, "menu_id": v,
}) })
} }
if _, err = dao.AdminRoleMenu.Ctx(ctx).Data(addMap).Insert(); err != nil { if _, err = dao.AdminRoleMenu.Ctx(ctx).Data(list).Insert(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, consts.ErrorORM)
return err return
} }
return return
@ -180,34 +173,12 @@ func (s *sAdminRole) UpdatePermissions(ctx context.Context, reqInfo *role.Update
return casbin.Refresh(ctx) return casbin.Refresh(ctx)
} }
func (s *sAdminRole) Edit(ctx context.Context, in *role.EditReq) (err error) { func (s *sAdminRole) Edit(ctx context.Context, in adminin.RoleEditInp) (err error) {
if in.Name == "" { if err = hgorm.IsUnique(ctx, dao.AdminRole, g.Map{dao.AdminRole.Columns().Name: in.Name}, "名称已存在", in.Id); err != nil {
err = gerror.New("名称不能为空")
return return
} }
if in.Key == "" { if err = hgorm.IsUnique(ctx, dao.AdminRole, g.Map{dao.AdminRole.Columns().Key: in.Key}, "编码已存在", in.Id); err != nil {
err = gerror.New("编码不能为空")
return
}
uniqueName, err := dao.AdminRole.IsUniqueName(ctx, in.Id, in.Name)
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
if !uniqueName {
err = gerror.New("名称已存在")
return
}
uniqueCode, err := dao.AdminRole.IsUniqueCode(ctx, in.Id, in.Key)
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
if !uniqueCode {
err = gerror.New("编码已存在")
return return
} }
@ -227,8 +198,9 @@ func (s *sAdminRole) Edit(ctx context.Context, in *role.EditReq) (err error) {
err = dao.AdminRole.Transaction(ctx, func(ctx context.Context, tx gdb.TX) error { err = dao.AdminRole.Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
// 更新数据 // 更新数据
_, err = dao.AdminRole.Ctx(ctx).Where("id", in.Id).Data(in).Update() _, err = dao.AdminRole.Ctx(ctx).Fields(adminin.RoleUpdateFields{}).WherePri(in.Id).Data(in).Update()
if err != nil { if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return err return err
} }
@ -239,7 +211,10 @@ func (s *sAdminRole) Edit(ctx context.Context, in *role.EditReq) (err error) {
} }
// 新增 // 新增
_, err = dao.AdminRole.Ctx(ctx).Data(in).Insert() if _, err = dao.AdminRole.Ctx(ctx).Fields(adminin.RoleInsertFields{}).Data(in).Insert(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
return return
} }
@ -265,11 +240,7 @@ func updateRoleChildrenTree(ctx context.Context, _id int64, _level int, _tree st
return return
} }
func (s *sAdminRole) Delete(ctx context.Context, in *role.DeleteReq) (err error) { func (s *sAdminRole) Delete(ctx context.Context, in adminin.RoleDeleteInp) (err error) {
if in.Id <= 0 {
return gerror.New("ID不正确")
}
var models *entity.AdminRole var models *entity.AdminRole
if err = dao.AdminRole.Ctx(ctx).Where("id", in.Id).Scan(&models); err != nil { if err = dao.AdminRole.Ctx(ctx).Where("id", in.Id).Scan(&models); err != nil {
return return
@ -279,20 +250,23 @@ func (s *sAdminRole) Delete(ctx context.Context, in *role.DeleteReq) (err error)
return gerror.New("数据不存在或已删除!") return gerror.New("数据不存在或已删除!")
} }
pidExist, err := dao.AdminRole.Ctx(ctx).Where("pid", models.Id).One() has, err := dao.AdminRole.Ctx(ctx).Where("pid", models.Id).One()
if err != nil { if err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, consts.ErrorORM)
return err return
} }
if !pidExist.IsEmpty() {
if !has.IsEmpty() {
return gerror.New("请先删除该角色下得所有子级!") return gerror.New("请先删除该角色下得所有子级!")
} }
_, err = dao.AdminRole.Ctx(ctx).Where("id", in.Id).Delete() if _, err = dao.AdminRole.Ctx(ctx).Where("id", in.Id).Delete(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
}
return return
} }
func (s *sAdminRole) DataScopeSelect(ctx context.Context) (res form.Selects) { func (s *sAdminRole) DataScopeSelect() (res form.Selects) {
for k, v := range consts.RoleDataNameMap { for k, v := range consts.RoleDataNameMap {
res = append(res, &form.Select{ res = append(res, &form.Select{
Value: k, Value: k,
@ -305,13 +279,9 @@ func (s *sAdminRole) DataScopeSelect(ctx context.Context) (res form.Selects) {
} }
func (s *sAdminRole) DataScopeEdit(ctx context.Context, in *adminin.DataScopeEditInp) (err error) { func (s *sAdminRole) DataScopeEdit(ctx context.Context, in *adminin.DataScopeEditInp) (err error) {
if in.Id <= 0 {
return gerror.New("角色ID不正确")
}
var ( var (
models *entity.AdminRole models *entity.AdminRole
superRoleKey = g.Cfg().MustGet(ctx, "hotgo.admin.superRoleKey") sk = g.Cfg().MustGet(ctx, "hotgo.admin.superRoleKey")
) )
if err = dao.AdminRole.Ctx(ctx).Where("id", in.Id).Scan(&models); err != nil { if err = dao.AdminRole.Ctx(ctx).Where("id", in.Id).Scan(&models); err != nil {
@ -322,7 +292,7 @@ func (s *sAdminRole) DataScopeEdit(ctx context.Context, in *adminin.DataScopeEdi
return gerror.New("角色不存在") return gerror.New("角色不存在")
} }
if models.Key == superRoleKey.String() { if models.Key == sk.String() {
return gerror.New("超管角色拥有全部权限,无需修改!") return gerror.New("超管角色拥有全部权限,无需修改!")
} }
@ -342,7 +312,7 @@ func (s *sAdminRole) DataScopeEdit(ctx context.Context, in *adminin.DataScopeEdi
return return
} }
// treeList 列表 // treeList 角色树列表
func (s *sAdminRole) treeList(pid int64, nodes []*entity.AdminRole) (list []*adminin.RoleTree) { func (s *sAdminRole) treeList(pid int64, nodes []*entity.AdminRole) (list []*adminin.RoleTree) {
list = make([]*adminin.RoleTree, 0) list = make([]*adminin.RoleTree, 0)
for _, v := range nodes { for _, v := range nodes {

View File

@ -17,9 +17,12 @@ import (
"hotgo/internal/service" "hotgo/internal/service"
"hotgo/utility/convert" "hotgo/utility/convert"
"hotgo/utility/validate" "hotgo/utility/validate"
"sync"
) )
type sSysBlacklist struct{} type sSysBlacklist struct {
sync.RWMutex
}
func NewSysBlacklist() *sSysBlacklist { func NewSysBlacklist() *sSysBlacklist {
return &sSysBlacklist{} return &sSysBlacklist{}
@ -126,7 +129,6 @@ func (s *sSysBlacklist) List(ctx context.Context, in sysin.BlacklistListInp) (li
if err = mod.Page(in.Page, in.PerPage).Order("id desc").Scan(&list); err != nil { if err = mod.Page(in.Page, in.PerPage).Order("id desc").Scan(&list); err != nil {
return return
} }
return return
} }
@ -139,6 +141,9 @@ func (s *sSysBlacklist) VariableLoad(ctx context.Context, err error) {
// Load 加载黑名单 // Load 加载黑名单
func (s *sSysBlacklist) Load(ctx context.Context) { func (s *sSysBlacklist) Load(ctx context.Context) {
s.RLock()
defer s.RUnlock()
global.Blacklists = make(map[string]struct{}) global.Blacklists = make(map[string]struct{})
array, err := dao.SysBlacklist.Ctx(ctx). array, err := dao.SysBlacklist.Ctx(ctx).

View File

@ -12,7 +12,6 @@ import (
"github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/text/gstr"
"github.com/gogf/gf/v2/util/gconv" "github.com/gogf/gf/v2/util/gconv"
"hotgo/internal/consts" "hotgo/internal/consts"
"hotgo/internal/dao" "hotgo/internal/dao"
@ -23,6 +22,7 @@ import (
"hotgo/internal/model/entity" "hotgo/internal/model/entity"
"hotgo/internal/model/input/sysin" "hotgo/internal/model/input/sysin"
"hotgo/internal/service" "hotgo/internal/service"
"hotgo/utility/simple"
) )
// MaskDemoField 演示环境下需要隐藏的配置 // MaskDemoField 演示环境下需要隐藏的配置
@ -217,12 +217,9 @@ func (s *sSysConfig) GetConfigByGroup(ctx context.Context, in sysin.GetConfigInp
return return
} }
var ( var models []*entity.SysConfig
models []*entity.SysConfig
isDemo = g.Cfg().MustGet(ctx, "hotgo.isDemo", false).Bool()
)
if err = dao.SysConfig.Ctx(ctx).Fields("key", "value", "type").Where("group", in.Group).Scan(&models); err != nil { if err = dao.SysConfig.Ctx(ctx).Fields("key", "value", "type").Where("group", in.Group).Scan(&models); err != nil {
err = gerror.Wrapf(err, "获取配置分组[ %v ]失败,请稍后重试!", in.Group)
return return
} }
@ -235,13 +232,10 @@ func (s *sSysConfig) GetConfigByGroup(ctx context.Context, in sysin.GetConfigInp
return nil, err return nil, err
} }
res.List[v.Key] = val res.List[v.Key] = val
if isDemo && gstr.InArray(MaskDemoField, v.Key) {
res.List[v.Key] = consts.DemoTips
res.List[v.Key] = consts.DemoTips
}
} }
} }
res.List = simple.FilterMaskDemo(ctx, res.List)
return return
} }

View File

@ -83,7 +83,6 @@ func (s *sSysCron) Edit(ctx context.Context, in sysin.CronEditInp) (err error) {
if _, err = dao.SysCron.Ctx(ctx).Where("id", in.Id).Data(in).Update(); err != nil { if _, err = dao.SysCron.Ctx(ctx).Where("id", in.Id).Data(in).Update(); err != nil {
return return
} }
simple.SafeGo(ctx, func(ctx context.Context) { simple.SafeGo(ctx, func(ctx context.Context) {
crons.RefreshStatus(&in.SysCron) crons.RefreshStatus(&in.SysCron)
}) })

View File

@ -14,7 +14,6 @@ import (
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
"hotgo/internal/model/input/sysin" "hotgo/internal/model/input/sysin"
"hotgo/internal/service" "hotgo/internal/service"
"hotgo/utility/validate"
) )
type sSysCronGroup struct{} type sSysCronGroup struct{}
@ -35,40 +34,27 @@ func (s *sSysCronGroup) Delete(ctx context.Context, in sysin.CronGroupDeleteInp)
// Edit 修改/新增 // Edit 修改/新增
func (s *sSysCronGroup) Edit(ctx context.Context, in sysin.CronGroupEditInp) (err error) { func (s *sSysCronGroup) Edit(ctx context.Context, in sysin.CronGroupEditInp) (err error) {
if in.Name == "" {
err = gerror.New("分组名称不能为空")
return
}
// 修改 // 修改
if in.Id > 0 { if in.Id > 0 {
_, err = dao.SysCronGroup.Ctx(ctx).Where("id", in.Id).Data(in).Update() if _, err = dao.SysCronGroup.Ctx(ctx).Fields(sysin.CronGroupUpdateFields{}).Where("id", in.Id).Data(in).Update(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
}
return return
} }
// 新增 // 新增
_, err = dao.SysCronGroup.Ctx(ctx).Data(in).Insert() if _, err = dao.SysCronGroup.Ctx(ctx).Fields(sysin.CronGroupInsertFields{}).Data(in).Insert(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
}
return return
} }
// Status 更新状态 // Status 更新状态
func (s *sSysCronGroup) Status(ctx context.Context, in sysin.CronGroupStatusInp) (err error) { func (s *sSysCronGroup) Status(ctx context.Context, in sysin.CronGroupStatusInp) (err error) {
if in.Id <= 0 { if _, err = dao.SysCronGroup.Ctx(ctx).Where("id", in.Id).Data("status", in.Status).Update(); err != nil {
err = gerror.New("ID不能为空") err = gerror.Wrap(err, consts.ErrorORM)
return
} }
if in.Status <= 0 {
err = gerror.New("状态不能为空")
return
}
if !validate.InSliceInt(consts.StatusSlice, in.Status) {
err = gerror.New("状态不正确")
return
}
_, err = dao.SysCronGroup.Ctx(ctx).Where("id", in.Id).Data("status", in.Status).Update()
return return
} }
@ -76,6 +62,7 @@ func (s *sSysCronGroup) Status(ctx context.Context, in sysin.CronGroupStatusInp)
func (s *sSysCronGroup) MaxSort(ctx context.Context, in sysin.CronGroupMaxSortInp) (res *sysin.CronGroupMaxSortModel, err error) { func (s *sSysCronGroup) MaxSort(ctx context.Context, in sysin.CronGroupMaxSortInp) (res *sysin.CronGroupMaxSortModel, err error) {
if in.Id > 0 { if in.Id > 0 {
if err = dao.SysCronGroup.Ctx(ctx).Where("id", in.Id).Order("sort desc").Scan(&res); err != nil { if err = dao.SysCronGroup.Ctx(ctx).Where("id", in.Id).Order("sort desc").Scan(&res); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return return
} }
} }
@ -90,7 +77,9 @@ func (s *sSysCronGroup) MaxSort(ctx context.Context, in sysin.CronGroupMaxSortIn
// View 获取指定信息 // View 获取指定信息
func (s *sSysCronGroup) View(ctx context.Context, in sysin.CronGroupViewInp) (res *sysin.CronGroupViewModel, err error) { func (s *sSysCronGroup) View(ctx context.Context, in sysin.CronGroupViewInp) (res *sysin.CronGroupViewModel, err error) {
err = dao.SysCronGroup.Ctx(ctx).Where("id", in.Id).Scan(&res) if err = dao.SysCronGroup.Ctx(ctx).Where("id", in.Id).Scan(&res); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
}
return return
} }
@ -108,6 +97,7 @@ func (s *sSysCronGroup) List(ctx context.Context, in sysin.CronGroupListInp) (li
totalCount, err = mod.Count() totalCount, err = mod.Count()
if err != nil { if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return return
} }
@ -115,7 +105,9 @@ func (s *sSysCronGroup) List(ctx context.Context, in sysin.CronGroupListInp) (li
return return
} }
err = mod.Page(in.Page, in.PerPage).Order("id desc").Scan(&list) if err = mod.Page(in.Page, in.PerPage).Order("id desc").Scan(&list); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
}
return return
} }

View File

@ -3,14 +3,12 @@
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
// @AutoGenerate Version 2.5.3 // @AutoGenerate Version 2.7.3
// @AutoGenerate Date 2023-04-28 15:28:40
package sys package sys
import ( import (
"context" "context"
"fmt" "fmt"
"hotgo/internal/consts"
"hotgo/internal/dao" "hotgo/internal/dao"
"hotgo/internal/library/contexts" "hotgo/internal/library/contexts"
"hotgo/internal/library/hgorm" "hotgo/internal/library/hgorm"
@ -70,12 +68,17 @@ func (s *sSysCurdDemo) List(ctx context.Context, in sysin.CurdDemoListInp) (list
// 关联表testCategory // 关联表testCategory
mod = mod.LeftJoin(hgorm.GenJoinOnRelation( mod = mod.LeftJoin(hgorm.GenJoinOnRelation(
dao.SysGenCurdDemo.Table(), dao.SysGenCurdDemo.Columns().CategoryId, // 主表表名,关联条件 dao.SysGenCurdDemo.Table(), dao.SysGenCurdDemo.Columns().CategoryId, // 主表表名,关联字段
dao.TestCategory.Table(), "testCategory", dao.TestCategory.Columns().Id, // 关联表表名,别名,关联条件 dao.TestCategory.Table(), "testCategory", dao.TestCategory.Columns().Id, // 关联表表名,别名,关联字段
)...) )...)
totalCount, err = mod.Clone().Count() totalCount, err = mod.Clone().Count()
if totalCount == 0 || err != nil { if err != nil {
err = gerror.Wrap(err, "获取生成演示数据行失败,请稍后重试!")
return
}
if totalCount == 0 {
return return
} }
@ -83,7 +86,11 @@ func (s *sSysCurdDemo) List(ctx context.Context, in sysin.CurdDemoListInp) (list
fields, err := hgorm.GenJoinSelect(ctx, sysin.CurdDemoListModel{}, dao.SysGenCurdDemo, []*hgorm.Join{ fields, err := hgorm.GenJoinSelect(ctx, sysin.CurdDemoListModel{}, dao.SysGenCurdDemo, []*hgorm.Join{
{Dao: dao.TestCategory, Alias: "testCategory"}, {Dao: dao.TestCategory, Alias: "testCategory"},
}) })
err = mod.Fields(fields).Page(in.Page, in.PerPage).OrderAsc(dao.SysGenCurdDemo.Columns().Sort).OrderDesc(dao.SysGenCurdDemo.Columns().Id).Scan(&list)
if err = mod.Fields(fields).Page(in.Page, in.PerPage).OrderAsc(dao.SysGenCurdDemo.Columns().Sort).OrderDesc(dao.SysGenCurdDemo.Columns().Id).Scan(&list); err != nil {
err = gerror.Wrap(err, "获取生成演示列表失败,请稍后重试!")
return
}
return return
} }
@ -116,41 +123,37 @@ func (s *sSysCurdDemo) Export(ctx context.Context, in sysin.CurdDemoListInp) (er
// Edit 修改/新增生成演示 // Edit 修改/新增生成演示
func (s *sSysCurdDemo) Edit(ctx context.Context, in sysin.CurdDemoEditInp) (err error) { func (s *sSysCurdDemo) Edit(ctx context.Context, in sysin.CurdDemoEditInp) (err error) {
// 修改 // 修改
if in.Id > 0 { if in.Id > 0 {
in.UpdatedBy = contexts.GetUserId(ctx) in.UpdatedBy = contexts.GetUserId(ctx)
_, err = s.Model(ctx). _, err = s.Model(ctx).
FieldsEx( Fields(sysin.CurdDemoUpdateFields{}).
dao.SysGenCurdDemo.Columns().Id, WherePri(in.Id).Data(in).Update()
dao.SysGenCurdDemo.Columns().CreatedBy,
dao.SysGenCurdDemo.Columns().CreatedAt,
dao.SysGenCurdDemo.Columns().DeletedAt,
).
Where(dao.SysGenCurdDemo.Columns().Id, in.Id).Data(in).Update()
return return
} }
// 新增 // 新增
in.CreatedBy = contexts.GetUserId(ctx) in.CreatedBy = contexts.GetUserId(ctx)
_, err = s.Model(ctx, &handler.Option{FilterAuth: false}). _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).
FieldsEx( Fields(sysin.CurdDemoInsertFields{}).
dao.SysGenCurdDemo.Columns().Id,
dao.SysGenCurdDemo.Columns().UpdatedBy,
dao.SysGenCurdDemo.Columns().DeletedAt,
).
Data(in).Insert() Data(in).Insert()
return return
} }
// Delete 删除生成演示 // Delete 删除生成演示
func (s *sSysCurdDemo) Delete(ctx context.Context, in sysin.CurdDemoDeleteInp) (err error) { func (s *sSysCurdDemo) Delete(ctx context.Context, in sysin.CurdDemoDeleteInp) (err error) {
_, err = s.Model(ctx).Where(dao.SysGenCurdDemo.Columns().Id, in.Id).Delete() if _, err = s.Model(ctx).WherePri(in.Id).Delete(); err != nil {
err = gerror.Wrap(err, "删除生成演示失败,请稍后重试!")
return
}
return return
} }
// MaxSort 获取生成演示最大排序 // MaxSort 获取生成演示最大排序
func (s *sSysCurdDemo) MaxSort(ctx context.Context, in sysin.CurdDemoMaxSortInp) (res *sysin.CurdDemoMaxSortModel, err error) { func (s *sSysCurdDemo) MaxSort(ctx context.Context, in sysin.CurdDemoMaxSortInp) (res *sysin.CurdDemoMaxSortModel, err error) {
if err = dao.SysGenCurdDemo.Ctx(ctx).Fields(dao.SysGenCurdDemo.Columns().Sort).OrderDesc(dao.SysGenCurdDemo.Columns().Sort).Scan(&res); err != nil { if err = dao.SysGenCurdDemo.Ctx(ctx).Fields(dao.SysGenCurdDemo.Columns().Sort).OrderDesc(dao.SysGenCurdDemo.Columns().Sort).Scan(&res); err != nil {
err = gerror.Wrap(err, "获取生成演示最大排序,请稍后重试!")
return return
} }
@ -164,31 +167,22 @@ func (s *sSysCurdDemo) MaxSort(ctx context.Context, in sysin.CurdDemoMaxSortInp)
// View 获取生成演示指定信息 // View 获取生成演示指定信息
func (s *sSysCurdDemo) View(ctx context.Context, in sysin.CurdDemoViewInp) (res *sysin.CurdDemoViewModel, err error) { func (s *sSysCurdDemo) View(ctx context.Context, in sysin.CurdDemoViewInp) (res *sysin.CurdDemoViewModel, err error) {
err = s.Model(ctx).Where(dao.SysGenCurdDemo.Columns().Id, in.Id).Scan(&res) if err = s.Model(ctx).WherePri(in.Id).Scan(&res); err != nil {
err = gerror.Wrap(err, "获取生成演示信息,请稍后重试!")
return
}
return return
} }
// Status 更新生成演示状态 // Status 更新生成演示状态
func (s *sSysCurdDemo) Status(ctx context.Context, in sysin.CurdDemoStatusInp) (err error) { func (s *sSysCurdDemo) Status(ctx context.Context, in sysin.CurdDemoStatusInp) (err error) {
if in.Id <= 0 { if _, err = s.Model(ctx).WherePri(in.Id).Data(g.Map{
err = gerror.New("ID不能为空")
return
}
if in.Status <= 0 {
err = gerror.New("状态不能为空")
return
}
if !validate.InSliceInt(consts.StatusSlice, in.Status) {
err = gerror.New("状态不正确")
return
}
_, err = s.Model(ctx).Where(dao.SysGenCurdDemo.Columns().Id, in.Id).Data(g.Map{
dao.SysGenCurdDemo.Columns().Status: in.Status, dao.SysGenCurdDemo.Columns().Status: in.Status,
dao.SysGenCurdDemo.Columns().UpdatedBy: contexts.GetUserId(ctx), dao.SysGenCurdDemo.Columns().UpdatedBy: contexts.GetUserId(ctx),
}).Update() }).Update(); err != nil {
err = gerror.Wrap(err, "更新生成演示状态失败,请稍后重试!")
return
}
return return
} }
@ -205,9 +199,12 @@ func (s *sSysCurdDemo) Switch(ctx context.Context, in sysin.CurdDemoSwitchInp) (
return return
} }
_, err = s.Model(ctx).Where(dao.SysGenCurdDemo.Columns().Id, in.Id).Data(g.Map{ if _, err = s.Model(ctx).WherePri(in.Id).Data(g.Map{
in.Key: in.Value, in.Key: in.Value,
dao.SysGenCurdDemo.Columns().UpdatedBy: contexts.GetUserId(ctx), dao.SysGenCurdDemo.Columns().UpdatedBy: contexts.GetUserId(ctx),
}).Update() }).Update(); err != nil {
err = gerror.Wrap(err, "更新生成演示开关失败,请稍后重试!")
return
}
return return
} }

View File

@ -3,13 +3,11 @@
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
package sys package sys
import ( import (
"context" "context"
"github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/os/gtime"
"hotgo/internal/consts" "hotgo/internal/consts"
"hotgo/internal/dao" "hotgo/internal/dao"
"hotgo/internal/model/input/sysin" "hotgo/internal/model/input/sysin"
@ -39,15 +37,9 @@ func (s *sSysDictData) Delete(ctx context.Context, in sysin.DictDataDeleteInp) e
// Edit 修改/新增 // Edit 修改/新增
func (s *sSysDictData) Edit(ctx context.Context, in sysin.DictDataEditInp) (err error) { func (s *sSysDictData) Edit(ctx context.Context, in sysin.DictDataEditInp) (err error) {
if in.Label == "" {
err = gerror.New("字典标签不能为空")
return err
}
// 修改 // 修改
in.UpdatedAt = gtime.Now()
if in.Id > 0 { if in.Id > 0 {
_, err = dao.SysDictData.Ctx(ctx).Where("id", in.Id).Data(in).Update() _, err = dao.SysDictData.Ctx(ctx).Fields(sysin.DictDataUpdateFields{}).WherePri(in.Id).Data(in).Update()
if err != nil { if err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, consts.ErrorORM)
return err return err
@ -57,12 +49,6 @@ func (s *sSysDictData) Edit(ctx context.Context, in sysin.DictDataEditInp) (err
} }
// 新增 // 新增
in.CreatedAt = gtime.Now()
if in.TypeID <= 0 {
err = gerror.New("字典类型不能为空")
return err
}
in.Type, err = dao.SysDictType.GetType(ctx, in.TypeID) in.Type, err = dao.SysDictType.GetType(ctx, in.TypeID)
if err != nil { if err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, consts.ErrorORM)
@ -73,7 +59,7 @@ func (s *sSysDictData) Edit(ctx context.Context, in sysin.DictDataEditInp) (err
return gerror.Wrap(err, "类型选择无效,请检查") return gerror.Wrap(err, "类型选择无效,请检查")
} }
_, err = dao.SysDictData.Ctx(ctx).Data(in).Insert() _, err = dao.SysDictData.Ctx(ctx).Fields(sysin.DictDataInsertFields{}).Data(in).Insert()
if err != nil { if err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, consts.ErrorORM)
return err return err

View File

@ -8,8 +8,10 @@ package sys
import ( import (
"context" "context"
"github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"hotgo/internal/consts" "hotgo/internal/consts"
"hotgo/internal/dao" "hotgo/internal/dao"
"hotgo/internal/library/hgorm"
"hotgo/internal/model/entity" "hotgo/internal/model/entity"
"hotgo/internal/model/input/sysin" "hotgo/internal/model/input/sysin"
"hotgo/internal/service" "hotgo/internal/service"
@ -80,29 +82,22 @@ func (s *sSysDictType) Delete(ctx context.Context, in sysin.DictTypeDeleteInp) (
// Edit 修改/新增 // Edit 修改/新增
func (s *sSysDictType) Edit(ctx context.Context, in sysin.DictTypeEditInp) (err error) { func (s *sSysDictType) Edit(ctx context.Context, in sysin.DictTypeEditInp) (err error) {
if in.Name == "" { if err = hgorm.IsUnique(ctx, dao.SysDictType, g.Map{dao.SysDictType.Columns().Name: in.Name}, "名称已存在", in.Id); err != nil {
err = gerror.New("名称不能为空")
return
}
uniqueName, err := dao.SysDictType.IsUniqueType(ctx, in.Id, in.Name)
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
if !uniqueName {
err = gerror.New("名称已存在")
return return
} }
// 修改 // 修改
if in.Id > 0 { if in.Id > 0 {
_, err = dao.SysDictType.Ctx(ctx).Where("id", in.Id).Data(in).Update() if _, err = dao.SysDictType.Ctx(ctx).Fields(sysin.DictTypeUpdateFields{}).WherePri(in.Id).Data(in).Update(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
}
return return
} }
// 新增 // 新增
_, err = dao.SysDictType.Ctx(ctx).Data(in).Insert() if _, err = dao.SysDictType.Ctx(ctx).Fields(sysin.DictTypeInsertFields{}).Data(in).Insert(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
}
return return
} }

View File

@ -10,7 +10,6 @@ import (
"github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gconv" "github.com/gogf/gf/v2/util/gconv"
"hotgo/internal/consts"
"hotgo/internal/dao" "hotgo/internal/dao"
"hotgo/internal/library/hgorm" "hotgo/internal/library/hgorm"
"hotgo/internal/model/entity" "hotgo/internal/model/entity"
@ -18,7 +17,6 @@ import (
"hotgo/internal/model/input/sysin" "hotgo/internal/model/input/sysin"
"hotgo/internal/service" "hotgo/internal/service"
"hotgo/utility/tree" "hotgo/utility/tree"
"hotgo/utility/validate"
) )
type sSysProvinces struct{} type sSysProvinces struct{}
@ -35,7 +33,7 @@ func init() {
func (s *sSysProvinces) Tree(ctx context.Context) (list []g.Map, err error) { func (s *sSysProvinces) Tree(ctx context.Context) (list []g.Map, err error) {
var models []*entity.SysProvinces var models []*entity.SysProvinces
if err = dao.SysProvinces.Ctx(ctx).Order("pid asc,id asc,sort asc").Scan(&models); err != nil { if err = dao.SysProvinces.Ctx(ctx).Order("pid asc,id asc,sort asc").Scan(&models); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取省市区关系树选项列表失败!")
return return
} }
@ -44,14 +42,14 @@ func (s *sSysProvinces) Tree(ctx context.Context) (list []g.Map, err error) {
list[k]["key"] = v["id"] list[k]["key"] = v["id"]
list[k]["label"] = v["title"] list[k]["label"] = v["title"]
} }
return tree.GenTree(list), nil return tree.GenTree(list), nil
} }
// Delete 删除 // Delete 删除省市区数据
func (s *sSysProvinces) Delete(ctx context.Context, in sysin.ProvincesDeleteInp) (err error) { func (s *sSysProvinces) Delete(ctx context.Context, in sysin.ProvincesDeleteInp) (err error) {
var models *entity.SysProvinces var models *entity.SysProvinces
if err = dao.SysProvinces.Ctx(ctx).Where("id", in.Id).Scan(&models); err != nil { if err = dao.SysProvinces.Ctx(ctx).Where("id", in.Id).Scan(&models); err != nil {
err = gerror.Wrap(err, "获取省市区数据失败!")
return return
} }
@ -60,84 +58,64 @@ func (s *sSysProvinces) Delete(ctx context.Context, in sysin.ProvincesDeleteInp)
return return
} }
pidExist, err := dao.SysProvinces.Ctx(ctx).Where("pid", models.Id).One() has, err := dao.SysProvinces.Ctx(ctx).Where("pid", models.Id).One()
if err != nil { if err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "删除省市区数据时获取上级数据失败!")
return return
} }
if !pidExist.IsEmpty() { if !has.IsEmpty() {
err = gerror.New("请先删除该地区下得所有子级!") err = gerror.New("请先删除该地区下得所有子级!")
return return
} }
_, err = dao.SysProvinces.Ctx(ctx).Where("id", in.Id).Delete() if _, err = dao.SysProvinces.Ctx(ctx).Where("id", in.Id).Delete(); err != nil {
err = gerror.Wrap(err, "删除省市区数据失败!")
return
}
return return
} }
// Edit 修改/新增 // Edit 修改/新增省市区数据
func (s *sSysProvinces) Edit(ctx context.Context, in sysin.ProvincesEditInp) (err error) { func (s *sSysProvinces) Edit(ctx context.Context, in sysin.ProvincesEditInp) (err error) {
if in.Title == "" {
err = gerror.New("标题不能为空")
return
}
if in.Id <= 0 {
err = gerror.New("地区Id必须大于0")
return
}
// 关系树 // 关系树
in.Pid, in.Level, in.Tree, err = hgorm.GenSubTree(ctx, dao.SysProvinces, in.Pid) in.Pid, in.Level, in.Tree, err = hgorm.GenSubTree(ctx, dao.SysProvinces, in.Pid)
if err != nil { if err != nil {
return return
} }
isUpdate := false
models, err := s.View(ctx, sysin.ProvincesViewInp{Id: in.Id}) models, err := s.View(ctx, sysin.ProvincesViewInp{Id: in.Id})
if err != nil { if err != nil {
return return
} }
if models != nil {
isUpdate = true
}
// 修改 // 修改
if isUpdate { if models != nil {
_, err = dao.SysProvinces.Ctx(ctx).Where("id", in.Id).Data(in).Update() if _, err = dao.SysProvinces.Ctx(ctx).Fields(sysin.ProvincesUpdateFields{}).WherePri(in.Id).Data(in).Update(); err != nil {
err = gerror.Wrap(err, "修改省市区数据失败!")
}
return return
} }
// 新增 // 新增
_, err = dao.SysProvinces.Ctx(ctx).Data(in).Insert() if _, err = dao.SysProvinces.Ctx(ctx).Fields(sysin.ProvincesInsertFields{}).Data(in).Insert(); err != nil {
err = gerror.Wrap(err, "新增省市区数据失败!")
}
return return
} }
// Status 更新部门状态 // Status 更新省市区状态
func (s *sSysProvinces) Status(ctx context.Context, in sysin.ProvincesStatusInp) (err error) { func (s *sSysProvinces) Status(ctx context.Context, in sysin.ProvincesStatusInp) (err error) {
if in.Id <= 0 { if _, err = dao.SysProvinces.Ctx(ctx).Where("id", in.Id).Data("status", in.Status).Update(); err != nil {
err = gerror.New("ID不能为空") err = gerror.Wrap(err, "更新省市区状态失败!")
return
} }
if in.Status <= 0 {
err = gerror.New("状态不能为空")
return
}
if !validate.InSliceInt(consts.StatusSlice, in.Status) {
err = gerror.New("状态不正确")
return
}
_, err = dao.SysProvinces.Ctx(ctx).Where("id", in.Id).Data("status", in.Status).Update()
return return
} }
// MaxSort 最大排序 // MaxSort 最大排序
func (s *sSysProvinces) MaxSort(ctx context.Context, in sysin.ProvincesMaxSortInp) (res *sysin.ProvincesMaxSortModel, err error) { func (s *sSysProvinces) MaxSort(ctx context.Context, in sysin.ProvincesMaxSortInp) (res *sysin.ProvincesMaxSortModel, err error) {
if err = dao.SysProvinces.Ctx(ctx).Fields(dao.SysProvinces.Columns().Sort).OrderDesc(dao.SysProvinces.Columns().Sort).Scan(&res); err != nil { if err = dao.SysProvinces.Ctx(ctx).Fields(dao.SysProvinces.Columns().Sort).OrderDesc(dao.SysProvinces.Columns().Sort).Scan(&res); err != nil {
err = gerror.Wrap(err, "获取省市区最大排序失败!")
return return
} }
@ -148,9 +126,11 @@ func (s *sSysProvinces) MaxSort(ctx context.Context, in sysin.ProvincesMaxSortIn
return return
} }
// View 获取指定字典类型信息 // View 获取省市区信息
func (s *sSysProvinces) View(ctx context.Context, in sysin.ProvincesViewInp) (res *sysin.ProvincesViewModel, err error) { func (s *sSysProvinces) View(ctx context.Context, in sysin.ProvincesViewInp) (res *sysin.ProvincesViewModel, err error) {
err = dao.SysProvinces.Ctx(ctx).Where("id", in.Id).Scan(&res) if err = dao.SysProvinces.Ctx(ctx).Where("id", in.Id).Scan(&res); err != nil {
err = gerror.Wrap(err, "获取省市区信息失败!")
}
return return
} }
@ -167,11 +147,18 @@ func (s *sSysProvinces) List(ctx context.Context, in sysin.ProvincesListInp) (li
} }
totalCount, err = mod.Count() totalCount, err = mod.Count()
if err != nil || totalCount == 0 { if err != nil {
err = gerror.Wrap(err, "获取省市区数据行失败!")
return return
} }
err = mod.Page(in.Page, in.PerPage).Order("id desc").Scan(&list) if totalCount == 0 {
return
}
if err = mod.Page(in.Page, in.PerPage).Order("id desc").Scan(&list); err != nil {
err = gerror.Wrap(err, "获取省市区列表失败!")
}
return return
} }
@ -192,11 +179,18 @@ func (s *sSysProvinces) ChildrenList(ctx context.Context, in sysin.ProvincesChil
} }
totalCount, err = mod.Count() totalCount, err = mod.Count()
if err != nil || totalCount == 0 { if err != nil {
err = gerror.Wrap(err, "获取省市区下级数据行失败!")
return return
} }
err = mod.Page(in.Page, in.PerPage).Order("sort asc,id desc").Scan(&list) if totalCount == 0 {
return
}
if err = mod.Page(in.Page, in.PerPage).Order("sort asc,id desc").Scan(&list); err != nil {
err = gerror.Wrap(err, "获取省市区下级列表失败!")
}
return return
} }
@ -212,7 +206,6 @@ func (s *sSysProvinces) UniqueId(ctx context.Context, in sysin.ProvincesUniqueId
res.IsUnique = false res.IsUnique = false
return return
} }
return return
} }
@ -224,7 +217,7 @@ func (s *sSysProvinces) Select(ctx context.Context, in sysin.ProvincesSelectInp)
Where("pid", in.Value) Where("pid", in.Value)
if err = mod.Order("sort asc,id asc").Scan(&res.List); err != nil { if err = mod.Order("sort asc,id asc").Scan(&res.List); err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, "获取省市区选项失败!")
return return
} }
@ -243,6 +236,5 @@ func (s *sSysProvinces) Select(ctx context.Context, in sysin.ProvincesSelectInp)
continue continue
} }
} }
return return
} }

View File

@ -6,20 +6,14 @@
package adminin package adminin
import ( import (
"context"
"github.com/gogf/gf/v2/errors/gerror"
"hotgo/internal/consts"
"hotgo/internal/model/entity" "hotgo/internal/model/entity"
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
"hotgo/utility/validate"
) )
// DeptNameUniqueInp 名称是否唯一
type DeptNameUniqueInp struct {
Name string
Id int64
}
type DeptNameUniqueModel struct {
IsUnique bool
}
// DeptMaxSortInp 最大排序 // DeptMaxSortInp 最大排序
type DeptMaxSortInp struct { type DeptMaxSortInp struct {
Id int64 Id int64
@ -29,13 +23,59 @@ type DeptMaxSortModel struct {
Sort int Sort int
} }
// DeptEditInp 修改/新增字典数据 // DeptEditInp 修改/新增部门数据
type DeptEditInp struct { type DeptEditInp struct {
entity.AdminDept entity.AdminDept
} }
func (in *DeptEditInp) Filter(ctx context.Context) (err error) {
if in.Name == "" {
err = gerror.New("名称不能为空")
return
}
if in.Id > 0 && in.Id == in.Pid {
err = gerror.New("上级部门不能是自己")
return
}
return
}
type DeptEditModel struct{} type DeptEditModel struct{}
// DeptDeleteInp 删除字典类型 // DeptUpdateFields 修改数据字段过滤
type DeptUpdateFields struct {
Id int64 `json:"id" description:"部门ID"`
Pid int64 `json:"pid" description:"父部门ID"`
Name string `json:"name" description:"部门名称"`
Code string `json:"code" description:"部门编码"`
Type string `json:"type" description:"部门类型"`
Leader string `json:"leader" description:"负责人"`
Phone string `json:"phone" description:"联系电话"`
Email string `json:"email" description:"邮箱"`
Level int `json:"level" description:"关系树等级"`
Tree string `json:"tree" description:"关系树"`
Sort int `json:"sort" description:"排序"`
Status int `json:"status" description:"部门状态"`
}
// DeptInsertFields 新增数据字段过滤
type DeptInsertFields struct {
Pid int64 `json:"pid" description:"父部门ID"`
Name string `json:"name" description:"部门名称"`
Code string `json:"code" description:"部门编码"`
Type string `json:"type" description:"部门类型"`
Leader string `json:"leader" description:"负责人"`
Phone string `json:"phone" description:"联系电话"`
Email string `json:"email" description:"邮箱"`
Level int `json:"level" description:"关系树等级"`
Tree string `json:"tree" description:"关系树"`
Sort int `json:"sort" description:"排序"`
Status int `json:"status" description:"部门状态"`
}
// DeptDeleteInp 删除部门类型
type DeptDeleteInp struct { type DeptDeleteInp struct {
Id interface{} Id interface{}
} }
@ -72,6 +112,26 @@ type DeptListModel struct {
type DeptStatusInp struct { type DeptStatusInp struct {
entity.AdminDept entity.AdminDept
} }
func (in *DeptStatusInp) Filter(ctx context.Context) (err error) {
if in.Id <= 0 {
err = gerror.New("ID不能为空")
return
}
if in.Status <= 0 {
err = gerror.New("状态不能为空")
return
}
if !validate.InSliceInt(consts.StatusSlice, in.Status) {
err = gerror.New("状态不正确")
return
}
return
}
type DeptStatusModel struct{} type DeptStatusModel struct{}
type DeptOptionInp struct { type DeptOptionInp struct {

View File

@ -15,6 +15,7 @@ import (
"hotgo/internal/library/contexts" "hotgo/internal/library/contexts"
"hotgo/internal/model/entity" "hotgo/internal/model/entity"
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
"hotgo/utility/validate"
) )
// MemberUpdateCashInp 更新会员提现信息 // MemberUpdateCashInp 更新会员提现信息
@ -110,11 +111,11 @@ type LoginMemberInfoModel struct {
// MemberEditInp 修改/新增管理员 // MemberEditInp 修改/新增管理员
type MemberEditInp struct { type MemberEditInp struct {
Id int64 `json:"id" dc:""` Id int64 `json:"id" dc:"管理员ID"`
RoleId int64 `json:"roleId" v:"required#角色不能为空" dc:"角色ID"` RoleId int64 `json:"roleId" v:"required#角色不能为空" dc:"角色ID"`
PostIds []int64 `json:"postIds" v:"required#岗位不能为空" dc:"岗位ID"` PostIds []int64 `json:"postIds" v:"required#岗位不能为空" dc:"岗位ID"`
DeptId int64 `json:"deptId" v:"required#部门不能为空" dc:"部门ID"` DeptId int64 `json:"deptId" v:"required#部门不能为空" dc:"部门ID"`
Username string `json:"username" v:"required#账号不能为空" dc:"帐号"` Username string `json:"username" v:"required#账号不能为空" dc:"帐号"`
PasswordHash string `json:"passwordHash" dc:"密码hash"` PasswordHash string `json:"passwordHash" dc:"密码hash"`
Password string `json:"password" dc:"密码"` Password string `json:"password" dc:"密码"`
RealName string `json:"realName" dc:"真实姓名"` RealName string `json:"realName" dc:"真实姓名"`
@ -130,8 +131,6 @@ type MemberEditInp struct {
Mobile string `json:"mobile" dc:"手机号码"` Mobile string `json:"mobile" dc:"手机号码"`
Remark string `json:"remark" dc:"备注"` Remark string `json:"remark" dc:"备注"`
Status int `json:"status" dc:"状态"` Status int `json:"status" dc:"状态"`
CreatedAt *gtime.Time `json:"createdAt" dc:"创建时间"`
UpdatedAt *gtime.Time `json:"updatedAt" dc:"修改时间"`
} }
type MemberAddInp struct { type MemberAddInp struct {
@ -214,6 +213,25 @@ type MemberCash struct {
type MemberStatusInp struct { type MemberStatusInp struct {
entity.AdminMember entity.AdminMember
} }
func (in *MemberStatusInp) Filter(ctx context.Context) (err error) {
if in.Id <= 0 {
err = gerror.New("ID不能为空")
return
}
if in.Status <= 0 {
err = gerror.New("状态不能为空")
return
}
if !validate.InSliceInt(consts.StatusSlice, in.Status) {
err = gerror.New("状态不正确")
return
}
return
}
type MemberStatusModel struct{} type MemberStatusModel struct{}
// MemberSelectInp 获取可选的后台用户选项 // MemberSelectInp 获取可选的后台用户选项

View File

@ -3,16 +3,99 @@
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
package adminin package adminin
import ( import (
"context"
"github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/errors/gerror"
"hotgo/internal/model" "hotgo/internal/model"
"hotgo/internal/model/entity" "hotgo/internal/model/entity"
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
"sort"
) )
// GetPermissionsInp 获取指定角色的菜单权限
type GetPermissionsInp struct {
RoleId int64 `json:"id"`
}
type GetPermissionsModel struct {
MenuIds []int64 `json:"menuIds"`
}
// UpdatePermissionsInp 更新指定角色的菜单权限
type UpdatePermissionsInp struct {
RoleId int64 `json:"id"`
MenuIds []int64 `json:"menuIds"`
}
// RoleDeleteInp 删除角色
type RoleDeleteInp struct {
Id int64 `json:"id" v:"required"`
}
func (in *RoleDeleteInp) Filter(ctx context.Context) (err error) {
if in.Id <= 0 {
err = gerror.New("ID不能为空")
return
}
return
}
// RoleEditInp 获取列表
type RoleEditInp struct {
entity.AdminRole
}
func (in *RoleEditInp) Filter(ctx context.Context) (err error) {
if in.Name == "" {
err = gerror.New("名称不能为空")
return
}
if in.Key == "" {
err = gerror.New("编码不能为空")
return
}
if in.Id > 0 && in.Id == in.Pid {
err = gerror.New("上级角色不能是自己")
return
}
return
}
// RoleUpdateFields 修改数据字段过滤
type RoleUpdateFields struct {
Id int64 `json:"id" description:"角色ID"`
Name string `json:"name" description:"角色名称"`
Key string `json:"key" description:"角色权限字符串"`
DataScope int `json:"dataScope" description:"数据范围"`
CustomDept *gjson.Json `json:"customDept" description:"自定义部门权限"`
Pid int64 `json:"pid" description:"上级角色ID"`
Level int `json:"level" description:"关系树等级"`
Tree string `json:"tree" description:"关系树"`
Remark string `json:"remark" description:"备注"`
Sort int `json:"sort" description:"排序"`
Status int `json:"status" description:"角色状态"`
}
// RoleInsertFields 新增数据字段过滤
type RoleInsertFields struct {
Name string `json:"name" description:"角色名称"`
Key string `json:"key" description:"角色权限字符串"`
DataScope int `json:"dataScope" description:"数据范围"`
CustomDept *gjson.Json `json:"customDept" description:"自定义部门权限"`
Pid int64 `json:"pid" description:"上级角色ID"`
Level int `json:"level" description:"关系树等级"`
Tree string `json:"tree" description:"关系树"`
Remark string `json:"remark" description:"备注"`
Sort int `json:"sort" description:"排序"`
Status int `json:"status" description:"角色状态"`
}
// RoleListInp 获取列表 // RoleListInp 获取列表
type RoleListInp struct { type RoleListInp struct {
form.PageReq form.PageReq
@ -29,18 +112,6 @@ type RoleListModel struct {
List []*RoleTree `json:"list"` List []*RoleTree `json:"list"`
} }
func Sort(v []*RoleTree) {
sort.SliceStable(v, func(i, j int) bool {
if v[i].Sort < v[j].Sort {
return true
}
if v[i].Sort > v[j].Sort {
return false
}
return v[i].Id < v[j].Id
})
}
// RoleMemberListInp 查询列表 // RoleMemberListInp 查询列表
type RoleMemberListInp struct { type RoleMemberListInp struct {
form.PageReq form.PageReq
@ -68,8 +139,16 @@ type MenuRoleListModel struct {
CheckedKeys []int64 `json:"checkedKeys" dc:"选择的菜单ID"` CheckedKeys []int64 `json:"checkedKeys" dc:"选择的菜单ID"`
} }
// DataScopeEditInp 获取数据权限选项
type DataScopeEditInp struct { type DataScopeEditInp struct {
Id int64 `json:"id" v:"required" dc:"角色ID"` Id int64 `json:"id" v:"required" dc:"角色ID"`
DataScope int `json:"dataScope" v:"required" dc:"数据范围"` DataScope int `json:"dataScope" v:"required" dc:"数据范围"`
CustomDept []int64 `json:"customDept" dc:"自定义部门权限"` CustomDept []int64 `json:"customDept" dc:"自定义部门权限"`
} }
func (in *DataScopeEditInp) Filter(ctx context.Context) (err error) {
if in.Id <= 0 {
return gerror.New("角色ID不正确")
}
return
}

View File

@ -3,12 +3,15 @@
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
package sysin package sysin
import ( import (
"context"
"github.com/gogf/gf/v2/errors/gerror"
"hotgo/internal/consts"
"hotgo/internal/model/entity" "hotgo/internal/model/entity"
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
"hotgo/utility/validate"
) )
// CronGroupMaxSortInp 最大排序 // CronGroupMaxSortInp 最大排序
@ -24,8 +27,44 @@ type CronGroupMaxSortModel struct {
type CronGroupEditInp struct { type CronGroupEditInp struct {
entity.SysCronGroup entity.SysCronGroup
} }
func (in *CronGroupEditInp) Filter(ctx context.Context) (err error) {
if in.Name == "" {
err = gerror.New("名称不能为空")
return
}
if in.Id > 0 && in.Id == in.Pid {
err = gerror.New("上级分组不能是自己")
return
}
return
}
type CronGroupEditModel struct{} type CronGroupEditModel struct{}
// CronGroupUpdateFields 修改数据字段过滤
type CronGroupUpdateFields struct {
Id int64 `json:"id" description:"任务分组ID"`
Pid int64 `json:"pid" description:"父类字典类型ID"`
Name string `json:"name" description:"字典类型名称"`
Type string `json:"type" description:"字典类型"`
Sort int `json:"sort" description:"排序"`
Remark string `json:"remark" description:"备注"`
Status int `json:"status" description:"字典类型状态"`
}
// CronGroupInsertFields 新增数据字段过滤
type CronGroupInsertFields struct {
Pid int64 `json:"pid" description:"父类任务分组ID"`
Name string `json:"name" description:"分组名称"`
IsDefault int `json:"isDefault" description:"是否默认"`
Sort int `json:"sort" description:"排序"`
Remark string `json:"remark" description:"备注"`
Status int `json:"status" description:"分组状态"`
}
// CronGroupDeleteInp 删除字典类型 // CronGroupDeleteInp 删除字典类型
type CronGroupDeleteInp struct { type CronGroupDeleteInp struct {
Id interface{} Id interface{}
@ -57,6 +96,26 @@ type CronGroupListModel struct {
type CronGroupStatusInp struct { type CronGroupStatusInp struct {
entity.SysCronGroup entity.SysCronGroup
} }
func (in *CronGroupStatusInp) Filter(ctx context.Context) (err error) {
if in.Id <= 0 {
err = gerror.New("ID不能为空")
return
}
if in.Status <= 0 {
err = gerror.New("状态不能为空")
return
}
if !validate.InSliceInt(consts.StatusSlice, in.Status) {
err = gerror.New("状态不正确")
return
}
return
}
type CronGroupStatusModel struct{} type CronGroupStatusModel struct{}
// CronGroupSelectInp 选项 // CronGroupSelectInp 选项

View File

@ -3,24 +3,82 @@
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
// @AutoGenerate Version 2.5.3 // @AutoGenerate Version 2.7.3
// @AutoGenerate Date 2023-04-28 15:28:40
package sysin package sysin
import ( import (
"context" "context"
"hotgo/internal/consts"
"hotgo/internal/model/entity" "hotgo/internal/model/entity"
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
"hotgo/utility/validate"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/os/gtime"
) )
// CurdDemoUpdateFields 修改生成演示字段过滤
type CurdDemoUpdateFields struct {
CategoryId int64 `json:"categoryId" dc:"分类ID"`
Title string `json:"title" dc:"标题"`
Description string `json:"description" dc:"描述"`
Content string `json:"content" dc:"内容"`
Image string `json:"image" dc:"单图"`
Attachfile string `json:"attachfile" dc:"附件"`
CityId int64 `json:"cityId" dc:"所在城市"`
Switch int `json:"switch" dc:"显示开关"`
Sort int `json:"sort" dc:"排序"`
Status int `json:"status" dc:"状态"`
UpdatedBy int64 `json:"updatedBy" dc:"更新者"`
}
// CurdDemoInsertFields 新增生成演示字段过滤
type CurdDemoInsertFields struct {
CategoryId int64 `json:"categoryId" dc:"分类ID"`
Title string `json:"title" dc:"标题"`
Description string `json:"description" dc:"描述"`
Content string `json:"content" dc:"内容"`
Image string `json:"image" dc:"单图"`
Attachfile string `json:"attachfile" dc:"附件"`
CityId int64 `json:"cityId" dc:"所在城市"`
Switch int `json:"switch" dc:"显示开关"`
Sort int `json:"sort" dc:"排序"`
Status int `json:"status" dc:"状态"`
CreatedBy int64 `json:"createdBy" dc:"创建者"`
}
// CurdDemoEditInp 修改/新增生成演示 // CurdDemoEditInp 修改/新增生成演示
type CurdDemoEditInp struct { type CurdDemoEditInp struct {
entity.SysGenCurdDemo entity.SysGenCurdDemo
} }
func (in *CurdDemoEditInp) Filter(ctx context.Context) (err error) { func (in *CurdDemoEditInp) Filter(ctx context.Context) (err error) {
// 验证分类ID
if err := g.Validator().Rules("required").Data(in.CategoryId).Messages("分类ID不能为空").Run(ctx); err != nil {
return err.Current()
}
// 验证标题
if err := g.Validator().Rules("required").Data(in.Title).Messages("标题不能为空").Run(ctx); err != nil {
return err.Current()
}
// 验证描述
if err := g.Validator().Rules("required").Data(in.Description).Messages("描述不能为空").Run(ctx); err != nil {
return err.Current()
}
// 验证内容
if err := g.Validator().Rules("required").Data(in.Content).Messages("内容不能为空").Run(ctx); err != nil {
return err.Current()
}
// 验证排序
if err := g.Validator().Rules("required").Data(in.Sort).Messages("排序不能为空").Run(ctx); err != nil {
return err.Current()
}
return return
} }
@ -70,9 +128,12 @@ type CurdDemoListModel struct {
Description string `json:"description" dc:"描述"` Description string `json:"description" dc:"描述"`
Image string `json:"image" dc:"单图"` Image string `json:"image" dc:"单图"`
Attachfile string `json:"attachfile" dc:"附件"` Attachfile string `json:"attachfile" dc:"附件"`
CityId int64 `json:"cityId" dc:"所在城市"`
Switch int `json:"switch" dc:"显示开关"` Switch int `json:"switch" dc:"显示开关"`
Sort int `json:"sort" dc:"排序"` Sort int `json:"sort" dc:"排序"`
Status int `json:"status" dc:"状态"` Status int `json:"status" dc:"状态"`
CreatedBy int64 `json:"createdBy" dc:"创建者"`
UpdatedBy int64 `json:"updatedBy" dc:"更新者"`
CreatedAt *gtime.Time `json:"createdAt" dc:"创建时间"` CreatedAt *gtime.Time `json:"createdAt" dc:"创建时间"`
UpdatedAt *gtime.Time `json:"updatedAt" dc:"修改时间"` UpdatedAt *gtime.Time `json:"updatedAt" dc:"修改时间"`
TestCategoryName string `json:"testCategoryName" dc:"分类名称"` TestCategoryName string `json:"testCategoryName" dc:"分类名称"`
@ -86,6 +147,7 @@ type CurdDemoExportModel struct {
Description string `json:"description" dc:"描述"` Description string `json:"description" dc:"描述"`
Image string `json:"image" dc:"单图"` Image string `json:"image" dc:"单图"`
Attachfile string `json:"attachfile" dc:"附件"` Attachfile string `json:"attachfile" dc:"附件"`
CityId int64 `json:"cityId" dc:"所在城市"`
Switch int `json:"switch" dc:"显示开关"` Switch int `json:"switch" dc:"显示开关"`
Sort int `json:"sort" dc:"排序"` Sort int `json:"sort" dc:"排序"`
Status int `json:"status" dc:"状态"` Status int `json:"status" dc:"状态"`
@ -114,6 +176,20 @@ type CurdDemoStatusInp struct {
} }
func (in *CurdDemoStatusInp) Filter(ctx context.Context) (err error) { func (in *CurdDemoStatusInp) Filter(ctx context.Context) (err error) {
if in.Id <= 0 {
err = gerror.New("ID不能为空")
return
}
if in.Status <= 0 {
err = gerror.New("状态不能为空")
return
}
if !validate.InSliceInt(consts.StatusSlice, in.Status) {
err = gerror.New("状态不正确")
return
}
return return
} }

View File

@ -3,10 +3,11 @@
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
package sysin package sysin
import ( import (
"context"
"github.com/gogf/gf/v2/errors/gerror"
"hotgo/internal/model/entity" "hotgo/internal/model/entity"
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
) )
@ -16,8 +17,50 @@ type DictDataEditInp struct {
entity.SysDictData entity.SysDictData
TypeID int64 TypeID int64
} }
func (in *DictDataEditInp) Filter(ctx context.Context) (err error) {
if in.Label == "" {
err = gerror.New("字典标签不能为空")
return
}
if in.Id > 0 && in.TypeID <= 0 {
err = gerror.New("字典类型不能为空")
return
}
return
}
type DictDataEditModel struct{} type DictDataEditModel struct{}
// DictDataUpdateFields 修改数据字段过滤
type DictDataUpdateFields struct {
Id int64 `json:"id" description:"字典数据ID"`
Label string `json:"label" description:"字典标签"`
Value string `json:"value" description:"字典键值"`
ValueType string `json:"valueType" description:"键值数据类型string,int,uint,bool,datetime,date"`
Type string `json:"type" description:"字典类型"`
ListClass string `json:"listClass" description:"表格回显样式"`
IsDefault int `json:"isDefault" description:"是否为系统默认"`
Sort int `json:"sort" description:"字典排序"`
Remark string `json:"remark" description:"备注"`
Status int `json:"status" description:"状态"`
}
// DictDataInsertFields 新增数据字段过滤
type DictDataInsertFields struct {
Label string `json:"label" description:"字典标签"`
Value string `json:"value" description:"字典键值"`
ValueType string `json:"valueType" description:"键值数据类型string,int,uint,bool,datetime,date"`
Type string `json:"type" description:"字典类型"`
ListClass string `json:"listClass" description:"表格回显样式"`
IsDefault int `json:"isDefault" description:"是否为系统默认"`
Sort int `json:"sort" description:"字典排序"`
Remark string `json:"remark" description:"备注"`
Status int `json:"status" description:"状态"`
}
// DictDataDeleteInp 删除字典数据 // DictDataDeleteInp 删除字典数据
type DictDataDeleteInp struct { type DictDataDeleteInp struct {
Id interface{} Id interface{}

View File

@ -3,10 +3,11 @@
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
package sysin package sysin
import ( import (
"context"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/frame/g"
"hotgo/internal/model/entity" "hotgo/internal/model/entity"
) )
@ -15,8 +16,44 @@ import (
type DictTypeEditInp struct { type DictTypeEditInp struct {
entity.SysDictType entity.SysDictType
} }
func (in *DictTypeEditInp) Filter(ctx context.Context) (err error) {
if in.Name == "" {
err = gerror.New("名称不能为空")
return
}
if in.Id > 0 && in.Id == in.Pid {
err = gerror.New("上级字典不能是自己")
return
}
return
}
type DictTypeEditModel struct{} type DictTypeEditModel struct{}
// DictTypeUpdateFields 修改数据字段过滤
type DictTypeUpdateFields struct {
Id int64 `json:"id" description:"字典类型ID"`
Pid int64 `json:"pid" description:"父类字典类型ID"`
Name string `json:"name" description:"字典类型名称"`
Type string `json:"type" description:"字典类型"`
Sort int `json:"sort" description:"排序"`
Remark string `json:"remark" description:"备注"`
Status int `json:"status" description:"字典类型状态"`
}
// DictTypeInsertFields 新增数据字段过滤
type DictTypeInsertFields struct {
Pid int64 `json:"pid" description:"父类字典类型ID"`
Name string `json:"name" description:"字典类型名称"`
Type string `json:"type" description:"字典类型"`
Sort int `json:"sort" description:"排序"`
Remark string `json:"remark" description:"备注"`
Status int `json:"status" description:"字典类型状态"`
}
// DictTypeDeleteInp 删除字典类型 // DictTypeDeleteInp 删除字典类型
type DictTypeDeleteInp struct { type DictTypeDeleteInp struct {
Id interface{} Id interface{}

View File

@ -3,12 +3,15 @@
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
//
package sysin package sysin
import ( import (
"context"
"github.com/gogf/gf/v2/errors/gerror"
"hotgo/internal/consts"
"hotgo/internal/model/entity" "hotgo/internal/model/entity"
"hotgo/internal/model/input/form" "hotgo/internal/model/input/form"
"hotgo/utility/validate"
) )
// ProvincesMaxSortInp 最大排序 // ProvincesMaxSortInp 最大排序
@ -23,8 +26,50 @@ type ProvincesMaxSortModel struct {
type ProvincesEditInp struct { type ProvincesEditInp struct {
entity.SysProvinces entity.SysProvinces
} }
func (in *ProvincesEditInp) Filter(ctx context.Context) (err error) {
if in.Title == "" {
err = gerror.New("标题不能为空")
return
}
if in.Id <= 0 {
err = gerror.New("地区Id必须大于0")
return
}
return
}
type ProvincesEditModel struct{} type ProvincesEditModel struct{}
// ProvincesUpdateFields 修改数据字段过滤
type ProvincesUpdateFields struct {
Id int64 `json:"id" description:"省市区ID"`
Title string `json:"title" description:"栏目名称"`
Pinyin string `json:"pinyin" description:"拼音"`
Lng string `json:"lng" description:"经度"`
Lat string `json:"lat" description:"纬度"`
Pid int64 `json:"pid" description:"父栏目"`
Level int `json:"level" description:"关系树等级"`
Tree string `json:"tree" description:"关系"`
Sort int `json:"sort" description:"排序"`
Status int `json:"status" description:"状态"`
}
// ProvincesInsertFields 新增数据字段过滤
type ProvincesInsertFields struct {
Title string `json:"title" description:"栏目名称"`
Pinyin string `json:"pinyin" description:"拼音"`
Lng string `json:"lng" description:"经度"`
Lat string `json:"lat" description:"纬度"`
Pid int64 `json:"pid" description:"父栏目"`
Level int `json:"level" description:"关系树等级"`
Tree string `json:"tree" description:"关系"`
Sort int `json:"sort" description:"排序"`
Status int `json:"status" description:"状态"`
}
// ProvincesDeleteInp 删除字典类型 // ProvincesDeleteInp 删除字典类型
type ProvincesDeleteInp struct { type ProvincesDeleteInp struct {
Id interface{} `json:"id" v:"required#省市区ID不能为空" dc:"省市区ID"` Id interface{} `json:"id" v:"required#省市区ID不能为空" dc:"省市区ID"`
@ -57,6 +102,25 @@ type ProvincesListModel struct {
type ProvincesStatusInp struct { type ProvincesStatusInp struct {
entity.SysProvinces entity.SysProvinces
} }
func (in *ProvincesStatusInp) Filter(ctx context.Context) (err error) {
if in.Id <= 0 {
err = gerror.New("ID不能为空")
return
}
if in.Status <= 0 {
err = gerror.New("状态不能为空")
return
}
if !validate.InSliceInt(consts.StatusSlice, in.Status) {
err = gerror.New("状态不正确")
return
}
return
}
type ProvincesStatusModel struct{} type ProvincesStatusModel struct{}
// ProvincesChildrenListInp 获取省市区下级列表 // ProvincesChildrenListInp 获取省市区下级列表

View File

@ -3,8 +3,7 @@
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
// @AutoGenerate Version 2.5.3 // @AutoGenerate Version 2.7.3
// @AutoGenerate Date 2023-04-28 15:28:40
package genrouter package genrouter
import "hotgo/internal/controller/admin/sys" import "hotgo/internal/controller/admin/sys"

View File

@ -19,11 +19,49 @@ import (
) )
type ( type (
IAdminCash interface { IAdminCreditsLog interface {
View(ctx context.Context, in adminin.CashViewInp) (res *adminin.CashViewModel, err error) Model(ctx context.Context, option ...*handler.Option) *gdb.Model
List(ctx context.Context, in adminin.CashListInp) (list []*adminin.CashListModel, totalCount int, err error) SaveBalance(ctx context.Context, in adminin.CreditsLogSaveBalanceInp) (res *adminin.CreditsLogSaveBalanceModel, err error)
Apply(ctx context.Context, in adminin.CashApplyInp) (err error) SaveIntegral(ctx context.Context, in adminin.CreditsLogSaveIntegralInp) (res *adminin.CreditsLogSaveIntegralModel, err error)
Payment(ctx context.Context, in adminin.CashPaymentInp) (err error) List(ctx context.Context, in adminin.CreditsLogListInp) (list []*adminin.CreditsLogListModel, totalCount int, err error)
Export(ctx context.Context, in adminin.CreditsLogListInp) (err error)
}
IAdminDept interface {
Delete(ctx context.Context, in adminin.DeptDeleteInp) (err error)
Edit(ctx context.Context, in adminin.DeptEditInp) (err error)
Status(ctx context.Context, in adminin.DeptStatusInp) (err error)
MaxSort(ctx context.Context, in adminin.DeptMaxSortInp) (res *adminin.DeptMaxSortModel, err error)
View(ctx context.Context, in adminin.DeptViewInp) (res *adminin.DeptViewModel, err error)
Option(ctx context.Context, in adminin.DeptOptionInp) (res *adminin.DeptOptionModel, totalCount int, err error)
List(ctx context.Context, in adminin.DeptListInp) (res *adminin.DeptListModel, err error)
GetName(ctx context.Context, id int64) (name string, err error)
}
IAdminMember interface {
AddBalance(ctx context.Context, in adminin.MemberAddBalanceInp) (err error)
AddIntegral(ctx context.Context, in adminin.MemberAddIntegralInp) (err error)
UpdateCash(ctx context.Context, in adminin.MemberUpdateCashInp) (err error)
UpdateEmail(ctx context.Context, in adminin.MemberUpdateEmailInp) (err error)
UpdateMobile(ctx context.Context, in adminin.MemberUpdateMobileInp) (err error)
UpdateProfile(ctx context.Context, in adminin.MemberUpdateProfileInp) (err error)
UpdatePwd(ctx context.Context, in adminin.MemberUpdatePwdInp) (err error)
ResetPwd(ctx context.Context, in adminin.MemberResetPwdInp) (err error)
VerifyUnique(ctx context.Context, in adminin.VerifyUniqueInp) (err error)
Delete(ctx context.Context, in adminin.MemberDeleteInp) (err error)
Edit(ctx context.Context, in adminin.MemberEditInp) (err error)
View(ctx context.Context, in adminin.MemberViewInp) (res *adminin.MemberViewModel, err error)
List(ctx context.Context, in adminin.MemberListInp) (list []*adminin.MemberListModel, totalCount int, err error)
Status(ctx context.Context, in adminin.MemberStatusInp) (err error)
GenTree(ctx context.Context, pid int64) (level int, newTree string, err error)
LoginMemberInfo(ctx context.Context) (res *adminin.LoginMemberInfoModel, err error)
MemberLoginStat(ctx context.Context, in adminin.MemberLoginStatInp) (res *adminin.MemberLoginStatModel, err error)
GetIdByCode(ctx context.Context, in adminin.GetIdByCodeInp) (res *adminin.GetIdByCodeModel, err error)
Select(ctx context.Context, in adminin.MemberSelectInp) (res []*adminin.MemberSelectModel, err error)
VerifySuperId(ctx context.Context, verifyId int64) bool
FilterAuthModel(ctx context.Context, memberId int64) *gdb.Model
}
IAdminMemberPost interface {
UpdatePostIds(ctx context.Context, memberId int64, postIds []int64) (err error)
GetMemberByIds(ctx context.Context, memberId int64) (postIds []int64, err error)
} }
IAdminMenu interface { IAdminMenu interface {
MaxSort(ctx context.Context, req *menu.MaxSortReq) (res *menu.MaxSortRes, err error) MaxSort(ctx context.Context, req *menu.MaxSortReq) (res *menu.MaxSortRes, err error)
@ -33,13 +71,9 @@ type (
Edit(ctx context.Context, req *menu.EditReq) (err error) Edit(ctx context.Context, req *menu.EditReq) (err error)
View(ctx context.Context, req *menu.ViewReq) (res *menu.ViewRes, err error) View(ctx context.Context, req *menu.ViewReq) (res *menu.ViewRes, err error)
List(ctx context.Context, req *menu.ListReq) (lists []map[string]interface{}, err error) List(ctx context.Context, req *menu.ListReq) (lists []map[string]interface{}, err error)
GetMenuList(ctx context.Context, memberId int64) (lists role.DynamicRes, err error) GetMenuList(ctx context.Context, memberId int64) (res *role.DynamicRes, err error)
LoginPermissions(ctx context.Context, memberId int64) (lists adminin.MemberLoginPermissions, err error) LoginPermissions(ctx context.Context, memberId int64) (lists adminin.MemberLoginPermissions, err error)
} }
IAdminMonitor interface {
StartMonitor(ctx context.Context)
GetMeta(ctx context.Context) *model.MonitorData
}
IAdminPost interface { IAdminPost interface {
Delete(ctx context.Context, in adminin.PostDeleteInp) (err error) Delete(ctx context.Context, in adminin.PostDeleteInp) (err error)
Edit(ctx context.Context, in adminin.PostEditInp) (err error) Edit(ctx context.Context, in adminin.PostEditInp) (err error)
@ -51,6 +85,24 @@ type (
GetMemberByStartName(ctx context.Context, memberId int64) (name string, err error) GetMemberByStartName(ctx context.Context, memberId int64) (name string, err error)
Status(ctx context.Context, in adminin.PostStatusInp) (err error) Status(ctx context.Context, in adminin.PostStatusInp) (err error)
} }
IAdminRole interface {
Verify(ctx context.Context, path, method string) bool
List(ctx context.Context, in adminin.RoleListInp) (res *adminin.RoleListModel, totalCount int, err error)
GetName(ctx context.Context, id int64) (name string, err error)
GetMemberList(ctx context.Context, id int64) (list []*adminin.RoleListModel, err error)
GetPermissions(ctx context.Context, in adminin.GetPermissionsInp) (res *adminin.GetPermissionsModel, err error)
UpdatePermissions(ctx context.Context, in adminin.UpdatePermissionsInp) (err error)
Edit(ctx context.Context, in adminin.RoleEditInp) (err error)
Delete(ctx context.Context, in adminin.RoleDeleteInp) (err error)
DataScopeSelect() (res form.Selects)
DataScopeEdit(ctx context.Context, in *adminin.DataScopeEditInp) (err error)
}
IAdminCash interface {
View(ctx context.Context, in adminin.CashViewInp) (res *adminin.CashViewModel, err error)
List(ctx context.Context, in adminin.CashListInp) (list []*adminin.CashListModel, totalCount int, err error)
Apply(ctx context.Context, in adminin.CashApplyInp) (err error)
Payment(ctx context.Context, in adminin.CashPaymentInp) (err error)
}
IAdminNotice interface { IAdminNotice interface {
Model(ctx context.Context, option ...*handler.Option) *gdb.Model Model(ctx context.Context, option ...*handler.Option) *gdb.Model
Delete(ctx context.Context, in adminin.NoticeDeleteInp) (err error) Delete(ctx context.Context, in adminin.NoticeDeleteInp) (err error)
@ -78,128 +130,41 @@ type (
View(ctx context.Context, in adminin.OrderViewInp) (res *adminin.OrderViewModel, err error) View(ctx context.Context, in adminin.OrderViewInp) (res *adminin.OrderViewModel, err error)
Status(ctx context.Context, in adminin.OrderStatusInp) (err error) Status(ctx context.Context, in adminin.OrderStatusInp) (err error)
} }
IAdminRole interface {
Verify(ctx context.Context, path, method string) bool
List(ctx context.Context, in adminin.RoleListInp) (res *adminin.RoleListModel, totalCount int, err error)
GetName(ctx context.Context, RoleId int64) (name string, err error)
GetMemberList(ctx context.Context, RoleId int64) (list []*adminin.RoleListModel, err error)
GetPermissions(ctx context.Context, reqInfo *role.GetPermissionsReq) (MenuIds []int64, err error)
UpdatePermissions(ctx context.Context, reqInfo *role.UpdatePermissionsReq) (err error)
Edit(ctx context.Context, in *role.EditReq) (err error)
Delete(ctx context.Context, in *role.DeleteReq) (err error)
DataScopeSelect(ctx context.Context) (res form.Selects)
DataScopeEdit(ctx context.Context, in *adminin.DataScopeEditInp) (err error)
}
IAdminSite interface { IAdminSite interface {
Register(ctx context.Context, in adminin.RegisterInp) (err error) Register(ctx context.Context, in adminin.RegisterInp) (err error)
AccountLogin(ctx context.Context, in adminin.AccountLoginInp) (res *adminin.LoginModel, err error) AccountLogin(ctx context.Context, in adminin.AccountLoginInp) (res *adminin.LoginModel, err error)
MobileLogin(ctx context.Context, in adminin.MobileLoginInp) (res *adminin.LoginModel, err error) MobileLogin(ctx context.Context, in adminin.MobileLoginInp) (res *adminin.LoginModel, err error)
} }
IAdminCreditsLog interface { IAdminMonitor interface {
Model(ctx context.Context, option ...*handler.Option) *gdb.Model StartMonitor(ctx context.Context)
SaveBalance(ctx context.Context, in adminin.CreditsLogSaveBalanceInp) (res *adminin.CreditsLogSaveBalanceModel, err error) GetMeta(ctx context.Context) *model.MonitorData
SaveIntegral(ctx context.Context, in adminin.CreditsLogSaveIntegralInp) (res *adminin.CreditsLogSaveIntegralModel, err error)
List(ctx context.Context, in adminin.CreditsLogListInp) (list []*adminin.CreditsLogListModel, totalCount int, err error)
Export(ctx context.Context, in adminin.CreditsLogListInp) (err error)
}
IAdminDept interface {
NameUnique(ctx context.Context, in adminin.DeptNameUniqueInp) (res *adminin.DeptNameUniqueModel, err error)
Delete(ctx context.Context, in adminin.DeptDeleteInp) (err error)
Edit(ctx context.Context, in adminin.DeptEditInp) (err error)
Status(ctx context.Context, in adminin.DeptStatusInp) (err error)
MaxSort(ctx context.Context, in adminin.DeptMaxSortInp) (res *adminin.DeptMaxSortModel, err error)
View(ctx context.Context, in adminin.DeptViewInp) (res *adminin.DeptViewModel, err error)
Option(ctx context.Context, in adminin.DeptOptionInp) (res *adminin.DeptOptionModel, totalCount int, err error)
List(ctx context.Context, in adminin.DeptListInp) (res *adminin.DeptListModel, err error)
GetName(ctx context.Context, id int64) (name string, err error)
}
IAdminMember interface {
AddBalance(ctx context.Context, in adminin.MemberAddBalanceInp) (err error)
AddIntegral(ctx context.Context, in adminin.MemberAddIntegralInp) (err error)
UpdateCash(ctx context.Context, in adminin.MemberUpdateCashInp) (err error)
UpdateEmail(ctx context.Context, in adminin.MemberUpdateEmailInp) (err error)
UpdateMobile(ctx context.Context, in adminin.MemberUpdateMobileInp) (err error)
UpdateProfile(ctx context.Context, in adminin.MemberUpdateProfileInp) (err error)
UpdatePwd(ctx context.Context, in adminin.MemberUpdatePwdInp) (err error)
ResetPwd(ctx context.Context, in adminin.MemberResetPwdInp) (err error)
VerifyUnique(ctx context.Context, in adminin.VerifyUniqueInp) (err error)
Delete(ctx context.Context, in adminin.MemberDeleteInp) (err error)
Edit(ctx context.Context, in adminin.MemberEditInp) (err error)
View(ctx context.Context, in adminin.MemberViewInp) (res *adminin.MemberViewModel, err error)
List(ctx context.Context, in adminin.MemberListInp) (list []*adminin.MemberListModel, totalCount int, err error)
Status(ctx context.Context, in adminin.MemberStatusInp) (err error)
GenTree(ctx context.Context, pid int64) (level int, newTree string, err error)
RoleMemberList(ctx context.Context, in adminin.RoleMemberListInp) (list []*adminin.MemberListModel, totalCount int, err error)
LoginMemberInfo(ctx context.Context) (res *adminin.LoginMemberInfoModel, err error)
MemberLoginStat(ctx context.Context, in adminin.MemberLoginStatInp) (res *adminin.MemberLoginStatModel, err error)
GetIdByCode(ctx context.Context, in adminin.GetIdByCodeInp) (res *adminin.GetIdByCodeModel, err error)
Select(ctx context.Context, in adminin.MemberSelectInp) (res []*adminin.MemberSelectModel, err error)
VerifySuperId(ctx context.Context, verifyId int64) bool
FilterAuthModel(ctx context.Context, memberId int64) *gdb.Model
}
IAdminMemberPost interface {
UpdatePostIds(ctx context.Context, memberId int64, postIds []int64) (err error)
GetMemberByIds(ctx context.Context, memberId int64) (postIds []int64, err error)
} }
) )
var ( var (
localAdminMemberPost IAdminMemberPost localAdminCash IAdminCash
localAdminNotice IAdminNotice
localAdminOrder IAdminOrder
localAdminRole IAdminRole
localAdminSite IAdminSite
localAdminCreditsLog IAdminCreditsLog localAdminCreditsLog IAdminCreditsLog
localAdminDept IAdminDept localAdminDept IAdminDept
localAdminMember IAdminMember localAdminMember IAdminMember
localAdminPost IAdminPost localAdminMemberPost IAdminMemberPost
localAdminCash IAdminCash
localAdminMenu IAdminMenu localAdminMenu IAdminMenu
localAdminPost IAdminPost
localAdminRole IAdminRole
localAdminMonitor IAdminMonitor localAdminMonitor IAdminMonitor
localAdminNotice IAdminNotice
localAdminOrder IAdminOrder
localAdminSite IAdminSite
) )
func AdminMember() IAdminMember { func AdminPost() IAdminPost {
if localAdminMember == nil { if localAdminPost == nil {
panic("implement not found for interface IAdminMember, forgot register?") panic("implement not found for interface IAdminPost, forgot register?")
} }
return localAdminMember return localAdminPost
} }
func RegisterAdminMember(i IAdminMember) { func RegisterAdminPost(i IAdminPost) {
localAdminMember = i localAdminPost = i
}
func AdminMemberPost() IAdminMemberPost {
if localAdminMemberPost == nil {
panic("implement not found for interface IAdminMemberPost, forgot register?")
}
return localAdminMemberPost
}
func RegisterAdminMemberPost(i IAdminMemberPost) {
localAdminMemberPost = i
}
func AdminNotice() IAdminNotice {
if localAdminNotice == nil {
panic("implement not found for interface IAdminNotice, forgot register?")
}
return localAdminNotice
}
func RegisterAdminNotice(i IAdminNotice) {
localAdminNotice = i
}
func AdminOrder() IAdminOrder {
if localAdminOrder == nil {
panic("implement not found for interface IAdminOrder, forgot register?")
}
return localAdminOrder
}
func RegisterAdminOrder(i IAdminOrder) {
localAdminOrder = i
} }
func AdminRole() IAdminRole { func AdminRole() IAdminRole {
@ -213,15 +178,15 @@ func RegisterAdminRole(i IAdminRole) {
localAdminRole = i localAdminRole = i
} }
func AdminSite() IAdminSite { func AdminCash() IAdminCash {
if localAdminSite == nil { if localAdminCash == nil {
panic("implement not found for interface IAdminSite, forgot register?") panic("implement not found for interface IAdminCash, forgot register?")
} }
return localAdminSite return localAdminCash
} }
func RegisterAdminSite(i IAdminSite) { func RegisterAdminCash(i IAdminCash) {
localAdminSite = i localAdminCash = i
} }
func AdminCreditsLog() IAdminCreditsLog { func AdminCreditsLog() IAdminCreditsLog {
@ -246,37 +211,26 @@ func RegisterAdminDept(i IAdminDept) {
localAdminDept = i localAdminDept = i
} }
func AdminMonitor() IAdminMonitor { func AdminMember() IAdminMember {
if localAdminMonitor == nil { if localAdminMember == nil {
panic("implement not found for interface IAdminMonitor, forgot register?") panic("implement not found for interface IAdminMember, forgot register?")
} }
return localAdminMonitor return localAdminMember
} }
func RegisterAdminMonitor(i IAdminMonitor) { func RegisterAdminMember(i IAdminMember) {
localAdminMonitor = i localAdminMember = i
} }
func AdminPost() IAdminPost { func AdminMemberPost() IAdminMemberPost {
if localAdminPost == nil { if localAdminMemberPost == nil {
panic("implement not found for interface IAdminPost, forgot register?") panic("implement not found for interface IAdminMemberPost, forgot register?")
} }
return localAdminPost return localAdminMemberPost
} }
func RegisterAdminPost(i IAdminPost) { func RegisterAdminMemberPost(i IAdminMemberPost) {
localAdminPost = i localAdminMemberPost = i
}
func AdminCash() IAdminCash {
if localAdminCash == nil {
panic("implement not found for interface IAdminCash, forgot register?")
}
return localAdminCash
}
func RegisterAdminCash(i IAdminCash) {
localAdminCash = i
} }
func AdminMenu() IAdminMenu { func AdminMenu() IAdminMenu {
@ -289,3 +243,47 @@ func AdminMenu() IAdminMenu {
func RegisterAdminMenu(i IAdminMenu) { func RegisterAdminMenu(i IAdminMenu) {
localAdminMenu = i localAdminMenu = i
} }
func AdminMonitor() IAdminMonitor {
if localAdminMonitor == nil {
panic("implement not found for interface IAdminMonitor, forgot register?")
}
return localAdminMonitor
}
func RegisterAdminMonitor(i IAdminMonitor) {
localAdminMonitor = i
}
func AdminNotice() IAdminNotice {
if localAdminNotice == nil {
panic("implement not found for interface IAdminNotice, forgot register?")
}
return localAdminNotice
}
func RegisterAdminNotice(i IAdminNotice) {
localAdminNotice = i
}
func AdminOrder() IAdminOrder {
if localAdminOrder == nil {
panic("implement not found for interface IAdminOrder, forgot register?")
}
return localAdminOrder
}
func RegisterAdminOrder(i IAdminOrder) {
localAdminOrder = i
}
func AdminSite() IAdminSite {
if localAdminSite == nil {
panic("implement not found for interface IAdminSite, forgot register?")
}
return localAdminSite
}
func RegisterAdminSite(i IAdminSite) {
localAdminSite = i
}

View File

@ -17,6 +17,16 @@ import (
) )
type ( type (
ISysAttachment interface {
Model(ctx context.Context, option ...*handler.Option) *gdb.Model
Delete(ctx context.Context, in sysin.AttachmentDeleteInp) (err error)
Edit(ctx context.Context, in sysin.AttachmentEditInp) (err error)
Status(ctx context.Context, in sysin.AttachmentStatusInp) (err error)
MaxSort(ctx context.Context, in sysin.AttachmentMaxSortInp) (res *sysin.AttachmentMaxSortModel, err error)
View(ctx context.Context, in sysin.AttachmentViewInp) (res *sysin.AttachmentViewModel, err error)
List(ctx context.Context, in sysin.AttachmentListInp) (list []*sysin.AttachmentListModel, totalCount int, err error)
Add(ctx context.Context, meta *sysin.UploadFileMeta, fullPath, drive string) (models *entity.SysAttachment, err error)
}
ISysBlacklist interface { ISysBlacklist interface {
Delete(ctx context.Context, in sysin.BlacklistDeleteInp) (err error) Delete(ctx context.Context, in sysin.BlacklistDeleteInp) (err error)
Edit(ctx context.Context, in sysin.BlacklistEditInp) (err error) Edit(ctx context.Context, in sysin.BlacklistEditInp) (err error)
@ -27,53 +37,26 @@ type (
VariableLoad(ctx context.Context, err error) VariableLoad(ctx context.Context, err error)
Load(ctx context.Context) Load(ctx context.Context)
} }
ISysCronGroup interface { ISysDictData interface {
Delete(ctx context.Context, in sysin.CronGroupDeleteInp) (err error) Delete(ctx context.Context, in sysin.DictDataDeleteInp) error
Edit(ctx context.Context, in sysin.CronGroupEditInp) (err error) Edit(ctx context.Context, in sysin.DictDataEditInp) (err error)
Status(ctx context.Context, in sysin.CronGroupStatusInp) (err error) List(ctx context.Context, in sysin.DictDataListInp) (list []*sysin.DictDataListModel, totalCount int, err error)
MaxSort(ctx context.Context, in sysin.CronGroupMaxSortInp) (res *sysin.CronGroupMaxSortModel, err error) Select(ctx context.Context, in sysin.DataSelectInp) (list sysin.DataSelectModel, err error)
View(ctx context.Context, in sysin.CronGroupViewInp) (res *sysin.CronGroupViewModel, err error)
List(ctx context.Context, in sysin.CronGroupListInp) (list []*sysin.CronGroupListModel, totalCount int, err error)
Select(ctx context.Context, in sysin.CronGroupSelectInp) (res *sysin.CronGroupSelectModel, err error)
} }
ISysGenCodes interface { ISysLog interface {
Delete(ctx context.Context, in sysin.GenCodesDeleteInp) (err error) Export(ctx context.Context, in sysin.LogListInp) (err error)
Edit(ctx context.Context, in sysin.GenCodesEditInp) (res *sysin.GenCodesEditModel, err error) RealWrite(ctx context.Context, log entity.SysLog) (err error)
Status(ctx context.Context, in sysin.GenCodesStatusInp) (err error) AutoLog(ctx context.Context) error
MaxSort(ctx context.Context, in sysin.GenCodesMaxSortInp) (res *sysin.GenCodesMaxSortModel, err error) AnalysisLog(ctx context.Context) entity.SysLog
View(ctx context.Context, in sysin.GenCodesViewInp) (res *sysin.GenCodesViewModel, err error) View(ctx context.Context, in sysin.LogViewInp) (res *sysin.LogViewModel, err error)
List(ctx context.Context, in sysin.GenCodesListInp) (list []*sysin.GenCodesListModel, totalCount int, err error) Delete(ctx context.Context, in sysin.LogDeleteInp) (err error)
Selects(ctx context.Context, in sysin.GenCodesSelectsInp) (res *sysin.GenCodesSelectsModel, err error) List(ctx context.Context, in sysin.LogListInp) (list []*sysin.LogListModel, totalCount int, err error)
TableSelect(ctx context.Context, in sysin.GenCodesTableSelectInp) (res []*sysin.GenCodesTableSelectModel, err error)
ColumnSelect(ctx context.Context, in sysin.GenCodesColumnSelectInp) (res []*sysin.GenCodesColumnSelectModel, err error)
ColumnList(ctx context.Context, in sysin.GenCodesColumnListInp) (res []*sysin.GenCodesColumnListModel, err error)
Preview(ctx context.Context, in sysin.GenCodesPreviewInp) (res *sysin.GenCodesPreviewModel, err error)
Build(ctx context.Context, in sysin.GenCodesBuildInp) (err error)
}
ISysLoginLog interface {
Model(ctx context.Context) *gdb.Model
List(ctx context.Context, in sysin.LoginLogListInp) (list []*sysin.LoginLogListModel, totalCount int, err error)
Export(ctx context.Context, in sysin.LoginLogListInp) (err error)
Delete(ctx context.Context, in sysin.LoginLogDeleteInp) (err error)
View(ctx context.Context, in sysin.LoginLogViewInp) (res *sysin.LoginLogViewModel, err error)
Push(ctx context.Context, in sysin.LoginLogPushInp)
RealWrite(ctx context.Context, models entity.SysLoginLog) (err error)
} }
ISysAddonsConfig interface { ISysAddonsConfig interface {
GetConfigByGroup(ctx context.Context, in sysin.GetAddonsConfigInp) (res *sysin.GetAddonsConfigModel, err error) GetConfigByGroup(ctx context.Context, in sysin.GetAddonsConfigInp) (res *sysin.GetAddonsConfigModel, err error)
ConversionType(ctx context.Context, models *entity.SysAddonsConfig) (value interface{}, err error) ConversionType(ctx context.Context, models *entity.SysAddonsConfig) (value interface{}, err error)
UpdateConfigByGroup(ctx context.Context, in sysin.UpdateAddonsConfigInp) (err error) UpdateConfigByGroup(ctx context.Context, in sysin.UpdateAddonsConfigInp) (err error)
} }
ISysAttachment interface {
Model(ctx context.Context, option ...*handler.Option) *gdb.Model
Delete(ctx context.Context, in sysin.AttachmentDeleteInp) (err error)
Edit(ctx context.Context, in sysin.AttachmentEditInp) (err error)
Status(ctx context.Context, in sysin.AttachmentStatusInp) (err error)
MaxSort(ctx context.Context, in sysin.AttachmentMaxSortInp) (res *sysin.AttachmentMaxSortModel, err error)
View(ctx context.Context, in sysin.AttachmentViewInp) (res *sysin.AttachmentViewModel, err error)
List(ctx context.Context, in sysin.AttachmentListInp) (list []*sysin.AttachmentListModel, totalCount int, err error)
Add(ctx context.Context, meta *sysin.UploadFileMeta, fullPath, drive string) (models *entity.SysAttachment, err error)
}
ISysConfig interface { ISysConfig interface {
InitConfig(ctx context.Context) InitConfig(ctx context.Context)
GetLogin(ctx context.Context) (conf *model.LoginConfig, err error) GetLogin(ctx context.Context) (conf *model.LoginConfig, err error)
@ -95,34 +78,17 @@ type (
ConversionType(ctx context.Context, models *entity.SysConfig) (value interface{}, err error) ConversionType(ctx context.Context, models *entity.SysConfig) (value interface{}, err error)
UpdateConfigByGroup(ctx context.Context, in sysin.UpdateConfigInp) (err error) UpdateConfigByGroup(ctx context.Context, in sysin.UpdateConfigInp) (err error)
} }
ISysLog interface { ISysProvinces interface {
Export(ctx context.Context, in sysin.LogListInp) (err error) Tree(ctx context.Context) (list []g.Map, err error)
RealWrite(ctx context.Context, log entity.SysLog) (err error) Delete(ctx context.Context, in sysin.ProvincesDeleteInp) (err error)
AutoLog(ctx context.Context) error Edit(ctx context.Context, in sysin.ProvincesEditInp) (err error)
AnalysisLog(ctx context.Context) entity.SysLog Status(ctx context.Context, in sysin.ProvincesStatusInp) (err error)
View(ctx context.Context, in sysin.LogViewInp) (res *sysin.LogViewModel, err error) MaxSort(ctx context.Context, in sysin.ProvincesMaxSortInp) (res *sysin.ProvincesMaxSortModel, err error)
Delete(ctx context.Context, in sysin.LogDeleteInp) (err error) View(ctx context.Context, in sysin.ProvincesViewInp) (res *sysin.ProvincesViewModel, err error)
List(ctx context.Context, in sysin.LogListInp) (list []*sysin.LogListModel, totalCount int, err error) List(ctx context.Context, in sysin.ProvincesListInp) (list []*sysin.ProvincesListModel, totalCount int, err error)
} ChildrenList(ctx context.Context, in sysin.ProvincesChildrenListInp) (list []*sysin.ProvincesChildrenListModel, totalCount int, err error)
ISysServeLog interface { UniqueId(ctx context.Context, in sysin.ProvincesUniqueIdInp) (res *sysin.ProvincesUniqueIdModel, err error)
Model(ctx context.Context) *gdb.Model Select(ctx context.Context, in sysin.ProvincesSelectInp) (res *sysin.ProvincesSelectModel, err error)
List(ctx context.Context, in sysin.ServeLogListInp) (list []*sysin.ServeLogListModel, totalCount int, err error)
Export(ctx context.Context, in sysin.ServeLogListInp) (err error)
Delete(ctx context.Context, in sysin.ServeLogDeleteInp) (err error)
View(ctx context.Context, in sysin.ServeLogViewInp) (res *sysin.ServeLogViewModel, err error)
RealWrite(ctx context.Context, models entity.SysServeLog) (err error)
}
ISysDictData interface {
Delete(ctx context.Context, in sysin.DictDataDeleteInp) error
Edit(ctx context.Context, in sysin.DictDataEditInp) (err error)
List(ctx context.Context, in sysin.DictDataListInp) (list []*sysin.DictDataListModel, totalCount int, err error)
Select(ctx context.Context, in sysin.DataSelectInp) (list sysin.DataSelectModel, err error)
}
ISysDictType interface {
Tree(ctx context.Context) (list []*sysin.DictTypeTree, err error)
Delete(ctx context.Context, in sysin.DictTypeDeleteInp) (err error)
Edit(ctx context.Context, in sysin.DictTypeEditInp) (err error)
TreeSelect(ctx context.Context, in sysin.DictTreeSelectInp) (list []*sysin.DictTypeTree, err error)
} }
ISysCurdDemo interface { ISysCurdDemo interface {
Model(ctx context.Context, option ...*handler.Option) *gdb.Model Model(ctx context.Context, option ...*handler.Option) *gdb.Model
@ -135,6 +101,12 @@ type (
Status(ctx context.Context, in sysin.CurdDemoStatusInp) (err error) Status(ctx context.Context, in sysin.CurdDemoStatusInp) (err error)
Switch(ctx context.Context, in sysin.CurdDemoSwitchInp) (err error) Switch(ctx context.Context, in sysin.CurdDemoSwitchInp) (err error)
} }
ISysDictType interface {
Tree(ctx context.Context) (list []*sysin.DictTypeTree, err error)
Delete(ctx context.Context, in sysin.DictTypeDeleteInp) (err error)
Edit(ctx context.Context, in sysin.DictTypeEditInp) (err error)
TreeSelect(ctx context.Context, in sysin.DictTreeSelectInp) (list []*sysin.DictTypeTree, err error)
}
ISysEmsLog interface { ISysEmsLog interface {
Delete(ctx context.Context, in sysin.EmsLogDeleteInp) (err error) Delete(ctx context.Context, in sysin.EmsLogDeleteInp) (err error)
Edit(ctx context.Context, in sysin.EmsLogEditInp) (err error) Edit(ctx context.Context, in sysin.EmsLogEditInp) (err error)
@ -146,17 +118,14 @@ type (
AllowSend(ctx context.Context, models *entity.SysEmsLog, config *model.EmailConfig) (err error) AllowSend(ctx context.Context, models *entity.SysEmsLog, config *model.EmailConfig) (err error)
VerifyCode(ctx context.Context, in sysin.VerifyEmsCodeInp) (err error) VerifyCode(ctx context.Context, in sysin.VerifyEmsCodeInp) (err error)
} }
ISysProvinces interface { ISysLoginLog interface {
Tree(ctx context.Context) (list []g.Map, err error) Model(ctx context.Context) *gdb.Model
Delete(ctx context.Context, in sysin.ProvincesDeleteInp) (err error) List(ctx context.Context, in sysin.LoginLogListInp) (list []*sysin.LoginLogListModel, totalCount int, err error)
Edit(ctx context.Context, in sysin.ProvincesEditInp) (err error) Export(ctx context.Context, in sysin.LoginLogListInp) (err error)
Status(ctx context.Context, in sysin.ProvincesStatusInp) (err error) Delete(ctx context.Context, in sysin.LoginLogDeleteInp) (err error)
MaxSort(ctx context.Context, in sysin.ProvincesMaxSortInp) (res *sysin.ProvincesMaxSortModel, err error) View(ctx context.Context, in sysin.LoginLogViewInp) (res *sysin.LoginLogViewModel, err error)
View(ctx context.Context, in sysin.ProvincesViewInp) (res *sysin.ProvincesViewModel, err error) Push(ctx context.Context, in sysin.LoginLogPushInp)
List(ctx context.Context, in sysin.ProvincesListInp) (list []*sysin.ProvincesListModel, totalCount int, err error) RealWrite(ctx context.Context, models entity.SysLoginLog) (err error)
ChildrenList(ctx context.Context, in sysin.ProvincesChildrenListInp) (list []*sysin.ProvincesChildrenListModel, totalCount int, err error)
UniqueId(ctx context.Context, in sysin.ProvincesUniqueIdInp) (res *sysin.ProvincesUniqueIdModel, err error)
Select(ctx context.Context, in sysin.ProvincesSelectInp) (res *sysin.ProvincesSelectModel, err error)
} }
ISysSmsLog interface { ISysSmsLog interface {
Delete(ctx context.Context, in sysin.SmsLogDeleteInp) (err error) Delete(ctx context.Context, in sysin.SmsLogDeleteInp) (err error)
@ -188,94 +157,59 @@ type (
List(ctx context.Context, in sysin.CronListInp) (list []*sysin.CronListModel, totalCount int, err error) List(ctx context.Context, in sysin.CronListInp) (list []*sysin.CronListModel, totalCount int, err error)
OnlineExec(ctx context.Context, in sysin.OnlineExecInp) (err error) OnlineExec(ctx context.Context, in sysin.OnlineExecInp) (err error)
} }
ISysCronGroup interface {
Delete(ctx context.Context, in sysin.CronGroupDeleteInp) (err error)
Edit(ctx context.Context, in sysin.CronGroupEditInp) (err error)
Status(ctx context.Context, in sysin.CronGroupStatusInp) (err error)
MaxSort(ctx context.Context, in sysin.CronGroupMaxSortInp) (res *sysin.CronGroupMaxSortModel, err error)
View(ctx context.Context, in sysin.CronGroupViewInp) (res *sysin.CronGroupViewModel, err error)
List(ctx context.Context, in sysin.CronGroupListInp) (list []*sysin.CronGroupListModel, totalCount int, err error)
Select(ctx context.Context, in sysin.CronGroupSelectInp) (res *sysin.CronGroupSelectModel, err error)
}
ISysGenCodes interface {
Delete(ctx context.Context, in sysin.GenCodesDeleteInp) (err error)
Edit(ctx context.Context, in sysin.GenCodesEditInp) (res *sysin.GenCodesEditModel, err error)
Status(ctx context.Context, in sysin.GenCodesStatusInp) (err error)
MaxSort(ctx context.Context, in sysin.GenCodesMaxSortInp) (res *sysin.GenCodesMaxSortModel, err error)
View(ctx context.Context, in sysin.GenCodesViewInp) (res *sysin.GenCodesViewModel, err error)
List(ctx context.Context, in sysin.GenCodesListInp) (list []*sysin.GenCodesListModel, totalCount int, err error)
Selects(ctx context.Context, in sysin.GenCodesSelectsInp) (res *sysin.GenCodesSelectsModel, err error)
TableSelect(ctx context.Context, in sysin.GenCodesTableSelectInp) (res []*sysin.GenCodesTableSelectModel, err error)
ColumnSelect(ctx context.Context, in sysin.GenCodesColumnSelectInp) (res []*sysin.GenCodesColumnSelectModel, err error)
ColumnList(ctx context.Context, in sysin.GenCodesColumnListInp) (res []*sysin.GenCodesColumnListModel, err error)
Preview(ctx context.Context, in sysin.GenCodesPreviewInp) (res *sysin.GenCodesPreviewModel, err error)
Build(ctx context.Context, in sysin.GenCodesBuildInp) (err error)
}
ISysServeLog interface {
Model(ctx context.Context) *gdb.Model
List(ctx context.Context, in sysin.ServeLogListInp) (list []*sysin.ServeLogListModel, totalCount int, err error)
Export(ctx context.Context, in sysin.ServeLogListInp) (err error)
Delete(ctx context.Context, in sysin.ServeLogDeleteInp) (err error)
View(ctx context.Context, in sysin.ServeLogViewInp) (res *sysin.ServeLogViewModel, err error)
RealWrite(ctx context.Context, models entity.SysServeLog) (err error)
}
) )
var ( var (
localSysDictData ISysDictData
localSysDictType ISysDictType
localSysLog ISysLog
localSysServeLog ISysServeLog
localSysProvinces ISysProvinces
localSysSmsLog ISysSmsLog
localSysAddons ISysAddons localSysAddons ISysAddons
localSysCron ISysCron localSysCron ISysCron
localSysCurdDemo ISysCurdDemo localSysCronGroup ISysCronGroup
localSysEmsLog ISysEmsLog
localSysGenCodes ISysGenCodes localSysGenCodes ISysGenCodes
localSysLoginLog ISysLoginLog localSysServeLog ISysServeLog
localSysAddonsConfig ISysAddonsConfig
localSysAttachment ISysAttachment localSysAttachment ISysAttachment
localSysBlacklist ISysBlacklist localSysBlacklist ISysBlacklist
localSysCronGroup ISysCronGroup localSysDictData ISysDictData
localSysLog ISysLog
localSysAddonsConfig ISysAddonsConfig
localSysConfig ISysConfig localSysConfig ISysConfig
localSysProvinces ISysProvinces
localSysCurdDemo ISysCurdDemo
localSysDictType ISysDictType
localSysEmsLog ISysEmsLog
localSysLoginLog ISysLoginLog
localSysSmsLog ISysSmsLog
) )
func SysDictData() ISysDictData {
if localSysDictData == nil {
panic("implement not found for interface ISysDictData, forgot register?")
}
return localSysDictData
}
func RegisterSysDictData(i ISysDictData) {
localSysDictData = i
}
func SysDictType() ISysDictType {
if localSysDictType == nil {
panic("implement not found for interface ISysDictType, forgot register?")
}
return localSysDictType
}
func RegisterSysDictType(i ISysDictType) {
localSysDictType = i
}
func SysLog() ISysLog {
if localSysLog == nil {
panic("implement not found for interface ISysLog, forgot register?")
}
return localSysLog
}
func RegisterSysLog(i ISysLog) {
localSysLog = i
}
func SysServeLog() ISysServeLog {
if localSysServeLog == nil {
panic("implement not found for interface ISysServeLog, forgot register?")
}
return localSysServeLog
}
func RegisterSysServeLog(i ISysServeLog) {
localSysServeLog = i
}
func SysProvinces() ISysProvinces {
if localSysProvinces == nil {
panic("implement not found for interface ISysProvinces, forgot register?")
}
return localSysProvinces
}
func RegisterSysProvinces(i ISysProvinces) {
localSysProvinces = i
}
func SysSmsLog() ISysSmsLog {
if localSysSmsLog == nil {
panic("implement not found for interface ISysSmsLog, forgot register?")
}
return localSysSmsLog
}
func RegisterSysSmsLog(i ISysSmsLog) {
localSysSmsLog = i
}
func SysAddons() ISysAddons { func SysAddons() ISysAddons {
if localSysAddons == nil { if localSysAddons == nil {
panic("implement not found for interface ISysAddons, forgot register?") panic("implement not found for interface ISysAddons, forgot register?")
@ -298,26 +232,15 @@ func RegisterSysCron(i ISysCron) {
localSysCron = i localSysCron = i
} }
func SysCurdDemo() ISysCurdDemo { func SysCronGroup() ISysCronGroup {
if localSysCurdDemo == nil { if localSysCronGroup == nil {
panic("implement not found for interface ISysCurdDemo, forgot register?") panic("implement not found for interface ISysCronGroup, forgot register?")
} }
return localSysCurdDemo return localSysCronGroup
} }
func RegisterSysCurdDemo(i ISysCurdDemo) { func RegisterSysCronGroup(i ISysCronGroup) {
localSysCurdDemo = i localSysCronGroup = i
}
func SysEmsLog() ISysEmsLog {
if localSysEmsLog == nil {
panic("implement not found for interface ISysEmsLog, forgot register?")
}
return localSysEmsLog
}
func RegisterSysEmsLog(i ISysEmsLog) {
localSysEmsLog = i
} }
func SysGenCodes() ISysGenCodes { func SysGenCodes() ISysGenCodes {
@ -331,26 +254,15 @@ func RegisterSysGenCodes(i ISysGenCodes) {
localSysGenCodes = i localSysGenCodes = i
} }
func SysLoginLog() ISysLoginLog { func SysServeLog() ISysServeLog {
if localSysLoginLog == nil { if localSysServeLog == nil {
panic("implement not found for interface ISysLoginLog, forgot register?") panic("implement not found for interface ISysServeLog, forgot register?")
} }
return localSysLoginLog return localSysServeLog
} }
func RegisterSysLoginLog(i ISysLoginLog) { func RegisterSysServeLog(i ISysServeLog) {
localSysLoginLog = i localSysServeLog = i
}
func SysAddonsConfig() ISysAddonsConfig {
if localSysAddonsConfig == nil {
panic("implement not found for interface ISysAddonsConfig, forgot register?")
}
return localSysAddonsConfig
}
func RegisterSysAddonsConfig(i ISysAddonsConfig) {
localSysAddonsConfig = i
} }
func SysAttachment() ISysAttachment { func SysAttachment() ISysAttachment {
@ -375,15 +287,37 @@ func RegisterSysBlacklist(i ISysBlacklist) {
localSysBlacklist = i localSysBlacklist = i
} }
func SysCronGroup() ISysCronGroup { func SysDictData() ISysDictData {
if localSysCronGroup == nil { if localSysDictData == nil {
panic("implement not found for interface ISysCronGroup, forgot register?") panic("implement not found for interface ISysDictData, forgot register?")
} }
return localSysCronGroup return localSysDictData
} }
func RegisterSysCronGroup(i ISysCronGroup) { func RegisterSysDictData(i ISysDictData) {
localSysCronGroup = i localSysDictData = i
}
func SysLog() ISysLog {
if localSysLog == nil {
panic("implement not found for interface ISysLog, forgot register?")
}
return localSysLog
}
func RegisterSysLog(i ISysLog) {
localSysLog = i
}
func SysAddonsConfig() ISysAddonsConfig {
if localSysAddonsConfig == nil {
panic("implement not found for interface ISysAddonsConfig, forgot register?")
}
return localSysAddonsConfig
}
func RegisterSysAddonsConfig(i ISysAddonsConfig) {
localSysAddonsConfig = i
} }
func SysConfig() ISysConfig { func SysConfig() ISysConfig {
@ -396,3 +330,69 @@ func SysConfig() ISysConfig {
func RegisterSysConfig(i ISysConfig) { func RegisterSysConfig(i ISysConfig) {
localSysConfig = i localSysConfig = i
} }
func SysProvinces() ISysProvinces {
if localSysProvinces == nil {
panic("implement not found for interface ISysProvinces, forgot register?")
}
return localSysProvinces
}
func RegisterSysProvinces(i ISysProvinces) {
localSysProvinces = i
}
func SysCurdDemo() ISysCurdDemo {
if localSysCurdDemo == nil {
panic("implement not found for interface ISysCurdDemo, forgot register?")
}
return localSysCurdDemo
}
func RegisterSysCurdDemo(i ISysCurdDemo) {
localSysCurdDemo = i
}
func SysDictType() ISysDictType {
if localSysDictType == nil {
panic("implement not found for interface ISysDictType, forgot register?")
}
return localSysDictType
}
func RegisterSysDictType(i ISysDictType) {
localSysDictType = i
}
func SysEmsLog() ISysEmsLog {
if localSysEmsLog == nil {
panic("implement not found for interface ISysEmsLog, forgot register?")
}
return localSysEmsLog
}
func RegisterSysEmsLog(i ISysEmsLog) {
localSysEmsLog = i
}
func SysLoginLog() ISysLoginLog {
if localSysLoginLog == nil {
panic("implement not found for interface ISysLoginLog, forgot register?")
}
return localSysLoginLog
}
func RegisterSysLoginLog(i ISysLoginLog) {
localSysLoginLog = i
}
func SysSmsLog() ISysSmsLog {
if localSysSmsLog == nil {
panic("implement not found for interface ISysSmsLog, forgot register?")
}
return localSysSmsLog
}
func RegisterSysSmsLog(i ISysSmsLog) {
localSysSmsLog = i
}

View File

@ -19,7 +19,7 @@ import (
) )
func main() { func main() {
var ctx = gctx.New() var ctx = gctx.GetInitCtx()
global.Init(ctx) global.Init(ctx)
cmd.Main.Run(ctx) cmd.Main.Run(ctx)
} }

View File

@ -20,6 +20,16 @@ import (
"hotgo/utility/validate" "hotgo/utility/validate"
) )
@{ if eq .options.Step.HasEdit true } @{ if eq .options.Step.HasEdit true }
// @{.varName}UpdateFields 修改@{.tableComment}字段过滤
type @{.varName}UpdateFields struct {
@{.updateFieldsColumns}
}
// @{.varName}InsertFields 新增@{.tableComment}字段过滤
type @{.varName}InsertFields struct {
@{.insertFieldsColumns}
}
// @{.varName}EditInp 修改/新增@{.tableComment} // @{.varName}EditInp 修改/新增@{.tableComment}
type @{.varName}EditInp struct { type @{.varName}EditInp struct {
entity.@{.daoName} entity.@{.daoName}
@ -97,6 +107,20 @@ type @{.varName}StatusInp struct {
} }
func (in *@{.varName}StatusInp) Filter(ctx context.Context) (err error) { func (in *@{.varName}StatusInp) Filter(ctx context.Context) (err error) {
if in.@{.pk.GoName} <= 0 {
err = gerror.New("@{.pk.Dc}不能为空")
return
}
if in.Status <= 0 {
err = gerror.New("状态不能为空")
return
}
if !validate.InSliceInt(consts.StatusSlice, in.Status) {
err = gerror.New("状态不正确")
return
}
return return
} }

View File

@ -16,7 +16,6 @@ import (
"github.com/gogf/gf/v2/os/gctx" "github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/util/gconv" "github.com/gogf/gf/v2/util/gconv"
"hotgo/internal/consts"
"hotgo/internal/dao" "hotgo/internal/dao"
"hotgo/internal/library/contexts" "hotgo/internal/library/contexts"
"hotgo/internal/library/hgorm" "hotgo/internal/library/hgorm"
@ -50,12 +49,21 @@ func (s *s@{.servFunName}) List(ctx context.Context, in @{.templateGroup}in.@{.v
@{.listWhere} @{.listWhere}
@{.listJoin.link} @{.listJoin.link}
totalCount, err = mod.Clone().Count() totalCount, err = mod.Clone().Count()
if totalCount == 0 || err != nil { if err != nil {
err = gerror.Wrap(err, "获取@{.tableComment}数据行失败,请稍后重试!")
return
}
if totalCount == 0 {
return return
} }
@{.listJoin.select} @{.listJoin.select}
err = mod.Fields(@{.listJoin.fields}).Page(in.Page, in.PerPage).@{.listOrder}.Scan(&list)
if err = mod.Fields(@{.listJoin.fields}).Page(in.Page, in.PerPage).@{.listOrder}.Scan(&list);err != nil {
err = gerror.Wrap(err, "获取@{.tableComment}列表失败,请稍后重试!")
return
}
return return
} }
@{ if eq .options.Step.HasExport true } @{ if eq .options.Step.HasExport true }
@ -102,13 +110,17 @@ func (s *s@{.servFunName}) Edit(ctx context.Context, in @{.templateGroup}in.@{.v
@{ if eq .options.Step.HasDel true } @{ if eq .options.Step.HasDel true }
// Delete 删除@{.tableComment} // Delete 删除@{.tableComment}
func (s *s@{.servFunName}) Delete(ctx context.Context, in @{.templateGroup}in.@{.varName}DeleteInp) (err error) { func (s *s@{.servFunName}) Delete(ctx context.Context, in @{.templateGroup}in.@{.varName}DeleteInp) (err error) {
_, err = s.Model(ctx@{ if eq .options.Step.HasNotFilterAuth true } ,&handler.Option{FilterAuth: false}@{end}).Where(dao.@{.daoName}.Columns().@{.pk.GoName}, in.@{.pk.GoName}).Delete() if _, err = s.Model(ctx@{ if eq .options.Step.HasNotFilterAuth true } ,&handler.Option{FilterAuth: false}@{end}).WherePri(in.@{.pk.GoName}).Delete();err != nil {
err = gerror.Wrap(err, "删除@{.tableComment}失败,请稍后重试!")
return
}
return return
}@{end} }@{end}
@{ if and (eq .options.Step.HasEdit true) (eq .options.Step.HasMaxSort true) } @{ if and (eq .options.Step.HasEdit true) (eq .options.Step.HasMaxSort true) }
// MaxSort 获取@{.tableComment}最大排序 // MaxSort 获取@{.tableComment}最大排序
func (s *s@{.servFunName}) MaxSort(ctx context.Context, in @{.templateGroup}in.@{.varName}MaxSortInp) (res *@{.templateGroup}in.@{.varName}MaxSortModel, err error) { func (s *s@{.servFunName}) MaxSort(ctx context.Context, in @{.templateGroup}in.@{.varName}MaxSortInp) (res *@{.templateGroup}in.@{.varName}MaxSortModel, err error) {
if err = dao.@{.daoName}.Ctx(ctx).Fields(dao.@{.daoName}.Columns().Sort).OrderDesc(dao.@{.daoName}.Columns().Sort).Scan(&res); err != nil { if err = dao.@{.daoName}.Ctx(ctx).Fields(dao.@{.daoName}.Columns().Sort).OrderDesc(dao.@{.daoName}.Columns().Sort).Scan(&res); err != nil {
err = gerror.Wrap(err, "获取@{.tableComment}最大排序,请稍后重试!")
return return
} }
@ -123,28 +135,19 @@ func (s *s@{.servFunName}) MaxSort(ctx context.Context, in @{.templateGroup}in.@
@{ if or (eq .options.Step.HasView true) (eq .options.Step.HasEdit true) } @{ if or (eq .options.Step.HasView true) (eq .options.Step.HasEdit true) }
// View 获取@{.tableComment}指定信息 // View 获取@{.tableComment}指定信息
func (s *s@{.servFunName}) View(ctx context.Context, in @{.templateGroup}in.@{.varName}ViewInp) (res *@{.templateGroup}in.@{.varName}ViewModel, err error) { func (s *s@{.servFunName}) View(ctx context.Context, in @{.templateGroup}in.@{.varName}ViewInp) (res *@{.templateGroup}in.@{.varName}ViewModel, err error) {
err = s.Model(ctx@{ if eq .options.Step.HasNotFilterAuth true } ,&handler.Option{FilterAuth: false}@{end}).Where(dao.@{.daoName}.Columns().@{.pk.GoName}, in.@{.pk.GoName}).Scan(&res) if err = s.Model(ctx@{ if eq .options.Step.HasNotFilterAuth true } ,&handler.Option{FilterAuth: false}@{end}).WherePri(in.@{.pk.GoName}).Scan(&res);err != nil {
err = gerror.Wrap(err, "获取@{.tableComment}信息,请稍后重试!")
return
}
return return
}@{end} }@{end}
@{ if eq .options.Step.HasStatus true } @{ if eq .options.Step.HasStatus true }
// Status 更新@{.tableComment}状态 // Status 更新@{.tableComment}状态
func (s *s@{.servFunName}) Status(ctx context.Context, in @{.templateGroup}in.@{.varName}StatusInp) (err error) { func (s *s@{.servFunName}) Status(ctx context.Context, in @{.templateGroup}in.@{.varName}StatusInp) (err error) {
if in.@{.pk.GoName} <= 0 { if _, err = s.Model(ctx@{ if eq .options.Step.HasNotFilterAuth true } ,&handler.Option{FilterAuth: false}@{end}).WherePri(in.@{.pk.GoName}).Data(@{.statusUpdate}).Update();err != nil {
err = gerror.New("@{.pk.Dc}不能为空") err = gerror.Wrap(err, "更新@{.tableComment}状态失败,请稍后重试!")
return return
} }
if in.Status <= 0 {
err = gerror.New("状态不能为空")
return
}
if !validate.InSliceInt(consts.StatusSlice, in.Status) {
err = gerror.New("状态不正确")
return
}
_, err = s.Model(ctx@{ if eq .options.Step.HasNotFilterAuth true } ,&handler.Option{FilterAuth: false}@{end}).Where(dao.@{.daoName}.Columns().@{.pk.GoName}, in.@{.pk.GoName}).Data(@{.statusUpdate}).Update()
return return
} }
@{end} @{end}
@ -161,7 +164,10 @@ func (s *s@{.servFunName}) Switch(ctx context.Context, in @{.templateGroup}in.@{
return return
} }
_, err = s.Model(ctx@{ if eq .options.Step.HasNotFilterAuth true } ,&handler.Option{FilterAuth: false}@{end}).Where(dao.@{.daoName}.Columns().@{.pk.GoName}, in.@{.pk.GoName}).Data(@{.switchUpdate}).Update() if _, err = s.Model(ctx@{ if eq .options.Step.HasNotFilterAuth true } ,&handler.Option{FilterAuth: false}@{end}).WherePri(in.@{.pk.GoName}).Data(@{.switchUpdate}).Update();err != nil {
err = gerror.Wrap(err, "更新@{.tableComment}开关失败,请稍后重试!")
return
}
return return
} }
@{end} @{end}

View File

@ -18,6 +18,24 @@ import (
"hotgo/utility/encrypt" "hotgo/utility/encrypt"
) )
// FilterMaskDemo 过滤演示环境下的配置隐藏字段
func FilterMaskDemo(ctx context.Context, src g.Map) g.Map {
if src == nil || len(src) == 0 {
return nil
}
if !g.Cfg().MustGet(ctx, "hotgo.isDemo", false).Bool() {
return src
}
for k, _ := range src {
if _, ok := consts.ConfigMaskDemoField[k]; ok {
src[k] = consts.DemoTips
}
}
return src
}
// DecryptText 解密文本 // DecryptText 解密文本
func DecryptText(text string) (string, error) { func DecryptText(text string) (string, error) {
str, err := gbase64.Decode([]byte(text)) str, err := gbase64.Decode([]byte(text))

View File

@ -174,4 +174,4 @@
); );
</script> </script>
<style lang="less"></style> <style lang="less"></style>

View File

@ -6,6 +6,7 @@
<!-- 这是系统自动生成的CURD表格你可以将此行注释改为表格的描述 --> <!-- 这是系统自动生成的CURD表格你可以将此行注释改为表格的描述 -->
</n-card> </n-card>
</div> </div>
<BasicForm <BasicForm
@register="register" @register="register"
@submit="reloadTable" @submit="reloadTable"

View File

@ -65,6 +65,36 @@ export const options = ref<Options>({
}); });
export const rules = { export const rules = {
categoryId: {
required: true,
trigger: ['blur', 'input'],
type: 'number',
message: '请输入分类ID',
},
title: {
required: true,
trigger: ['blur', 'input'],
type: 'string',
message: '请输入标题',
},
description: {
required: true,
trigger: ['blur', 'input'],
type: 'string',
message: '请输入描述',
},
content: {
required: true,
trigger: ['blur', 'input'],
type: 'string',
message: '请输入内容',
},
sort: {
required: true,
trigger: ['blur', 'input'],
type: 'number',
message: '请输入排序',
},
}; };
export const schemas = ref<FormSchema[]>([ export const schemas = ref<FormSchema[]>([
@ -171,6 +201,10 @@ export const columns = [
); );
}, },
}, },
{
title: '所在城市',
key: 'cityId',
},
{ {
title: '显示开关', title: '显示开关',
key: 'switch', key: 'switch',
@ -217,6 +251,14 @@ export const columns = [
); );
}, },
}, },
{
title: '创建者',
key: 'createdBy',
},
{
title: '更新者',
key: 'updatedBy',
},
{ {
title: '创建时间', title: '创建时间',
key: 'createdAt', key: 'createdAt',

View File

@ -154,7 +154,7 @@
<QuestionCircleOutlined /> <QuestionCircleOutlined />
</n-icon> </n-icon>
</template> </template>
<span>只会强制覆盖需要生成的文件但不包含SQL文件</span> <span>强制覆盖所有需要生成的代码文件但不包含菜单SQL文件</span>
</n-popover> </n-popover>
</n-space> </n-space>
</n-checkbox-group> </n-checkbox-group>