user_access_menu_dto.go 2.8 KB
package dto

import (
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain"
	"sort"
)

type UserAccessMenuDto []*Menu
type Menu struct {
	// 菜单编号
	MenuId int64 `json:"menuId,omitempty"`
	// 父级id
	ParentId int64 `json:"parentId,omitempty"`
	// 菜单名称
	MenuName string `json:"menuName,omitempty"`
	// 菜单别名
	//MenuAlias string `json:"menuAlias,omitempty"`
	// 菜单编码 SYSTEM_USER_EDIT / 100101 (字符编码)
	Code string `json:"code,omitempty"`
	// 权限编码 user:edit
	//AccessCode string `json:"accessCode,omitempty"`
	// 菜单类型 (目录catalog、菜单menu、按钮button)
	MenuType string `json:"menuType,omitempty"`
	// 菜单图标
	Icon string `json:"icon,omitempty"`
	// 排序
	Sort int `json:"sort,omitempty"`
	// 菜单说明
	//Remark string `json:"remark,omitempty"`
	// 菜单类别 (web:1、app:2)
	//Category string `json:"category,omitempty"`
	// 路径节点路径("0,11,12,")
	//ParentPath string `json:"parentPath,omitempty"`
	// 菜单是否公开状态,[1:显示],[2:隐藏],默认显示
	//IsPublish int `json:"isPublish,omitempty"`
	// 启用状态(启用:1 禁用:2),默认启用
	EnableStatus int `json:"enableStatus,omitempty"`
}

func (dto *UserAccessMenuDto) LoadDto(menus []*domain.Menu, alias []*domain.CustomizeMenu, access []interface{}, allDisableMenu int) error {
	var mapMenus = make(map[int64]*domain.Menu)
	for i := range menus {
		menus[i].EnableStatus = domain.MenuStatusDisable
		mapMenus[menus[i].MenuId] = menus[i]
	}
	// 设置别名
	for i := range alias {
		if v, ok := mapMenus[alias[i].MenuId]; ok {
			v.MenuName = alias[i].MenuAlias
			v.Sort = alias[i].Sort
		}
	}
	if allDisableMenu == 1 {
		for i := range access {
			if v, ok := mapMenus[access[i].(int64)]; ok {
				*dto = append(*dto, &Menu{
					MenuId:       v.MenuId,
					ParentId:     v.ParentId,
					MenuName:     v.MenuName,
					Code:         v.Code,
					MenuType:     v.MenuType,
					Icon:         v.Icon,
					Sort:         v.Sort,
					EnableStatus: v.EnableStatus,
				})
			}
		}
	} else {
		for i := range access {
			if v, ok := mapMenus[access[i].(int64)]; ok {
				v.EnableStatus = domain.MenuStatusEnable
			}
		}
		for _, v := range mapMenus {
			*dto = append(*dto, &Menu{
				MenuId:       v.MenuId,
				ParentId:     v.ParentId,
				MenuName:     v.MenuName,
				Code:         v.Code,
				MenuType:     v.MenuType,
				Icon:         v.Icon,
				Sort:         v.Sort,
				EnableStatus: v.EnableStatus,
			})
		}
	}

	sort.Stable(dto)
	return nil
}

func (x UserAccessMenuDto) Len() int           { return len(x) }
func (x UserAccessMenuDto) Less(i, j int) bool { return x[i].MenuId < x[j].MenuId }
func (x UserAccessMenuDto) Swap(i, j int)      { x[i], x[j] = x[j], x[i] }

func NewUserAccessMenuDto() *UserAccessMenuDto {
	var dto UserAccessMenuDto = make([]*Menu, 0)
	return &dto
}