Files
2022-01-13 15:23:27 +08:00

133 lines
3.4 KiB
Go

package sys
import (
"SciencesServer/app/api/admin/model"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/session"
"errors"
)
type Navigation struct {
*session.Admin
}
type NavigationHandle func(session *session.Admin) *Navigation
type (
// NavigationInfo 导航信息
NavigationInfo struct {
ID string `json:"id"`
TenantID string `json:"tenant_id"`
ParentID string `json:"parent_id"`
*model2.SysNavigation
Area string `json:"area"`
Children []*NavigationInfo `json:"children"`
}
// NavigationParams 导航参数信息
NavigationParams struct {
ID, TenantID, PatentID uint64
Title, Link string
IsTarget, Sort, Status int
}
)
func (c *Navigation) tree(src []*model.SysNavigationInfo, parentID uint64) []*NavigationInfo {
out := make([]*NavigationInfo, 0)
for _, v := range src {
if v.ParentID == parentID {
out = append(out, &NavigationInfo{
ID: v.GetEncodeID(),
TenantID: v.GetEncodeTenantID(),
ParentID: (&model2.Model{ID: parentID}).GetEncodeID(),
SysNavigation: v.SysNavigation,
Area: v.FormatBasic(),
Children: c.tree(src, v.ID),
})
}
}
return out
}
// Instance 首页信息
func (c *Navigation) Instance(TenantID uint64) ([]*NavigationInfo, error) {
mSysNavigation := model.NewSysNavigation()
where := make([]*model2.ModelWhere, 0)
if c.TenantID > 0 {
where = append(where, model2.NewWhere("n.tenant_id", c.TenantID))
}
if TenantID > 0 {
where = append(where, model2.NewWhere("n.tenant_id", TenantID))
}
out, err := mSysNavigation.Navigation(where...)
if err != nil {
return nil, err
}
return c.tree(out, 0), nil
}
// Form 数据操作
func (c *Navigation) Form(params *NavigationParams) error {
mSysNavigation := model.NewSysNavigation()
if params.ID > 0 {
mSysNavigation.ID = params.ID
if isExist, err := model2.First(mSysNavigation.SysNavigation); err != nil {
return err
} else if !isExist {
return errors.New("操作错误,导航信息不存在或已被删除")
}
if c.TenantID > 0 && mSysNavigation.TenantID != c.TenantID {
return errors.New("操作错误,无权限操作")
}
}
mSysNavigation.ParentID = params.PatentID
mSysNavigation.Title = params.Title
mSysNavigation.Link = params.Link
mSysNavigation.IsTarget = params.IsTarget
mSysNavigation.Sort = params.Sort
mSysNavigation.Status = model2.SysNavigationStatus(params.Status)
if mSysNavigation.ID > 0 {
if c.TenantID <= 0 {
mSysNavigation.TenantID = params.TenantID
}
return model2.Updates(mSysNavigation.SysNavigation, mSysNavigation.SysNavigation)
}
mSysNavigation.TenantID = params.TenantID
if c.TenantID > 0 {
mSysNavigation.TenantID = c.TenantID
}
return model2.Create(mSysNavigation.SysNavigation)
}
// Delete 删除操作
func (c *Navigation) Delete(id uint64) error {
mSysNavigation := model.NewSysNavigation()
mSysNavigation.ID = id
isExist, err := model2.FirstField(mSysNavigation.SysNavigation, []string{"id", "tenant_id"})
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,导航信息不存在或已被删除")
}
if c.TenantID > 0 && mSysNavigation.TenantID != c.TenantID {
return errors.New("操作错误,无权限操作")
}
return model2.Delete(mSysNavigation.SysNavigation)
}
func NewNavigation() NavigationHandle {
return func(session *session.Admin) *Navigation {
return &Navigation{session}
}
}