From 465e48d7bcc355d0ce7d685ea46e831871cfb752 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=9F=E5=B8=85?= <133814250@qq.com> Date: Thu, 27 Jul 2023 17:09:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=81=AF=E8=AE=A2=E9=98=85=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=A4=9A=E4=B8=AA=E6=B6=88=E6=81=AF=E6=94=AF=E6=8C=81?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E6=96=87=E4=BB=B6=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=99=A8=E6=B8=85=E7=A9=BA=E6=93=8D=E4=BD=9C=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=90=8E=E5=8F=B0=E7=94=A8=E6=88=B7=E6=97=B6=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E8=A7=92=E8=89=B2=E9=83=A8=E9=97=A8=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/internal/global/cluster.go | 22 +- .../library/hgrds/pubsub/subscribe.go | 17 + server/internal/logic/admin/cash.go | 5 +- server/internal/logic/admin/dept.go | 33 + server/internal/logic/admin/member.go | 16 +- server/internal/logic/admin/role.go | 41 +- server/internal/model/input/adminin/member.go | 12 +- server/internal/service/admin.go | 443 ++++++------- server/internal/service/sys.go | 584 +++++++++--------- .../components/FileChooser/src/Chooser.vue | 8 +- 10 files changed, 637 insertions(+), 544 deletions(-) diff --git a/server/internal/global/cluster.go b/server/internal/global/cluster.go index 0a2fe8f..d4baf0f 100644 --- a/server/internal/global/cluster.go +++ b/server/internal/global/cluster.go @@ -1,4 +1,4 @@ -// Package consts +// Package global // @Link https://github.com/bufanyun/hotgo // @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> @@ -22,21 +22,15 @@ func SubscribeClusterSync(ctx context.Context) { return } - // 系统配置 - if err := pubsub.Subscribe(consts.ClusterSyncSysconfig, service.SysConfig().ClusterSync); err != nil { + err := pubsub.SubscribeMap(map[string]pubsub.SubHandler{ + consts.ClusterSyncSysconfig: service.SysConfig().ClusterSync, // 系统配置 + consts.ClusterSyncSysBlacklist: service.SysBlacklist().ClusterSync, // 系统黑名单 + consts.ClusterSyncSysSuperAdmin: service.AdminMember().ClusterSyncSuperAdmin, // 超管 + }) + + if err != nil { g.Log().Fatal(ctx, err) } - - // 系统黑名单 - if err := pubsub.Subscribe(consts.ClusterSyncSysBlacklist, service.SysBlacklist().ClusterSync); err != nil { - g.Log().Fatal(ctx, err) - } - - // 超管 - if err := pubsub.Subscribe(consts.ClusterSyncSysSuperAdmin, service.AdminMember().ClusterSyncSuperAdmin); err != nil { - g.Log().Fatal(ctx, err) - } - } // PublishClusterSync 推送集群同步消息,如果没有开启集群部署,则不进行推送 diff --git a/server/internal/library/hgrds/pubsub/subscribe.go b/server/internal/library/hgrds/pubsub/subscribe.go index 6977ca6..525ffb7 100644 --- a/server/internal/library/hgrds/pubsub/subscribe.go +++ b/server/internal/library/hgrds/pubsub/subscribe.go @@ -26,6 +26,23 @@ var subscribes = &subscribeManager{ List: make(map[string]SubHandler), } +// SubscribeMap 订阅多个消息 +func SubscribeMap(channels map[string]SubHandler) (err error) { + if channels == nil || len(channels) == 0 { + return + } + + subscribes.mutex.Lock() + defer subscribes.mutex.Unlock() + + for channel, hr := range channels { + if err = Subscribe(channel, hr); err != nil { + return + } + } + return +} + // Subscribe 订阅消息 func Subscribe(channel string, hr SubHandler) (err error) { subscribes.mutex.Lock() diff --git a/server/internal/logic/admin/cash.go b/server/internal/logic/admin/cash.go index 647819f..15efa4f 100644 --- a/server/internal/logic/admin/cash.go +++ b/server/internal/logic/admin/cash.go @@ -37,6 +37,7 @@ func init() { // View 获取指定提现信息 func (s *sAdminCash) View(ctx context.Context, in *adminin.CashViewInp) (res *adminin.CashViewModel, err error) { + // 这里做了强制限制非超管不允许访问,如果你想通过菜单权限控制,请注释掉以下验证 if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId(ctx)) { err = gerror.New("没有访问权限") return @@ -153,12 +154,12 @@ func (s *sAdminCash) Apply(ctx context.Context, in *adminin.CashApplyInp) (err e } if err = dao.AdminMember.Ctx(ctx).Where("id", in.MemberId).Scan(&member); err != nil { - err = gerror.Newf("获取管理员信息失败:%+v", err.Error()) + err = gerror.Newf("获取用户信息失败:%+v", err.Error()) return } if member == nil { - err = gerror.Newf("获取管理员信息失败") + err = gerror.Newf("获取用户信息失败") return } diff --git a/server/internal/logic/admin/dept.go b/server/internal/logic/admin/dept.go index 68cbda9..15c3485 100644 --- a/server/internal/logic/admin/dept.go +++ b/server/internal/logic/admin/dept.go @@ -20,6 +20,7 @@ import ( "hotgo/internal/service" "hotgo/utility/convert" "hotgo/utility/tree" + "hotgo/utility/validate" ) type sAdminDept struct{} @@ -333,3 +334,35 @@ func (s *sAdminDept) treeList(pid int64, nodes []*entity.AdminDept) (list []*adm } return } + +// VerifyDeptId 验证部门ID +func (s *sAdminDept) VerifyDeptId(ctx context.Context, id int64) (err error) { + var ( + pid int64 = 0 + mb = contexts.GetUser(ctx) + mod = dao.AdminDept.Ctx(ctx).Fields(dao.AdminDept.Columns().Id) + ) + + if mb == nil { + err = gerror.New("用户信息获取失败!") + return + } + + // 非超管只获取下级 + if !service.AdminMember().VerifySuperId(ctx, mb.Id) { + pid = mb.DeptId + mod = mod.WhereLike(dao.AdminDept.Columns().Tree, "%"+tree.GetIdLabel(pid)+"%") + } + + columns, err := mod.Array() + if err != nil { + return err + } + + ids := g.NewVar(columns).Int64s() + if !validate.InSlice(ids, id) { + err = gerror.New("部门ID是无效的") + return + } + return +} diff --git a/server/internal/logic/admin/member.go b/server/internal/logic/admin/member.go index 067e42a..f9893a7 100644 --- a/server/internal/logic/admin/member.go +++ b/server/internal/logic/admin/member.go @@ -401,7 +401,7 @@ func (s *sAdminMember) VerifyUnique(ctx context.Context, in *adminin.VerifyUniqu return } -// Delete 删除 +// Delete 删除用户 func (s *sAdminMember) Delete(ctx context.Context, in *adminin.MemberDeleteInp) (err error) { if s.VerifySuperId(ctx, gconv.Int64(in.Id)) { err = gerror.New("超管账号禁止删除!") @@ -438,7 +438,7 @@ func (s *sAdminMember) Delete(ctx context.Context, in *adminin.MemberDeleteInp) }) } -// Edit 修改/新增 +// Edit 修改/新增用户 func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err error) { opMemberId := contexts.GetUserId(ctx) if opMemberId <= 0 { @@ -464,6 +464,16 @@ func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err return } + // 验证角色ID + if err = service.AdminRole().VerifyRoleId(ctx, in.RoleId); err != nil { + return + } + + // 验证部门ID + if err = service.AdminDept().VerifyDeptId(ctx, in.DeptId); err != nil { + return + } + config, err := service.SysConfig().GetLogin(ctx) if err != nil { return @@ -564,7 +574,7 @@ func (s *sAdminMember) View(ctx context.Context, in *adminin.MemberViewInp) (res return } -// List 获取列表 +// List 获取用户列表 func (s *sAdminMember) List(ctx context.Context, in *adminin.MemberListInp) (list []*adminin.MemberListModel, totalCount int, err error) { mod := s.FilterAuthModel(ctx, contexts.GetUserId(ctx)) cols := dao.AdminMember.Columns() diff --git a/server/internal/logic/admin/role.go b/server/internal/logic/admin/role.go index 6355572..5537630 100644 --- a/server/internal/logic/admin/role.go +++ b/server/internal/logic/admin/role.go @@ -22,6 +22,7 @@ import ( "hotgo/internal/service" "hotgo/utility/convert" "hotgo/utility/tree" + "hotgo/utility/validate" "sort" ) @@ -53,7 +54,7 @@ func (s *sAdminRole) Verify(ctx context.Context, path, method string) bool { ok, err := casbin.Enforcer.Enforce(user.RoleKey, path, method) if err != nil { - g.Log().Infof(ctx, "admin Verify Enforce err:%+v", err) + g.Log().Infof(ctx, "admin Verify Enforce err:%+v", err) return false } return ok @@ -91,11 +92,7 @@ func (s *sAdminRole) List(ctx context.Context, in *adminin.RoleListInp) (res *ad // GetName 获取指定角色的名称 func (s *sAdminRole) GetName(ctx context.Context, id int64) (name string, err error) { - r, err := dao.AdminRole.Ctx(ctx). - Fields("name"). - WherePri(id). - Order("id desc"). - Value() + r, err := dao.AdminRole.Ctx(ctx).Fields("name").WherePri(id).Order("id desc").Value() if err != nil { err = gerror.Wrap(err, consts.ErrorORM) return @@ -313,3 +310,35 @@ func (s *sAdminRole) treeList(pid int64, nodes []*entity.AdminRole) (list []*adm } return } + +// VerifyRoleId 验证角色ID +func (s *sAdminRole) VerifyRoleId(ctx context.Context, id int64) (err error) { + var ( + pid int64 = 0 + mb = contexts.GetUser(ctx) + mod = dao.AdminRole.Ctx(ctx).Fields(dao.AdminRole.Columns().Id) + ) + + if mb == nil { + err = gerror.New("用户信息获取失败!") + return + } + + // 非超管只获取下级 + if !service.AdminMember().VerifySuperId(ctx, mb.Id) { + pid = mb.RoleId + mod = mod.WhereLike(dao.AdminRole.Columns().Tree, "%"+tree.GetIdLabel(pid)+"%") + } + + columns, err := mod.Array() + if err != nil { + return err + } + + ids := g.NewVar(columns).Int64s() + if !validate.InSlice(ids, id) { + err = gerror.New("角色ID是无效的") + return + } + return +} diff --git a/server/internal/model/input/adminin/member.go b/server/internal/model/input/adminin/member.go index 7533220..28162f5 100644 --- a/server/internal/model/input/adminin/member.go +++ b/server/internal/model/input/adminin/member.go @@ -41,6 +41,7 @@ type MemberUpdateMobileInp struct { type GetIdByCodeInp struct { Code string `json:"code"` } + type GetIdByCodeModel struct { Id int64 } @@ -49,6 +50,7 @@ type GetIdByCodeModel struct { type MemberProfileInp struct { Id int64 } + type MemberProfileModel struct { PostGroup string `json:"postGroup" dc:"岗位名称"` RoleGroup string `json:"roleGroup" dc:"角色名称"` @@ -109,7 +111,7 @@ type LoginMemberInfoModel struct { *MemberLoginStatModel } -// MemberEditInp 修改/新增管理员 +// MemberEditInp 修改用户 type MemberEditInp struct { Id int64 `json:"id" dc:"管理员ID"` RoleId int64 `json:"roleId" v:"required#角色不能为空" dc:"角色ID"` @@ -133,6 +135,7 @@ type MemberEditInp struct { Status int `json:"status" dc:"状态"` } +// MemberAddInp 新增用户 type MemberAddInp struct { *MemberEditInp Salt string `json:"salt" dc:"密码盐"` @@ -162,13 +165,14 @@ type VerifyUniqueInp struct { Where g.Map } -// MemberDeleteInp 删除字典类型 +// MemberDeleteInp 删除用户 type MemberDeleteInp struct { Id interface{} `json:"id" v:"required#用户ID不能为空" dc:"用户ID"` } + type MemberDeleteModel struct{} -// MemberViewInp 获取信息 +// MemberViewInp 获取用户信息 type MemberViewInp struct { Id int64 `json:"id" dc:"用户ID"` } @@ -179,7 +183,7 @@ type MemberViewModel struct { RoleName string `json:"roleName" dc:"所属角色"` } -// MemberListInp 获取列表 +// MemberListInp 获取用户列表 type MemberListInp struct { form.PageReq form.StatusReq diff --git a/server/internal/service/admin.go b/server/internal/service/admin.go index bda4c71..4133970 100644 --- a/server/internal/service/admin.go +++ b/server/internal/service/admin.go @@ -19,155 +19,6 @@ import ( ) type ( - IAdminRole interface { - // Verify 验证权限 - Verify(ctx context.Context, path, method string) bool - // List 获取列表 - List(ctx context.Context, in *adminin.RoleListInp) (res *adminin.RoleListModel, totalCount int, err error) - // GetName 获取指定角色的名称 - GetName(ctx context.Context, id int64) (name string, err error) - // GetMemberList 获取指定用户的岗位列表 - GetMemberList(ctx context.Context, id int64) (list []*adminin.RoleListModel, err error) - // GetPermissions 更改角色菜单权限 - GetPermissions(ctx context.Context, in *adminin.GetPermissionsInp) (res *adminin.GetPermissionsModel, err error) - // UpdatePermissions 更改角色菜单权限 - 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 获取指定提现信息 - View(ctx context.Context, in *adminin.CashViewInp) (res *adminin.CashViewModel, err error) - // List 获取列表 - List(ctx context.Context, in *adminin.CashListInp) (list []*adminin.CashListModel, totalCount int, err error) - // Apply 申请提现 - Apply(ctx context.Context, in *adminin.CashApplyInp) (err error) - // Payment 提现打款处理 - Payment(ctx context.Context, in *adminin.CashPaymentInp) (err error) - } - IAdminCreditsLog interface { - // Model 资产变动ORM模型 - Model(ctx context.Context, option ...*handler.Option) *gdb.Model - // SaveBalance 更新余额 - SaveBalance(ctx context.Context, in *adminin.CreditsLogSaveBalanceInp) (res *adminin.CreditsLogSaveBalanceModel, err error) - // SaveIntegral 更新积分 - SaveIntegral(ctx context.Context, in *adminin.CreditsLogSaveIntegralInp) (res *adminin.CreditsLogSaveIntegralModel, err error) - // List 获取资产变动列表 - List(ctx context.Context, in *adminin.CreditsLogListInp) (list []*adminin.CreditsLogListModel, totalCount int, err error) - // Export 导出资产变动 - Export(ctx context.Context, in *adminin.CreditsLogListInp) (err error) - } - IAdminMemberPost interface { - // UpdatePostIds 更新用户岗位 - UpdatePostIds(ctx context.Context, memberId int64, postIds []int64) (err error) - } - IAdminMenu interface { - // Delete 删除 - Delete(ctx context.Context, in *adminin.MenuDeleteInp) (err error) - // VerifyUnique 验证菜单唯一属性 - VerifyUnique(ctx context.Context, in *adminin.VerifyUniqueInp) (err error) - // Edit 修改/新增 - Edit(ctx context.Context, in *adminin.MenuEditInp) (err error) - // List 获取菜单列表 - List(ctx context.Context, in *adminin.MenuListInp) (res *adminin.MenuListModel, err error) - // GetMenuList 获取菜单列表 - GetMenuList(ctx context.Context, memberId int64) (res *role.DynamicRes, err error) - // LoginPermissions 获取登录成功后的细粒度权限 - LoginPermissions(ctx context.Context, memberId int64) (lists adminin.MemberLoginPermissions, err error) - } - IAdminMonitor interface { - // StartMonitor 启动服务监控 - StartMonitor(ctx context.Context) - // GetMeta 获取监控元数据 - GetMeta(ctx context.Context) *model.MonitorData - } - IAdminPost interface { - // Delete 删除 - Delete(ctx context.Context, in *adminin.PostDeleteInp) (err error) - // VerifyUnique 验证部门唯一属性 - VerifyUnique(ctx context.Context, in *adminin.VerifyUniqueInp) (err error) - // Edit 修改/新增 - Edit(ctx context.Context, in *adminin.PostEditInp) (err error) - // MaxSort 最大排序 - MaxSort(ctx context.Context, in *adminin.PostMaxSortInp) (res *adminin.PostMaxSortModel, err error) - // View 获取指定岗位信息 - View(ctx context.Context, in *adminin.PostViewInp) (res *adminin.PostViewModel, err error) - // List 获取列表 - List(ctx context.Context, in *adminin.PostListInp) (list []*adminin.PostListModel, totalCount int, err error) - // GetMemberByStartName 获取指定用户的第一岗位 - GetMemberByStartName(ctx context.Context, memberId int64) (name string, err error) - // Status 更新状态 - Status(ctx context.Context, in *adminin.PostStatusInp) (err error) - } - IAdminDept interface { - // Delete 删除 - Delete(ctx context.Context, in *adminin.DeptDeleteInp) (err error) - // VerifyUnique 验证部门唯一属性 - VerifyUnique(ctx context.Context, in *adminin.VerifyUniqueInp) (err error) - // Edit 修改/新增 - Edit(ctx context.Context, in *adminin.DeptEditInp) (err error) - // Status 更新部门状态 - Status(ctx context.Context, in *adminin.DeptStatusInp) (err error) - // MaxSort 最大排序 - MaxSort(ctx context.Context, in *adminin.DeptMaxSortInp) (res *adminin.DeptMaxSortModel, err error) - // View 获取指定部门信息 - View(ctx context.Context, in *adminin.DeptViewInp) (res *adminin.DeptViewModel, err error) - // Option 选项 - Option(ctx context.Context, in *adminin.DeptOptionInp) (res *adminin.DeptOptionModel, totalCount int, err error) - // List 获取列表 - List(ctx context.Context, in *adminin.DeptListInp) (res *adminin.DeptListModel, err error) - // GetName 获取部门名称 - GetName(ctx context.Context, id int64) (name string, err error) - } - IAdminMember interface { - // AddBalance 增加余额 - AddBalance(ctx context.Context, in *adminin.MemberAddBalanceInp) (err error) - // AddIntegral 增加积分 - AddIntegral(ctx context.Context, in *adminin.MemberAddIntegralInp) (err error) - // UpdateCash 修改提现信息 - UpdateCash(ctx context.Context, in *adminin.MemberUpdateCashInp) (err error) - // UpdateEmail 换绑邮箱 - UpdateEmail(ctx context.Context, in *adminin.MemberUpdateEmailInp) (err error) - // UpdateMobile 换绑手机号 - UpdateMobile(ctx context.Context, in *adminin.MemberUpdateMobileInp) (err error) - // UpdateProfile 更新用户资料 - UpdateProfile(ctx context.Context, in *adminin.MemberUpdateProfileInp) (err error) - // UpdatePwd 修改登录密码 - UpdatePwd(ctx context.Context, in *adminin.MemberUpdatePwdInp) (err error) - // ResetPwd 重置密码 - ResetPwd(ctx context.Context, in *adminin.MemberResetPwdInp) (err error) - // VerifyUnique 验证管理员唯一属性 - VerifyUnique(ctx context.Context, in *adminin.VerifyUniqueInp) (err error) - // Delete 删除 - Delete(ctx context.Context, in *adminin.MemberDeleteInp) (err error) - // Edit 修改/新增 - Edit(ctx context.Context, in *adminin.MemberEditInp) (err error) - // View 获取用户信息 - View(ctx context.Context, in *adminin.MemberViewInp) (res *adminin.MemberViewModel, err error) - // List 获取列表 - List(ctx context.Context, in *adminin.MemberListInp) (list []*adminin.MemberListModel, totalCount int, err error) - // Status 更新状态 - Status(ctx context.Context, in *adminin.MemberStatusInp) (err error) - // GenTree 生成关系树 - GenTree(ctx context.Context, pid int64) (level int, newTree string, err error) - // LoginMemberInfo 获取登录用户信息 - LoginMemberInfo(ctx context.Context) (res *adminin.LoginMemberInfoModel, err error) - // MemberLoginStat 用户登录统计 - MemberLoginStat(ctx context.Context, in *adminin.MemberLoginStatInp) (res *adminin.MemberLoginStatModel, err error) - // GetIdByCode 通过邀请码获取用户ID - GetIdByCode(ctx context.Context, in *adminin.GetIdByCodeInp) (res *adminin.GetIdByCodeModel, err error) - // Select 获取可选的用户选项 - Select(ctx context.Context, in *adminin.MemberSelectInp) (res []*adminin.MemberSelectModel, err error) - // VerifySuperId 验证是否为超管 - VerifySuperId(ctx context.Context, verifyId int64) bool - // LoadSuperAdmin 加载超管数据 - LoadSuperAdmin(ctx context.Context) - // ClusterSyncSuperAdmin 集群同步 - ClusterSyncSuperAdmin(ctx context.Context, message *gredis.Message) - FilterAuthModel(ctx context.Context, memberId int64) *gdb.Model - } IAdminNotice interface { // Model Orm模型 Model(ctx context.Context, option ...*handler.Option) *gdb.Model @@ -218,6 +69,24 @@ type ( // Status 更新充值订单状态 Status(ctx context.Context, in *adminin.OrderStatusInp) (err error) } + IAdminPost interface { + // Delete 删除 + Delete(ctx context.Context, in *adminin.PostDeleteInp) (err error) + // VerifyUnique 验证部门唯一属性 + VerifyUnique(ctx context.Context, in *adminin.VerifyUniqueInp) (err error) + // Edit 修改/新增 + Edit(ctx context.Context, in *adminin.PostEditInp) (err error) + // MaxSort 最大排序 + MaxSort(ctx context.Context, in *adminin.PostMaxSortInp) (res *adminin.PostMaxSortModel, err error) + // View 获取指定岗位信息 + View(ctx context.Context, in *adminin.PostViewInp) (res *adminin.PostViewModel, err error) + // List 获取列表 + List(ctx context.Context, in *adminin.PostListInp) (list []*adminin.PostListModel, totalCount int, err error) + // GetMemberByStartName 获取指定用户的第一岗位 + GetMemberByStartName(ctx context.Context, memberId int64) (name string, err error) + // Status 更新状态 + Status(ctx context.Context, in *adminin.PostStatusInp) (err error) + } IAdminSite interface { // Register 账号注册 Register(ctx context.Context, in *adminin.RegisterInp) (err error) @@ -226,67 +95,159 @@ type ( // MobileLogin 手机号登录 MobileLogin(ctx context.Context, in *adminin.MobileLoginInp) (res *adminin.LoginModel, err error) } + IAdminMember interface { + // AddBalance 增加余额 + AddBalance(ctx context.Context, in *adminin.MemberAddBalanceInp) (err error) + // AddIntegral 增加积分 + AddIntegral(ctx context.Context, in *adminin.MemberAddIntegralInp) (err error) + // UpdateCash 修改提现信息 + UpdateCash(ctx context.Context, in *adminin.MemberUpdateCashInp) (err error) + // UpdateEmail 换绑邮箱 + UpdateEmail(ctx context.Context, in *adminin.MemberUpdateEmailInp) (err error) + // UpdateMobile 换绑手机号 + UpdateMobile(ctx context.Context, in *adminin.MemberUpdateMobileInp) (err error) + // UpdateProfile 更新用户资料 + UpdateProfile(ctx context.Context, in *adminin.MemberUpdateProfileInp) (err error) + // UpdatePwd 修改登录密码 + UpdatePwd(ctx context.Context, in *adminin.MemberUpdatePwdInp) (err error) + // ResetPwd 重置密码 + ResetPwd(ctx context.Context, in *adminin.MemberResetPwdInp) (err error) + // VerifyUnique 验证管理员唯一属性 + VerifyUnique(ctx context.Context, in *adminin.VerifyUniqueInp) (err error) + // Delete 删除用户 + Delete(ctx context.Context, in *adminin.MemberDeleteInp) (err error) + // Edit 修改/新增用户 + Edit(ctx context.Context, in *adminin.MemberEditInp) (err error) + // View 获取用户信息 + View(ctx context.Context, in *adminin.MemberViewInp) (res *adminin.MemberViewModel, err error) + // List 获取用户列表 + List(ctx context.Context, in *adminin.MemberListInp) (list []*adminin.MemberListModel, totalCount int, err error) + // Status 更新状态 + Status(ctx context.Context, in *adminin.MemberStatusInp) (err error) + // GenTree 生成关系树 + GenTree(ctx context.Context, pid int64) (level int, newTree string, err error) + // LoginMemberInfo 获取登录用户信息 + LoginMemberInfo(ctx context.Context) (res *adminin.LoginMemberInfoModel, err error) + // MemberLoginStat 用户登录统计 + MemberLoginStat(ctx context.Context, in *adminin.MemberLoginStatInp) (res *adminin.MemberLoginStatModel, err error) + // GetIdByCode 通过邀请码获取用户ID + GetIdByCode(ctx context.Context, in *adminin.GetIdByCodeInp) (res *adminin.GetIdByCodeModel, err error) + // Select 获取可选的用户选项 + Select(ctx context.Context, in *adminin.MemberSelectInp) (res []*adminin.MemberSelectModel, err error) + // VerifySuperId 验证是否为超管 + VerifySuperId(ctx context.Context, verifyId int64) bool + // LoadSuperAdmin 加载超管数据 + LoadSuperAdmin(ctx context.Context) + // ClusterSyncSuperAdmin 集群同步 + ClusterSyncSuperAdmin(ctx context.Context, message *gredis.Message) + // FilterAuthModel 过滤查询权限,如果不是超管则排除掉自己 + FilterAuthModel(ctx context.Context, memberId int64) *gdb.Model + } + IAdminCreditsLog interface { + // Model 资产变动ORM模型 + Model(ctx context.Context, option ...*handler.Option) *gdb.Model + // SaveBalance 更新余额 + SaveBalance(ctx context.Context, in *adminin.CreditsLogSaveBalanceInp) (res *adminin.CreditsLogSaveBalanceModel, err error) + // SaveIntegral 更新积分 + SaveIntegral(ctx context.Context, in *adminin.CreditsLogSaveIntegralInp) (res *adminin.CreditsLogSaveIntegralModel, err error) + // List 获取资产变动列表 + List(ctx context.Context, in *adminin.CreditsLogListInp) (list []*adminin.CreditsLogListModel, totalCount int, err error) + // Export 导出资产变动 + Export(ctx context.Context, in *adminin.CreditsLogListInp) (err error) + } + IAdminDept interface { + // Delete 删除 + Delete(ctx context.Context, in *adminin.DeptDeleteInp) (err error) + // VerifyUnique 验证部门唯一属性 + VerifyUnique(ctx context.Context, in *adminin.VerifyUniqueInp) (err error) + // Edit 修改/新增 + Edit(ctx context.Context, in *adminin.DeptEditInp) (err error) + // Status 更新部门状态 + Status(ctx context.Context, in *adminin.DeptStatusInp) (err error) + // MaxSort 最大排序 + MaxSort(ctx context.Context, in *adminin.DeptMaxSortInp) (res *adminin.DeptMaxSortModel, err error) + // View 获取指定部门信息 + View(ctx context.Context, in *adminin.DeptViewInp) (res *adminin.DeptViewModel, err error) + // Option 选项 + Option(ctx context.Context, in *adminin.DeptOptionInp) (res *adminin.DeptOptionModel, totalCount int, err error) + // List 获取列表 + List(ctx context.Context, in *adminin.DeptListInp) (res *adminin.DeptListModel, err error) + // GetName 获取部门名称 + GetName(ctx context.Context, id int64) (name string, err error) + // VerifyDeptId 验证用户权限内的部门ID + VerifyDeptId(ctx context.Context, id int64) (err error) + } + IAdminMemberPost interface { + // UpdatePostIds 更新用户岗位 + UpdatePostIds(ctx context.Context, memberId int64, postIds []int64) (err error) + } + IAdminMenu interface { + // Delete 删除 + Delete(ctx context.Context, in *adminin.MenuDeleteInp) (err error) + // VerifyUnique 验证菜单唯一属性 + VerifyUnique(ctx context.Context, in *adminin.VerifyUniqueInp) (err error) + // Edit 修改/新增 + Edit(ctx context.Context, in *adminin.MenuEditInp) (err error) + // List 获取菜单列表 + List(ctx context.Context, in *adminin.MenuListInp) (res *adminin.MenuListModel, err error) + // GetMenuList 获取菜单列表 + GetMenuList(ctx context.Context, memberId int64) (res *role.DynamicRes, err error) + // LoginPermissions 获取登录成功后的细粒度权限 + LoginPermissions(ctx context.Context, memberId int64) (lists adminin.MemberLoginPermissions, err error) + } + IAdminMonitor interface { + // StartMonitor 启动服务监控 + StartMonitor(ctx context.Context) + // GetMeta 获取监控元数据 + GetMeta(ctx context.Context) *model.MonitorData + } + IAdminRole interface { + // Verify 验证权限 + Verify(ctx context.Context, path, method string) bool + // List 获取列表 + List(ctx context.Context, in *adminin.RoleListInp) (res *adminin.RoleListModel, totalCount int, err error) + // GetName 获取指定角色的名称 + GetName(ctx context.Context, id int64) (name string, err error) + // GetMemberList 获取指定用户的岗位列表 + GetMemberList(ctx context.Context, id int64) (list []*adminin.RoleListModel, err error) + // GetPermissions 更改角色菜单权限 + GetPermissions(ctx context.Context, in *adminin.GetPermissionsInp) (res *adminin.GetPermissionsModel, err error) + // UpdatePermissions 更改角色菜单权限 + 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) + // VerifyRoleId 验证用户权限内的角色ID + VerifyRoleId(ctx context.Context, id int64) (err error) + } + IAdminCash interface { + // View 获取指定提现信息 + View(ctx context.Context, in *adminin.CashViewInp) (res *adminin.CashViewModel, err error) + // List 获取列表 + List(ctx context.Context, in *adminin.CashListInp) (list []*adminin.CashListModel, totalCount int, err error) + // Apply 申请提现 + Apply(ctx context.Context, in *adminin.CashApplyInp) (err error) + // Payment 提现打款处理 + Payment(ctx context.Context, in *adminin.CashPaymentInp) (err error) + } ) var ( - localAdminCash IAdminCash - localAdminCreditsLog IAdminCreditsLog + localAdminOrder IAdminOrder + localAdminPost IAdminPost + localAdminSite IAdminSite + localAdminMember IAdminMember + localAdminNotice IAdminNotice + localAdminDept IAdminDept localAdminMemberPost IAdminMemberPost localAdminMenu IAdminMenu localAdminMonitor IAdminMonitor - localAdminPost IAdminPost localAdminRole IAdminRole - localAdminDept IAdminDept - localAdminMember IAdminMember - localAdminNotice IAdminNotice - localAdminOrder IAdminOrder - localAdminSite IAdminSite + localAdminCash IAdminCash + localAdminCreditsLog IAdminCreditsLog ) -func AdminMonitor() IAdminMonitor { - if localAdminMonitor == nil { - panic("implement not found for interface IAdminMonitor, forgot register?") - } - return localAdminMonitor -} - -func RegisterAdminMonitor(i IAdminMonitor) { - localAdminMonitor = i -} - -func AdminPost() IAdminPost { - if localAdminPost == nil { - panic("implement not found for interface IAdminPost, forgot register?") - } - return localAdminPost -} - -func RegisterAdminPost(i IAdminPost) { - localAdminPost = i -} - -func AdminRole() IAdminRole { - if localAdminRole == nil { - panic("implement not found for interface IAdminRole, forgot register?") - } - return localAdminRole -} - -func RegisterAdminRole(i IAdminRole) { - localAdminRole = 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 AdminCreditsLog() IAdminCreditsLog { if localAdminCreditsLog == nil { panic("implement not found for interface IAdminCreditsLog, forgot register?") @@ -298,6 +259,17 @@ func RegisterAdminCreditsLog(i IAdminCreditsLog) { localAdminCreditsLog = i } +func AdminDept() IAdminDept { + if localAdminDept == nil { + panic("implement not found for interface IAdminDept, forgot register?") + } + return localAdminDept +} + +func RegisterAdminDept(i IAdminDept) { + localAdminDept = i +} + func AdminMemberPost() IAdminMemberPost { if localAdminMemberPost == nil { panic("implement not found for interface IAdminMemberPost, forgot register?") @@ -320,37 +292,37 @@ func RegisterAdminMenu(i IAdminMenu) { localAdminMenu = i } -func AdminSite() IAdminSite { - if localAdminSite == nil { - panic("implement not found for interface IAdminSite, forgot register?") +func AdminMonitor() IAdminMonitor { + if localAdminMonitor == nil { + panic("implement not found for interface IAdminMonitor, forgot register?") } - return localAdminSite + return localAdminMonitor } -func RegisterAdminSite(i IAdminSite) { - localAdminSite = i +func RegisterAdminMonitor(i IAdminMonitor) { + localAdminMonitor = i } -func AdminDept() IAdminDept { - if localAdminDept == nil { - panic("implement not found for interface IAdminDept, forgot register?") +func AdminRole() IAdminRole { + if localAdminRole == nil { + panic("implement not found for interface IAdminRole, forgot register?") } - return localAdminDept + return localAdminRole } -func RegisterAdminDept(i IAdminDept) { - localAdminDept = i +func RegisterAdminRole(i IAdminRole) { + localAdminRole = i } -func AdminMember() IAdminMember { - if localAdminMember == nil { - panic("implement not found for interface IAdminMember, forgot register?") +func AdminCash() IAdminCash { + if localAdminCash == nil { + panic("implement not found for interface IAdminCash, forgot register?") } - return localAdminMember + return localAdminCash } -func RegisterAdminMember(i IAdminMember) { - localAdminMember = i +func RegisterAdminCash(i IAdminCash) { + localAdminCash = i } func AdminNotice() IAdminNotice { @@ -374,3 +346,36 @@ func AdminOrder() IAdminOrder { func RegisterAdminOrder(i IAdminOrder) { localAdminOrder = i } + +func AdminPost() IAdminPost { + if localAdminPost == nil { + panic("implement not found for interface IAdminPost, forgot register?") + } + return localAdminPost +} + +func RegisterAdminPost(i IAdminPost) { + localAdminPost = i +} + +func AdminSite() IAdminSite { + if localAdminSite == nil { + panic("implement not found for interface IAdminSite, forgot register?") + } + return localAdminSite +} + +func RegisterAdminSite(i IAdminSite) { + localAdminSite = i +} + +func AdminMember() IAdminMember { + if localAdminMember == nil { + panic("implement not found for interface IAdminMember, forgot register?") + } + return localAdminMember +} + +func RegisterAdminMember(i IAdminMember) { + localAdminMember = i +} diff --git a/server/internal/service/sys.go b/server/internal/service/sys.go index 5f19b28..932b227 100644 --- a/server/internal/service/sys.go +++ b/server/internal/service/sys.go @@ -18,94 +18,6 @@ import ( ) type ( - ISysLoginLog interface { - // Model 登录日志Orm模型 - Model(ctx context.Context) *gdb.Model - // List 获取登录日志列表 - List(ctx context.Context, in *sysin.LoginLogListInp) (list []*sysin.LoginLogListModel, totalCount int, err error) - // Export 导出登录日志 - Export(ctx context.Context, in *sysin.LoginLogListInp) (err error) - // Delete 删除登录日志 - Delete(ctx context.Context, in *sysin.LoginLogDeleteInp) (err error) - // View 获取登录日志指定信息 - View(ctx context.Context, in *sysin.LoginLogViewInp) (res *sysin.LoginLogViewModel, err error) - // Push 推送登录日志 - Push(ctx context.Context, in *sysin.LoginLogPushInp) - // RealWrite 真实写入 - RealWrite(ctx context.Context, models entity.SysLoginLog) (err error) - } - ISysAddons interface { - // List 获取列表 - List(ctx context.Context, in *sysin.AddonsListInp) (list []*sysin.AddonsListModel, totalCount int, err error) - // Selects 选项 - Selects(ctx context.Context, in *sysin.AddonsSelectsInp) (res *sysin.AddonsSelectsModel, err error) - // Build 提交生成 - Build(ctx context.Context, in *sysin.AddonsBuildInp) (err error) - // Install 安装模块 - Install(ctx context.Context, in *sysin.AddonsInstallInp) (err error) - // Upgrade 更新模块 - Upgrade(ctx context.Context, in *sysin.AddonsUpgradeInp) (err error) - // UnInstall 卸载模块 - UnInstall(ctx context.Context, in *sysin.AddonsUnInstallInp) (err error) - } - ISysAddonsConfig interface { - // GetConfigByGroup 获取指定分组的配置 - GetConfigByGroup(ctx context.Context, in *sysin.GetAddonsConfigInp) (res *sysin.GetAddonsConfigModel, err error) - // ConversionType 转换类型 - ConversionType(ctx context.Context, models *entity.SysAddonsConfig) (value interface{}, err error) - // UpdateConfigByGroup 更新指定分组的配置 - UpdateConfigByGroup(ctx context.Context, in *sysin.UpdateAddonsConfigInp) (err error) - } - ISysCurdDemo interface { - // Model 生成演示ORM模型 - Model(ctx context.Context, option ...*handler.Option) *gdb.Model - // List 获取生成演示列表 - List(ctx context.Context, in *sysin.CurdDemoListInp) (list []*sysin.CurdDemoListModel, totalCount int, err error) - // Export 导出生成演示 - Export(ctx context.Context, in *sysin.CurdDemoListInp) (err error) - // Edit 修改/新增生成演示 - Edit(ctx context.Context, in *sysin.CurdDemoEditInp) (err error) - // Delete 删除生成演示 - Delete(ctx context.Context, in *sysin.CurdDemoDeleteInp) (err error) - // MaxSort 获取生成演示最大排序 - MaxSort(ctx context.Context, in *sysin.CurdDemoMaxSortInp) (res *sysin.CurdDemoMaxSortModel, err error) - // View 获取生成演示指定信息 - View(ctx context.Context, in *sysin.CurdDemoViewInp) (res *sysin.CurdDemoViewModel, err error) - // Status 更新生成演示状态 - Status(ctx context.Context, in *sysin.CurdDemoStatusInp) (err error) - // Switch 更新生成演示开关 - Switch(ctx context.Context, in *sysin.CurdDemoSwitchInp) (err error) - } - ISysDictData interface { - // Delete 删除 - Delete(ctx context.Context, in *sysin.DictDataDeleteInp) error - // Edit 修改/新增 - Edit(ctx context.Context, in *sysin.DictDataEditInp) (err error) - // List 获取列表 - List(ctx context.Context, in *sysin.DictDataListInp) (list []*sysin.DictDataListModel, totalCount int, err error) - // Select 获取列表 - Select(ctx context.Context, in *sysin.DataSelectInp) (list sysin.DataSelectModel, err error) - } - ISysEmsLog interface { - // Delete 删除 - Delete(ctx context.Context, in *sysin.EmsLogDeleteInp) (err error) - // Edit 修改/新增 - Edit(ctx context.Context, in *sysin.EmsLogEditInp) (err error) - // Status 更新部门状态 - Status(ctx context.Context, in *sysin.EmsLogStatusInp) (err error) - // View 获取指定字典类型信息 - View(ctx context.Context, in *sysin.EmsLogViewInp) (res *sysin.EmsLogViewModel, err error) - // List 获取列表 - List(ctx context.Context, in *sysin.EmsLogListInp) (list []*sysin.EmsLogListModel, totalCount int, err error) - // Send 发送邮件 - Send(ctx context.Context, in *sysin.SendEmsInp) (err error) - // GetTemplate 获取指定邮件模板 - GetTemplate(ctx context.Context, template string, config *model.EmailConfig) (val string, err error) - // AllowSend 是否允许发送 - AllowSend(ctx context.Context, models *entity.SysEmsLog, config *model.EmailConfig) (err error) - // VerifyCode 效验验证码 - VerifyCode(ctx context.Context, in *sysin.VerifyEmsCodeInp) (err error) - } ISysConfig interface { // InitConfig 初始化系统配置 InitConfig(ctx context.Context) @@ -148,24 +60,6 @@ type ( // ClusterSync 集群同步 ClusterSync(ctx context.Context, message *gredis.Message) } - ISysServeLicense interface { - // Model 服务许可证ORM模型 - Model(ctx context.Context, option ...*handler.Option) *gdb.Model - // List 获取服务许可证列表 - List(ctx context.Context, in *sysin.ServeLicenseListInp) (list []*sysin.ServeLicenseListModel, totalCount int, err error) - // Export 导出服务许可证 - Export(ctx context.Context, in *sysin.ServeLicenseListInp) (err error) - // Edit 修改/新增服务许可证 - Edit(ctx context.Context, in *sysin.ServeLicenseEditInp) (err error) - // Delete 删除服务许可证 - Delete(ctx context.Context, in *sysin.ServeLicenseDeleteInp) (err error) - // View 获取服务许可证指定信息 - View(ctx context.Context, in *sysin.ServeLicenseViewInp) (res *sysin.ServeLicenseViewModel, err error) - // Status 更新服务许可证状态 - Status(ctx context.Context, in *sysin.ServeLicenseStatusInp) (err error) - // AssignRouter 分配服务许可证路由 - AssignRouter(ctx context.Context, in *sysin.ServeLicenseAssignRouterInp) (err error) - } ISysDictType interface { // Tree 树 Tree(ctx context.Context) (list []*sysin.DictTypeTree, err error) @@ -190,25 +84,65 @@ type ( // RealWrite 真实写入 RealWrite(ctx context.Context, models entity.SysServeLog) (err error) } - ISysSmsLog interface { - // Delete 删除 - Delete(ctx context.Context, in *sysin.SmsLogDeleteInp) (err error) - // Edit 修改/新增 - Edit(ctx context.Context, in *sysin.SmsLogEditInp) (err error) - // Status 更新短信状态 - Status(ctx context.Context, in *sysin.SmsLogStatusInp) (err error) - // View 获取指定字典类型信息 - View(ctx context.Context, in *sysin.SmsLogViewInp) (res *sysin.SmsLogViewModel, err error) + ISysAddons interface { // List 获取列表 - List(ctx context.Context, in *sysin.SmsLogListInp) (list []*sysin.SmsLogListModel, totalCount int, err error) - // SendCode 发送验证码 - SendCode(ctx context.Context, in *sysin.SendCodeInp) (err error) - // GetTemplate 获取指定短信模板 - GetTemplate(ctx context.Context, template string, config *model.SmsConfig) (val string, err error) - // AllowSend 是否允许发送 - AllowSend(ctx context.Context, models *entity.SysSmsLog, config *model.SmsConfig) (err error) - // VerifyCode 效验验证码 - VerifyCode(ctx context.Context, in *sysin.VerifyCodeInp) (err error) + List(ctx context.Context, in *sysin.AddonsListInp) (list []*sysin.AddonsListModel, totalCount int, err error) + // Selects 选项 + Selects(ctx context.Context, in *sysin.AddonsSelectsInp) (res *sysin.AddonsSelectsModel, err error) + // Build 提交生成 + Build(ctx context.Context, in *sysin.AddonsBuildInp) (err error) + // Install 安装模块 + Install(ctx context.Context, in *sysin.AddonsInstallInp) (err error) + // Upgrade 更新模块 + Upgrade(ctx context.Context, in *sysin.AddonsUpgradeInp) (err error) + // UnInstall 卸载模块 + UnInstall(ctx context.Context, in *sysin.AddonsUnInstallInp) (err error) + } + ISysAddonsConfig interface { + // GetConfigByGroup 获取指定分组的配置 + GetConfigByGroup(ctx context.Context, in *sysin.GetAddonsConfigInp) (res *sysin.GetAddonsConfigModel, err error) + // ConversionType 转换类型 + ConversionType(ctx context.Context, models *entity.SysAddonsConfig) (value interface{}, err error) + // UpdateConfigByGroup 更新指定分组的配置 + UpdateConfigByGroup(ctx context.Context, in *sysin.UpdateAddonsConfigInp) (err error) + } + ISysBlacklist interface { + // Delete 删除 + Delete(ctx context.Context, in *sysin.BlacklistDeleteInp) (err error) + // Edit 修改/新增 + Edit(ctx context.Context, in *sysin.BlacklistEditInp) (err error) + // Status 更新部门状态 + Status(ctx context.Context, in *sysin.BlacklistStatusInp) (err error) + // View 获取指定字典类型信息 + View(ctx context.Context, in *sysin.BlacklistViewInp) (res *sysin.BlacklistViewModel, err error) + // List 获取列表 + List(ctx context.Context, in *sysin.BlacklistListInp) (list []*sysin.BlacklistListModel, totalCount int, err error) + // VariableLoad 变化加载 + VariableLoad(ctx context.Context, err error) + // Load 加载黑名单 + Load(ctx context.Context) + // VerifyRequest 验证请求的访问IP是否在黑名单,如果存在则返回错误 + VerifyRequest(r *ghttp.Request) (err error) + // ClusterSync 集群同步 + ClusterSync(ctx context.Context, message *gredis.Message) + } + ISysServeLicense interface { + // Model 服务许可证ORM模型 + Model(ctx context.Context, option ...*handler.Option) *gdb.Model + // List 获取服务许可证列表 + List(ctx context.Context, in *sysin.ServeLicenseListInp) (list []*sysin.ServeLicenseListModel, totalCount int, err error) + // Export 导出服务许可证 + Export(ctx context.Context, in *sysin.ServeLicenseListInp) (err error) + // Edit 修改/新增服务许可证 + Edit(ctx context.Context, in *sysin.ServeLicenseEditInp) (err error) + // Delete 删除服务许可证 + Delete(ctx context.Context, in *sysin.ServeLicenseDeleteInp) (err error) + // View 获取服务许可证指定信息 + View(ctx context.Context, in *sysin.ServeLicenseViewInp) (res *sysin.ServeLicenseViewModel, err error) + // Status 更新服务许可证状态 + Status(ctx context.Context, in *sysin.ServeLicenseStatusInp) (err error) + // AssignRouter 分配服务许可证路由 + AssignRouter(ctx context.Context, in *sysin.ServeLicenseAssignRouterInp) (err error) } ISysLog interface { // Export 导出 @@ -248,37 +182,25 @@ type ( // Select 省市区选项 Select(ctx context.Context, in *sysin.ProvincesSelectInp) (res *sysin.ProvincesSelectModel, err error) } - ISysAttachment interface { - // Model ORM模型 - Model(ctx context.Context, option ...*handler.Option) *gdb.Model - // Delete 删除附件 - Delete(ctx context.Context, in *sysin.AttachmentDeleteInp) (err error) - // View 获取附件信息 - View(ctx context.Context, in *sysin.AttachmentViewInp) (res *sysin.AttachmentViewModel, err error) - // List 获取附件列表 - List(ctx context.Context, in *sysin.AttachmentListInp) (list []*sysin.AttachmentListModel, totalCount int, err error) - // ClearKind 清空上传类型 - ClearKind(ctx context.Context, in *sysin.AttachmentClearKindInp) (err error) - } - ISysBlacklist interface { + ISysSmsLog interface { // Delete 删除 - Delete(ctx context.Context, in *sysin.BlacklistDeleteInp) (err error) + Delete(ctx context.Context, in *sysin.SmsLogDeleteInp) (err error) // Edit 修改/新增 - Edit(ctx context.Context, in *sysin.BlacklistEditInp) (err error) - // Status 更新部门状态 - Status(ctx context.Context, in *sysin.BlacklistStatusInp) (err error) + Edit(ctx context.Context, in *sysin.SmsLogEditInp) (err error) + // Status 更新短信状态 + Status(ctx context.Context, in *sysin.SmsLogStatusInp) (err error) // View 获取指定字典类型信息 - View(ctx context.Context, in *sysin.BlacklistViewInp) (res *sysin.BlacklistViewModel, err error) + View(ctx context.Context, in *sysin.SmsLogViewInp) (res *sysin.SmsLogViewModel, err error) // List 获取列表 - List(ctx context.Context, in *sysin.BlacklistListInp) (list []*sysin.BlacklistListModel, totalCount int, err error) - // VariableLoad 变化加载 - VariableLoad(ctx context.Context, err error) - // Load 加载黑名单 - Load(ctx context.Context) - // VerifyRequest 验证请求的访问IP是否在黑名单,如果存在则返回错误 - VerifyRequest(r *ghttp.Request) (err error) - // ClusterSync 集群同步 - ClusterSync(ctx context.Context, message *gredis.Message) + List(ctx context.Context, in *sysin.SmsLogListInp) (list []*sysin.SmsLogListModel, totalCount int, err error) + // SendCode 发送验证码 + SendCode(ctx context.Context, in *sysin.SendCodeInp) (err error) + // GetTemplate 获取指定短信模板 + GetTemplate(ctx context.Context, template string, config *model.SmsConfig) (val string, err error) + // AllowSend 是否允许发送 + AllowSend(ctx context.Context, models *entity.SysSmsLog, config *model.SmsConfig) (err error) + // VerifyCode 效验验证码 + VerifyCode(ctx context.Context, in *sysin.VerifyCodeInp) (err error) } ISysCron interface { StartCron(ctx context.Context) @@ -297,21 +219,45 @@ type ( // OnlineExec 在线执行 OnlineExec(ctx context.Context, in *sysin.OnlineExecInp) (err error) } - ISysCronGroup interface { + ISysCurdDemo interface { + // Model 生成演示ORM模型 + Model(ctx context.Context, option ...*handler.Option) *gdb.Model + // List 获取生成演示列表 + List(ctx context.Context, in *sysin.CurdDemoListInp) (list []*sysin.CurdDemoListModel, totalCount int, err error) + // Export 导出生成演示 + Export(ctx context.Context, in *sysin.CurdDemoListInp) (err error) + // Edit 修改/新增生成演示 + Edit(ctx context.Context, in *sysin.CurdDemoEditInp) (err error) + // Delete 删除生成演示 + Delete(ctx context.Context, in *sysin.CurdDemoDeleteInp) (err error) + // MaxSort 获取生成演示最大排序 + MaxSort(ctx context.Context, in *sysin.CurdDemoMaxSortInp) (res *sysin.CurdDemoMaxSortModel, err error) + // View 获取生成演示指定信息 + View(ctx context.Context, in *sysin.CurdDemoViewInp) (res *sysin.CurdDemoViewModel, err error) + // Status 更新生成演示状态 + Status(ctx context.Context, in *sysin.CurdDemoStatusInp) (err error) + // Switch 更新生成演示开关 + Switch(ctx context.Context, in *sysin.CurdDemoSwitchInp) (err error) + } + ISysEmsLog interface { // Delete 删除 - Delete(ctx context.Context, in *sysin.CronGroupDeleteInp) (err error) + Delete(ctx context.Context, in *sysin.EmsLogDeleteInp) (err error) // Edit 修改/新增 - Edit(ctx context.Context, in *sysin.CronGroupEditInp) (err error) - // Status 更新状态 - Status(ctx context.Context, in *sysin.CronGroupStatusInp) (err error) - // MaxSort 最大排序 - MaxSort(ctx context.Context, in *sysin.CronGroupMaxSortInp) (res *sysin.CronGroupMaxSortModel, err error) - // View 获取指定信息 - View(ctx context.Context, in *sysin.CronGroupViewInp) (res *sysin.CronGroupViewModel, err error) + Edit(ctx context.Context, in *sysin.EmsLogEditInp) (err error) + // Status 更新部门状态 + Status(ctx context.Context, in *sysin.EmsLogStatusInp) (err error) + // View 获取指定字典类型信息 + View(ctx context.Context, in *sysin.EmsLogViewInp) (res *sysin.EmsLogViewModel, err error) // List 获取列表 - List(ctx context.Context, in *sysin.CronGroupListInp) (list []*sysin.CronGroupListModel, totalCount int, err error) - // Select 选项 - Select(ctx context.Context, in *sysin.CronGroupSelectInp) (res *sysin.CronGroupSelectModel, err error) + List(ctx context.Context, in *sysin.EmsLogListInp) (list []*sysin.EmsLogListModel, totalCount int, err error) + // Send 发送邮件 + Send(ctx context.Context, in *sysin.SendEmsInp) (err error) + // GetTemplate 获取指定邮件模板 + GetTemplate(ctx context.Context, template string, config *model.EmailConfig) (val string, err error) + // AllowSend 是否允许发送 + AllowSend(ctx context.Context, models *entity.SysEmsLog, config *model.EmailConfig) (err error) + // VerifyCode 效验验证码 + VerifyCode(ctx context.Context, in *sysin.VerifyEmsCodeInp) (err error) } ISysGenCodes interface { // Delete 删除 @@ -339,29 +285,116 @@ type ( // Build 提交生成 Build(ctx context.Context, in *sysin.GenCodesBuildInp) (err error) } + ISysLoginLog interface { + // Model 登录日志Orm模型 + Model(ctx context.Context) *gdb.Model + // List 获取登录日志列表 + List(ctx context.Context, in *sysin.LoginLogListInp) (list []*sysin.LoginLogListModel, totalCount int, err error) + // Export 导出登录日志 + Export(ctx context.Context, in *sysin.LoginLogListInp) (err error) + // Delete 删除登录日志 + Delete(ctx context.Context, in *sysin.LoginLogDeleteInp) (err error) + // View 获取登录日志指定信息 + View(ctx context.Context, in *sysin.LoginLogViewInp) (res *sysin.LoginLogViewModel, err error) + // Push 推送登录日志 + Push(ctx context.Context, in *sysin.LoginLogPushInp) + // RealWrite 真实写入 + RealWrite(ctx context.Context, models entity.SysLoginLog) (err error) + } + ISysAttachment interface { + // Model ORM模型 + Model(ctx context.Context, option ...*handler.Option) *gdb.Model + // Delete 删除附件 + Delete(ctx context.Context, in *sysin.AttachmentDeleteInp) (err error) + // View 获取附件信息 + View(ctx context.Context, in *sysin.AttachmentViewInp) (res *sysin.AttachmentViewModel, err error) + // List 获取附件列表 + List(ctx context.Context, in *sysin.AttachmentListInp) (list []*sysin.AttachmentListModel, totalCount int, err error) + // ClearKind 清空上传类型 + ClearKind(ctx context.Context, in *sysin.AttachmentClearKindInp) (err error) + } + ISysCronGroup interface { + // Delete 删除 + Delete(ctx context.Context, in *sysin.CronGroupDeleteInp) (err error) + // Edit 修改/新增 + Edit(ctx context.Context, in *sysin.CronGroupEditInp) (err error) + // Status 更新状态 + Status(ctx context.Context, in *sysin.CronGroupStatusInp) (err error) + // MaxSort 最大排序 + MaxSort(ctx context.Context, in *sysin.CronGroupMaxSortInp) (res *sysin.CronGroupMaxSortModel, err error) + // View 获取指定信息 + View(ctx context.Context, in *sysin.CronGroupViewInp) (res *sysin.CronGroupViewModel, err error) + // List 获取列表 + List(ctx context.Context, in *sysin.CronGroupListInp) (list []*sysin.CronGroupListModel, totalCount int, err error) + // Select 选项 + Select(ctx context.Context, in *sysin.CronGroupSelectInp) (res *sysin.CronGroupSelectModel, err error) + } + ISysDictData interface { + // Delete 删除 + Delete(ctx context.Context, in *sysin.DictDataDeleteInp) error + // Edit 修改/新增 + Edit(ctx context.Context, in *sysin.DictDataEditInp) (err error) + // List 获取列表 + List(ctx context.Context, in *sysin.DictDataListInp) (list []*sysin.DictDataListModel, totalCount int, err error) + // Select 获取列表 + Select(ctx context.Context, in *sysin.DataSelectInp) (list sysin.DataSelectModel, err error) + } ) var ( - localSysConfig ISysConfig - localSysServeLicense ISysServeLicense - localSysDictType ISysDictType - localSysServeLog ISysServeLog - localSysSmsLog ISysSmsLog - localSysAttachment ISysAttachment - localSysBlacklist ISysBlacklist localSysCron ISysCron - localSysCronGroup ISysCronGroup - localSysGenCodes ISysGenCodes + localSysCurdDemo ISysCurdDemo + localSysEmsLog ISysEmsLog localSysLog ISysLog localSysProvinces ISysProvinces + localSysSmsLog ISysSmsLog + localSysAttachment ISysAttachment + localSysCronGroup ISysCronGroup + localSysDictData ISysDictData + localSysGenCodes ISysGenCodes + localSysLoginLog ISysLoginLog localSysAddons ISysAddons localSysAddonsConfig ISysAddonsConfig - localSysCurdDemo ISysCurdDemo - localSysDictData ISysDictData - localSysEmsLog ISysEmsLog - localSysLoginLog ISysLoginLog + localSysBlacklist ISysBlacklist + localSysConfig ISysConfig + localSysDictType ISysDictType + localSysServeLog ISysServeLog + localSysServeLicense ISysServeLicense ) +func SysServeLicense() ISysServeLicense { + if localSysServeLicense == nil { + panic("implement not found for interface ISysServeLicense, forgot register?") + } + return localSysServeLicense +} + +func RegisterSysServeLicense(i ISysServeLicense) { + localSysServeLicense = i +} + +func SysCron() ISysCron { + if localSysCron == nil { + panic("implement not found for interface ISysCron, forgot register?") + } + return localSysCron +} + +func RegisterSysCron(i ISysCron) { + localSysCron = 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 SysEmsLog() ISysEmsLog { if localSysEmsLog == nil { panic("implement not found for interface ISysEmsLog, forgot register?") @@ -373,6 +406,83 @@ func RegisterSysEmsLog(i ISysEmsLog) { localSysEmsLog = 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 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 SysAttachment() ISysAttachment { + if localSysAttachment == nil { + panic("implement not found for interface ISysAttachment, forgot register?") + } + return localSysAttachment +} + +func RegisterSysAttachment(i ISysAttachment) { + localSysAttachment = i +} + +func SysCronGroup() ISysCronGroup { + if localSysCronGroup == nil { + panic("implement not found for interface ISysCronGroup, forgot register?") + } + return localSysCronGroup +} + +func RegisterSysCronGroup(i ISysCronGroup) { + localSysCronGroup = i +} + +func SysDictData() ISysDictData { + if localSysDictData == nil { + panic("implement not found for interface ISysDictData, forgot register?") + } + return localSysDictData +} + +func RegisterSysDictData(i ISysDictData) { + localSysDictData = i +} + +func SysGenCodes() ISysGenCodes { + if localSysGenCodes == nil { + panic("implement not found for interface ISysGenCodes, forgot register?") + } + return localSysGenCodes +} + +func RegisterSysGenCodes(i ISysGenCodes) { + localSysGenCodes = i +} + func SysLoginLog() ISysLoginLog { if localSysLoginLog == nil { panic("implement not found for interface ISysLoginLog, forgot register?") @@ -406,26 +516,15 @@ func RegisterSysAddonsConfig(i ISysAddonsConfig) { localSysAddonsConfig = i } -func SysCurdDemo() ISysCurdDemo { - if localSysCurdDemo == nil { - panic("implement not found for interface ISysCurdDemo, forgot register?") +func SysBlacklist() ISysBlacklist { + if localSysBlacklist == nil { + panic("implement not found for interface ISysBlacklist, forgot register?") } - return localSysCurdDemo + return localSysBlacklist } -func RegisterSysCurdDemo(i ISysCurdDemo) { - localSysCurdDemo = i -} - -func SysDictData() ISysDictData { - if localSysDictData == nil { - panic("implement not found for interface ISysDictData, forgot register?") - } - return localSysDictData -} - -func RegisterSysDictData(i ISysDictData) { - localSysDictData = i +func RegisterSysBlacklist(i ISysBlacklist) { + localSysBlacklist = i } func SysConfig() ISysConfig { @@ -439,17 +538,6 @@ func RegisterSysConfig(i ISysConfig) { localSysConfig = i } -func SysServeLicense() ISysServeLicense { - if localSysServeLicense == nil { - panic("implement not found for interface ISysServeLicense, forgot register?") - } - return localSysServeLicense -} - -func RegisterSysServeLicense(i ISysServeLicense) { - localSysServeLicense = i -} - func SysDictType() ISysDictType { if localSysDictType == nil { panic("implement not found for interface ISysDictType, forgot register?") @@ -471,91 +559,3 @@ func SysServeLog() ISysServeLog { func RegisterSysServeLog(i ISysServeLog) { localSysServeLog = 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 SysGenCodes() ISysGenCodes { - if localSysGenCodes == nil { - panic("implement not found for interface ISysGenCodes, forgot register?") - } - return localSysGenCodes -} - -func RegisterSysGenCodes(i ISysGenCodes) { - localSysGenCodes = 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 SysProvinces() ISysProvinces { - if localSysProvinces == nil { - panic("implement not found for interface ISysProvinces, forgot register?") - } - return localSysProvinces -} - -func RegisterSysProvinces(i ISysProvinces) { - localSysProvinces = i -} - -func SysAttachment() ISysAttachment { - if localSysAttachment == nil { - panic("implement not found for interface ISysAttachment, forgot register?") - } - return localSysAttachment -} - -func RegisterSysAttachment(i ISysAttachment) { - localSysAttachment = i -} - -func SysBlacklist() ISysBlacklist { - if localSysBlacklist == nil { - panic("implement not found for interface ISysBlacklist, forgot register?") - } - return localSysBlacklist -} - -func RegisterSysBlacklist(i ISysBlacklist) { - localSysBlacklist = i -} - -func SysCron() ISysCron { - if localSysCron == nil { - panic("implement not found for interface ISysCron, forgot register?") - } - return localSysCron -} - -func RegisterSysCron(i ISysCron) { - localSysCron = i -} - -func SysCronGroup() ISysCronGroup { - if localSysCronGroup == nil { - panic("implement not found for interface ISysCronGroup, forgot register?") - } - return localSysCronGroup -} - -func RegisterSysCronGroup(i ISysCronGroup) { - localSysCronGroup = i -} diff --git a/web/src/components/FileChooser/src/Chooser.vue b/web/src/components/FileChooser/src/Chooser.vue index fdf1d52..163f33e 100644 --- a/web/src/components/FileChooser/src/Chooser.vue +++ b/web/src/components/FileChooser/src/Chooser.vue @@ -265,7 +265,7 @@ } function handleSelect(item: Attachment) { - if (selectList.value === null || props.maxNumber == 1) { + if (!selectList.value || props.maxNumber == 1) { selectList.value = []; } @@ -289,7 +289,7 @@ } function isSelected(item: Attachment) { - if (selectList.value === null) { + if (!selectList.value) { return false; } return selectList.value.some((selected) => selected === item.fileUrl); @@ -297,11 +297,11 @@ function generateKindOptions(kinds: KindRawOption[]): any { const option: KindOption[] = []; - kinds.forEach((item) => { + kinds.forEach((item: KindRawOption) => { const data: KindOption = { label: () => h(NEllipsis, null, { default: () => item.label }), key: item.key, - extra: () => createExtraContent(item), + extra: () => (item.key !== '' ? createExtraContent(item) : null), icon: constantRouterIcon[item.icon] || null, disabled: isDisabledKindOption(item), };