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} } }