Merge pull request #39 from bufanyun/v2.0

消息订阅增加多个消息支持,优化文件选择器清空操作,添加后台用户时增加角色部门验证
This commit is contained in:
maxbad 2023-07-27 17:27:57 +08:00 committed by GitHub
commit 31ec4040ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 637 additions and 544 deletions

View File

@ -1,4 +1,4 @@
// Package consts // Package global
// @Link https://github.com/bufanyun/hotgo // @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2023 HotGo CLI // @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com> // @Author Ms <133814250@qq.com>
@ -22,21 +22,15 @@ func SubscribeClusterSync(ctx context.Context) {
return return
} }
// 系统配置 err := pubsub.SubscribeMap(map[string]pubsub.SubHandler{
if err := pubsub.Subscribe(consts.ClusterSyncSysconfig, service.SysConfig().ClusterSync); err != nil { consts.ClusterSyncSysconfig: service.SysConfig().ClusterSync, // 系统配置
consts.ClusterSyncSysBlacklist: service.SysBlacklist().ClusterSync, // 系统黑名单
consts.ClusterSyncSysSuperAdmin: service.AdminMember().ClusterSyncSuperAdmin, // 超管
})
if err != nil {
g.Log().Fatal(ctx, err) 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 推送集群同步消息,如果没有开启集群部署,则不进行推送 // PublishClusterSync 推送集群同步消息,如果没有开启集群部署,则不进行推送

View File

@ -26,6 +26,23 @@ var subscribes = &subscribeManager{
List: make(map[string]SubHandler), 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 订阅消息 // Subscribe 订阅消息
func Subscribe(channel string, hr SubHandler) (err error) { func Subscribe(channel string, hr SubHandler) (err error) {
subscribes.mutex.Lock() subscribes.mutex.Lock()

View File

@ -37,6 +37,7 @@ func init() {
// View 获取指定提现信息 // View 获取指定提现信息
func (s *sAdminCash) View(ctx context.Context, in *adminin.CashViewInp) (res *adminin.CashViewModel, err error) { func (s *sAdminCash) View(ctx context.Context, in *adminin.CashViewInp) (res *adminin.CashViewModel, err error) {
// 这里做了强制限制非超管不允许访问,如果你想通过菜单权限控制,请注释掉以下验证
if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId(ctx)) { if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId(ctx)) {
err = gerror.New("没有访问权限") err = gerror.New("没有访问权限")
return 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 { 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 return
} }
if member == nil { if member == nil {
err = gerror.Newf("获取管理员信息失败") err = gerror.Newf("获取用户信息失败")
return return
} }

View File

@ -20,6 +20,7 @@ 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{}
@ -333,3 +334,35 @@ func (s *sAdminDept) treeList(pid int64, nodes []*entity.AdminDept) (list []*adm
} }
return 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
}

View File

@ -401,7 +401,7 @@ func (s *sAdminMember) VerifyUnique(ctx context.Context, in *adminin.VerifyUniqu
return return
} }
// Delete 删除 // Delete 删除用户
func (s *sAdminMember) Delete(ctx context.Context, in *adminin.MemberDeleteInp) (err error) { func (s *sAdminMember) Delete(ctx context.Context, in *adminin.MemberDeleteInp) (err error) {
if s.VerifySuperId(ctx, gconv.Int64(in.Id)) { if s.VerifySuperId(ctx, gconv.Int64(in.Id)) {
err = gerror.New("超管账号禁止删除!") 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) { func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err error) {
opMemberId := contexts.GetUserId(ctx) opMemberId := contexts.GetUserId(ctx)
if opMemberId <= 0 { if opMemberId <= 0 {
@ -464,6 +464,16 @@ func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err
return 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) config, err := service.SysConfig().GetLogin(ctx)
if err != nil { if err != nil {
return return
@ -564,7 +574,7 @@ func (s *sAdminMember) View(ctx context.Context, in *adminin.MemberViewInp) (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() cols := dao.AdminMember.Columns()

View File

@ -22,6 +22,7 @@ import (
"hotgo/internal/service" "hotgo/internal/service"
"hotgo/utility/convert" "hotgo/utility/convert"
"hotgo/utility/tree" "hotgo/utility/tree"
"hotgo/utility/validate"
"sort" "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) ok, err := casbin.Enforcer.Enforce(user.RoleKey, path, method)
if err != nil { 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 false
} }
return ok return ok
@ -91,11 +92,7 @@ func (s *sAdminRole) List(ctx context.Context, in *adminin.RoleListInp) (res *ad
// GetName 获取指定角色的名称 // GetName 获取指定角色的名称
func (s *sAdminRole) GetName(ctx context.Context, id int64) (name string, err error) { func (s *sAdminRole) GetName(ctx context.Context, id int64) (name string, err error) {
r, err := dao.AdminRole.Ctx(ctx). r, err := dao.AdminRole.Ctx(ctx).Fields("name").WherePri(id).Order("id desc").Value()
Fields("name").
WherePri(id).
Order("id desc").
Value()
if err != nil { if err != nil {
err = gerror.Wrap(err, consts.ErrorORM) err = gerror.Wrap(err, consts.ErrorORM)
return return
@ -313,3 +310,35 @@ func (s *sAdminRole) treeList(pid int64, nodes []*entity.AdminRole) (list []*adm
} }
return 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
}

View File

@ -41,6 +41,7 @@ type MemberUpdateMobileInp struct {
type GetIdByCodeInp struct { type GetIdByCodeInp struct {
Code string `json:"code"` Code string `json:"code"`
} }
type GetIdByCodeModel struct { type GetIdByCodeModel struct {
Id int64 Id int64
} }
@ -49,6 +50,7 @@ type GetIdByCodeModel struct {
type MemberProfileInp struct { type MemberProfileInp struct {
Id int64 Id int64
} }
type MemberProfileModel struct { type MemberProfileModel struct {
PostGroup string `json:"postGroup" dc:"岗位名称"` PostGroup string `json:"postGroup" dc:"岗位名称"`
RoleGroup string `json:"roleGroup" dc:"角色名称"` RoleGroup string `json:"roleGroup" dc:"角色名称"`
@ -109,7 +111,7 @@ type LoginMemberInfoModel struct {
*MemberLoginStatModel *MemberLoginStatModel
} }
// MemberEditInp 修改/新增管理员 // MemberEditInp 修改用户
type MemberEditInp struct { type MemberEditInp struct {
Id int64 `json:"id" dc:"管理员ID"` Id int64 `json:"id" dc:"管理员ID"`
RoleId int64 `json:"roleId" v:"required#角色不能为空" dc:"角色ID"` RoleId int64 `json:"roleId" v:"required#角色不能为空" dc:"角色ID"`
@ -133,6 +135,7 @@ type MemberEditInp struct {
Status int `json:"status" dc:"状态"` Status int `json:"status" dc:"状态"`
} }
// MemberAddInp 新增用户
type MemberAddInp struct { type MemberAddInp struct {
*MemberEditInp *MemberEditInp
Salt string `json:"salt" dc:"密码盐"` Salt string `json:"salt" dc:"密码盐"`
@ -162,13 +165,14 @@ type VerifyUniqueInp struct {
Where g.Map Where g.Map
} }
// MemberDeleteInp 删除字典类型 // MemberDeleteInp 删除用户
type MemberDeleteInp struct { type MemberDeleteInp struct {
Id interface{} `json:"id" v:"required#用户ID不能为空" dc:"用户ID"` Id interface{} `json:"id" v:"required#用户ID不能为空" dc:"用户ID"`
} }
type MemberDeleteModel struct{} type MemberDeleteModel struct{}
// MemberViewInp 获取信息 // MemberViewInp 获取用户信息
type MemberViewInp struct { type MemberViewInp struct {
Id int64 `json:"id" dc:"用户ID"` Id int64 `json:"id" dc:"用户ID"`
} }
@ -179,7 +183,7 @@ type MemberViewModel struct {
RoleName string `json:"roleName" dc:"所属角色"` RoleName string `json:"roleName" dc:"所属角色"`
} }
// MemberListInp 获取列表 // MemberListInp 获取用户列表
type MemberListInp struct { type MemberListInp struct {
form.PageReq form.PageReq
form.StatusReq form.StatusReq

View File

@ -19,155 +19,6 @@ import (
) )
type ( 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 { IAdminNotice interface {
// Model Orm模型 // Model Orm模型
Model(ctx context.Context, option ...*handler.Option) *gdb.Model Model(ctx context.Context, option ...*handler.Option) *gdb.Model
@ -218,6 +69,24 @@ type (
// Status 更新充值订单状态 // Status 更新充值订单状态
Status(ctx context.Context, in *adminin.OrderStatusInp) (err error) 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 { IAdminSite interface {
// Register 账号注册 // Register 账号注册
Register(ctx context.Context, in *adminin.RegisterInp) (err error) Register(ctx context.Context, in *adminin.RegisterInp) (err error)
@ -226,67 +95,159 @@ type (
// MobileLogin 手机号登录 // MobileLogin 手机号登录
MobileLogin(ctx context.Context, in *adminin.MobileLoginInp) (res *adminin.LoginModel, err error) 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 ( var (
localAdminCash IAdminCash localAdminOrder IAdminOrder
localAdminCreditsLog IAdminCreditsLog localAdminPost IAdminPost
localAdminSite IAdminSite
localAdminMember IAdminMember
localAdminNotice IAdminNotice
localAdminDept IAdminDept
localAdminMemberPost IAdminMemberPost localAdminMemberPost IAdminMemberPost
localAdminMenu IAdminMenu localAdminMenu IAdminMenu
localAdminMonitor IAdminMonitor localAdminMonitor IAdminMonitor
localAdminPost IAdminPost
localAdminRole IAdminRole localAdminRole IAdminRole
localAdminDept IAdminDept localAdminCash IAdminCash
localAdminMember IAdminMember localAdminCreditsLog IAdminCreditsLog
localAdminNotice IAdminNotice
localAdminOrder IAdminOrder
localAdminSite IAdminSite
) )
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 { func AdminCreditsLog() IAdminCreditsLog {
if localAdminCreditsLog == nil { if localAdminCreditsLog == nil {
panic("implement not found for interface IAdminCreditsLog, forgot register?") panic("implement not found for interface IAdminCreditsLog, forgot register?")
@ -298,6 +259,17 @@ func RegisterAdminCreditsLog(i IAdminCreditsLog) {
localAdminCreditsLog = i 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 { func AdminMemberPost() IAdminMemberPost {
if localAdminMemberPost == nil { if localAdminMemberPost == nil {
panic("implement not found for interface IAdminMemberPost, forgot register?") panic("implement not found for interface IAdminMemberPost, forgot register?")
@ -320,37 +292,37 @@ func RegisterAdminMenu(i IAdminMenu) {
localAdminMenu = i localAdminMenu = i
} }
func AdminSite() IAdminSite { func AdminMonitor() IAdminMonitor {
if localAdminSite == nil { if localAdminMonitor == nil {
panic("implement not found for interface IAdminSite, forgot register?") panic("implement not found for interface IAdminMonitor, forgot register?")
} }
return localAdminSite return localAdminMonitor
} }
func RegisterAdminSite(i IAdminSite) { func RegisterAdminMonitor(i IAdminMonitor) {
localAdminSite = i localAdminMonitor = i
} }
func AdminDept() IAdminDept { func AdminRole() IAdminRole {
if localAdminDept == nil { if localAdminRole == nil {
panic("implement not found for interface IAdminDept, forgot register?") panic("implement not found for interface IAdminRole, forgot register?")
} }
return localAdminDept return localAdminRole
} }
func RegisterAdminDept(i IAdminDept) { func RegisterAdminRole(i IAdminRole) {
localAdminDept = i localAdminRole = i
} }
func AdminMember() IAdminMember { func AdminCash() IAdminCash {
if localAdminMember == nil { if localAdminCash == nil {
panic("implement not found for interface IAdminMember, forgot register?") panic("implement not found for interface IAdminCash, forgot register?")
} }
return localAdminMember return localAdminCash
} }
func RegisterAdminMember(i IAdminMember) { func RegisterAdminCash(i IAdminCash) {
localAdminMember = i localAdminCash = i
} }
func AdminNotice() IAdminNotice { func AdminNotice() IAdminNotice {
@ -374,3 +346,36 @@ func AdminOrder() IAdminOrder {
func RegisterAdminOrder(i IAdminOrder) { func RegisterAdminOrder(i IAdminOrder) {
localAdminOrder = i 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
}

View File

@ -18,94 +18,6 @@ import (
) )
type ( 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 { ISysConfig interface {
// InitConfig 初始化系统配置 // InitConfig 初始化系统配置
InitConfig(ctx context.Context) InitConfig(ctx context.Context)
@ -148,24 +60,6 @@ type (
// ClusterSync 集群同步 // ClusterSync 集群同步
ClusterSync(ctx context.Context, message *gredis.Message) 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 { ISysDictType interface {
// Tree 树 // Tree 树
Tree(ctx context.Context) (list []*sysin.DictTypeTree, err error) Tree(ctx context.Context) (list []*sysin.DictTypeTree, err error)
@ -190,25 +84,65 @@ type (
// RealWrite 真实写入 // RealWrite 真实写入
RealWrite(ctx context.Context, models entity.SysServeLog) (err error) RealWrite(ctx context.Context, models entity.SysServeLog) (err error)
} }
ISysSmsLog interface { ISysAddons 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)
// List 获取列表 // List 获取列表
List(ctx context.Context, in *sysin.SmsLogListInp) (list []*sysin.SmsLogListModel, totalCount int, err error) List(ctx context.Context, in *sysin.AddonsListInp) (list []*sysin.AddonsListModel, totalCount int, err error)
// SendCode 发送验证码 // Selects 选项
SendCode(ctx context.Context, in *sysin.SendCodeInp) (err error) Selects(ctx context.Context, in *sysin.AddonsSelectsInp) (res *sysin.AddonsSelectsModel, err error)
// GetTemplate 获取指定短信模板 // Build 提交生成
GetTemplate(ctx context.Context, template string, config *model.SmsConfig) (val string, err error) Build(ctx context.Context, in *sysin.AddonsBuildInp) (err error)
// AllowSend 是否允许发送 // Install 安装模块
AllowSend(ctx context.Context, models *entity.SysSmsLog, config *model.SmsConfig) (err error) Install(ctx context.Context, in *sysin.AddonsInstallInp) (err error)
// VerifyCode 效验验证码 // Upgrade 更新模块
VerifyCode(ctx context.Context, in *sysin.VerifyCodeInp) (err error) 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 { ISysLog interface {
// Export 导出 // Export 导出
@ -248,37 +182,25 @@ type (
// Select 省市区选项 // Select 省市区选项
Select(ctx context.Context, in *sysin.ProvincesSelectInp) (res *sysin.ProvincesSelectModel, err error) Select(ctx context.Context, in *sysin.ProvincesSelectInp) (res *sysin.ProvincesSelectModel, err error)
} }
ISysAttachment interface { ISysSmsLog 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 {
// Delete 删除 // Delete 删除
Delete(ctx context.Context, in *sysin.BlacklistDeleteInp) (err error) Delete(ctx context.Context, in *sysin.SmsLogDeleteInp) (err error)
// Edit 修改/新增 // Edit 修改/新增
Edit(ctx context.Context, in *sysin.BlacklistEditInp) (err error) Edit(ctx context.Context, in *sysin.SmsLogEditInp) (err error)
// Status 更新部门状态 // Status 更新短信状态
Status(ctx context.Context, in *sysin.BlacklistStatusInp) (err error) Status(ctx context.Context, in *sysin.SmsLogStatusInp) (err error)
// View 获取指定字典类型信息 // 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 获取列表
List(ctx context.Context, in *sysin.BlacklistListInp) (list []*sysin.BlacklistListModel, totalCount int, err error) List(ctx context.Context, in *sysin.SmsLogListInp) (list []*sysin.SmsLogListModel, totalCount int, err error)
// VariableLoad 变化加载 // SendCode 发送验证码
VariableLoad(ctx context.Context, err error) SendCode(ctx context.Context, in *sysin.SendCodeInp) (err error)
// Load 加载黑名单 // GetTemplate 获取指定短信模板
Load(ctx context.Context) GetTemplate(ctx context.Context, template string, config *model.SmsConfig) (val string, err error)
// VerifyRequest 验证请求的访问IP是否在黑名单如果存在则返回错误 // AllowSend 是否允许发送
VerifyRequest(r *ghttp.Request) (err error) AllowSend(ctx context.Context, models *entity.SysSmsLog, config *model.SmsConfig) (err error)
// ClusterSync 集群同步 // VerifyCode 效验验证码
ClusterSync(ctx context.Context, message *gredis.Message) VerifyCode(ctx context.Context, in *sysin.VerifyCodeInp) (err error)
} }
ISysCron interface { ISysCron interface {
StartCron(ctx context.Context) StartCron(ctx context.Context)
@ -297,21 +219,45 @@ type (
// OnlineExec 在线执行 // OnlineExec 在线执行
OnlineExec(ctx context.Context, in *sysin.OnlineExecInp) (err error) 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 删除
Delete(ctx context.Context, in *sysin.CronGroupDeleteInp) (err error) Delete(ctx context.Context, in *sysin.EmsLogDeleteInp) (err error)
// Edit 修改/新增 // Edit 修改/新增
Edit(ctx context.Context, in *sysin.CronGroupEditInp) (err error) Edit(ctx context.Context, in *sysin.EmsLogEditInp) (err error)
// Status 更新状态 // Status 更新部门状态
Status(ctx context.Context, in *sysin.CronGroupStatusInp) (err error) Status(ctx context.Context, in *sysin.EmsLogStatusInp) (err error)
// MaxSort 最大排序 // View 获取指定字典类型信息
MaxSort(ctx context.Context, in *sysin.CronGroupMaxSortInp) (res *sysin.CronGroupMaxSortModel, err error) View(ctx context.Context, in *sysin.EmsLogViewInp) (res *sysin.EmsLogViewModel, err error)
// View 获取指定信息
View(ctx context.Context, in *sysin.CronGroupViewInp) (res *sysin.CronGroupViewModel, err error)
// List 获取列表 // List 获取列表
List(ctx context.Context, in *sysin.CronGroupListInp) (list []*sysin.CronGroupListModel, totalCount int, err error) List(ctx context.Context, in *sysin.EmsLogListInp) (list []*sysin.EmsLogListModel, totalCount int, err error)
// Select 选项 // Send 发送邮件
Select(ctx context.Context, in *sysin.CronGroupSelectInp) (res *sysin.CronGroupSelectModel, err error) 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 { ISysGenCodes interface {
// Delete 删除 // Delete 删除
@ -339,29 +285,116 @@ type (
// Build 提交生成 // Build 提交生成
Build(ctx context.Context, in *sysin.GenCodesBuildInp) (err error) 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 ( var (
localSysConfig ISysConfig
localSysServeLicense ISysServeLicense
localSysDictType ISysDictType
localSysServeLog ISysServeLog
localSysSmsLog ISysSmsLog
localSysAttachment ISysAttachment
localSysBlacklist ISysBlacklist
localSysCron ISysCron localSysCron ISysCron
localSysCronGroup ISysCronGroup localSysCurdDemo ISysCurdDemo
localSysGenCodes ISysGenCodes localSysEmsLog ISysEmsLog
localSysLog ISysLog localSysLog ISysLog
localSysProvinces ISysProvinces localSysProvinces ISysProvinces
localSysSmsLog ISysSmsLog
localSysAttachment ISysAttachment
localSysCronGroup ISysCronGroup
localSysDictData ISysDictData
localSysGenCodes ISysGenCodes
localSysLoginLog ISysLoginLog
localSysAddons ISysAddons localSysAddons ISysAddons
localSysAddonsConfig ISysAddonsConfig localSysAddonsConfig ISysAddonsConfig
localSysCurdDemo ISysCurdDemo localSysBlacklist ISysBlacklist
localSysDictData ISysDictData localSysConfig ISysConfig
localSysEmsLog ISysEmsLog localSysDictType ISysDictType
localSysLoginLog ISysLoginLog 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 { func SysEmsLog() ISysEmsLog {
if localSysEmsLog == nil { if localSysEmsLog == nil {
panic("implement not found for interface ISysEmsLog, forgot register?") panic("implement not found for interface ISysEmsLog, forgot register?")
@ -373,6 +406,83 @@ func RegisterSysEmsLog(i ISysEmsLog) {
localSysEmsLog = i 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 { func SysLoginLog() ISysLoginLog {
if localSysLoginLog == nil { if localSysLoginLog == nil {
panic("implement not found for interface ISysLoginLog, forgot register?") panic("implement not found for interface ISysLoginLog, forgot register?")
@ -406,26 +516,15 @@ func RegisterSysAddonsConfig(i ISysAddonsConfig) {
localSysAddonsConfig = i localSysAddonsConfig = i
} }
func SysCurdDemo() ISysCurdDemo { func SysBlacklist() ISysBlacklist {
if localSysCurdDemo == nil { if localSysBlacklist == nil {
panic("implement not found for interface ISysCurdDemo, forgot register?") panic("implement not found for interface ISysBlacklist, forgot register?")
} }
return localSysCurdDemo return localSysBlacklist
} }
func RegisterSysCurdDemo(i ISysCurdDemo) { func RegisterSysBlacklist(i ISysBlacklist) {
localSysCurdDemo = i localSysBlacklist = 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 SysConfig() ISysConfig { func SysConfig() ISysConfig {
@ -439,17 +538,6 @@ func RegisterSysConfig(i ISysConfig) {
localSysConfig = i 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 { func SysDictType() ISysDictType {
if localSysDictType == nil { if localSysDictType == nil {
panic("implement not found for interface ISysDictType, forgot register?") panic("implement not found for interface ISysDictType, forgot register?")
@ -471,91 +559,3 @@ func SysServeLog() ISysServeLog {
func RegisterSysServeLog(i ISysServeLog) { func RegisterSysServeLog(i ISysServeLog) {
localSysServeLog = i 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
}

View File

@ -265,7 +265,7 @@
} }
function handleSelect(item: Attachment) { function handleSelect(item: Attachment) {
if (selectList.value === null || props.maxNumber == 1) { if (!selectList.value || props.maxNumber == 1) {
selectList.value = []; selectList.value = [];
} }
@ -289,7 +289,7 @@
} }
function isSelected(item: Attachment) { function isSelected(item: Attachment) {
if (selectList.value === null) { if (!selectList.value) {
return false; return false;
} }
return selectList.value.some((selected) => selected === item.fileUrl); return selectList.value.some((selected) => selected === item.fileUrl);
@ -297,11 +297,11 @@
function generateKindOptions(kinds: KindRawOption[]): any { function generateKindOptions(kinds: KindRawOption[]): any {
const option: KindOption[] = []; const option: KindOption[] = [];
kinds.forEach((item) => { kinds.forEach((item: KindRawOption) => {
const data: KindOption = { const data: KindOption = {
label: () => h(NEllipsis, null, { default: () => item.label }), label: () => h(NEllipsis, null, { default: () => item.label }),
key: item.key, key: item.key,
extra: () => createExtraContent(item), extra: () => (item.key !== '' ? createExtraContent(item) : null),
icon: constantRouterIcon[item.icon] || null, icon: constantRouterIcon[item.icon] || null,
disabled: isDisabledKindOption(item), disabled: isDisabledKindOption(item),
}; };