Files
2021-11-08 15:52:46 +08:00

159 lines
3.6 KiB
Go

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 {
ID string `json:"id"`
*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{
ID: v.GetEncodeID(),
SysMenu: v,
Children: c.tree(src, v.ID),
})
}
}
return out
}
// TreeIdentity 树状筛选
func TreeIdentity(iModel model2.IModel, src []*model.SysMenuScene, parentID uint64) []*InstanceIdentityInfo {
out := make([]*InstanceIdentityInfo, 0)
for _, v := range src {
if v.ParentID == parentID {
iModel.SetID(v.ID)
out = append(out, &InstanceIdentityInfo{
ID: iModel.GetEncodeID(),
SysMenuBasic: v.SysMenuBasic,
Checked: v.SceneID > 0,
Children: TreeIdentity(iModel, 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}
}
}