package menu import ( model2 "ArmedPolice/app/common/model" "ArmedPolice/app/model" "ArmedPolice/app/service" "errors" "time" ) type Instance struct{ *service.Session } type InstanceHandle func(session *service.Session) *Instance type ( // InstanceInfo 菜单信息 InstanceInfo struct { *model2.SysMenu Children []*InstanceInfo `json:"children"` } // InstanceIdentityInfo 多个身份菜单信息 InstanceIdentityInfo struct { ID string `json:"id"` *model2.SysMenuBasic Checked bool `json:"checked"` Children []*InstanceIdentityInfo `json:"children"` } // InstanceParams 菜单参数 InstanceParams struct { ID, ParentID uint64 Kind, Auth int Name, Link, Component, Icon string Sort, Status int Remark string } ) // tree 树状筛选 func (c *Instance) tree(src []*model2.SysMenu, parentID uint64) []*InstanceInfo { out := make([]*InstanceInfo, 0) for _, v := range src { if v.ParentID == parentID { out = append(out, &InstanceInfo{ SysMenu: v, Children: c.tree(src, v.ID), }) } } return out } // TreeIdentity 树状筛选 func TreeIdentity(src []*model.SysMenuScene, parentID uint64) []*InstanceIdentityInfo { out := make([]*InstanceIdentityInfo, 0) for _, v := range src { if v.ParentID == parentID { out = append(out, &InstanceIdentityInfo{ SysMenuBasic: v.SysMenuBasic, Checked: v.SceneID > 0, Children: TreeIdentity(src, v.ID), }) } } return out } // List 列表信息 func (c *Instance) List() ([]*InstanceInfo, error) { mSysMenu := model.NewSysMenu() out, err := mSysMenu.Menus() if err != nil { return nil, err } return c.tree(out, 0), nil } // Form 数据操作 func (c *Instance) Form(params *InstanceParams) error { if params.ID <= 0 { return model2.Create(&model2.SysMenu{ SysMenuBasic: model2.SysMenuBasic{ ParentID: params.ParentID, Name: params.Name, Kind: model2.SysMenuKind(params.Kind), Link: params.Link, Component: params.Component, Icon: params.Icon, }, Auth: model2.SysMenuAuth(params.Auth), Sort: params.Sort, Status: model2.SysMenuStatusForNormal, Remark: params.Remark, }) } out := model.NewSysMenu() out.ID = params.ID isExist, err := model2.FirstWhere(out.SysMenu) if err != nil { return err } else if !isExist { return errors.New("菜单信息不存在") } out.ParentID = params.ParentID out.Name = params.Name out.Kind = model2.SysMenuKind(params.Kind) out.Link = params.Link out.Component = params.Component out.Icon = params.Icon out.Auth = model2.SysMenuAuth(params.Auth) out.Sort = params.Sort out.Status = model2.SysMenuStatus(params.Status) out.Remark = params.Remark if err = model2.Save(out); err != nil { return err } return nil } // Status 状态操作 func (c *Instance) Status(id uint64, status int) error { mSysMenu := model.NewSysMenu() mSysMenu.ID = id if err := model2.Updates(mSysMenu.SysMenu, map[string]interface{}{ "status": status, "updated_at": time.Now(), }); err != nil { return err } return nil } // Delete 删除操作 func (c *Instance) Delete(id uint64) error { mSysMenu := model.NewSysMenu() mSysMenu.ID = id if err := model2.Delete(mSysMenu.SysMenu); err != nil { return err } return nil } func NewInstance() InstanceHandle { return func(session *service.Session) *Instance { return &Instance{session} } }