package com.cpop.oam.business.vo;

import com.mybatisflex.annotation.Column;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.List;

/**
 * Description:
 * date: 2023/5/11 9:14
 *
 * @Author DB
 */
@Data
@Accessors(chain = true)
@ApiModel(value = "Menu对象", description = "")
public class MenuRouteVo implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 菜单ID
     */
    @ApiModelProperty("菜单ID")
    private String id;

    /**
     * 父级菜单ID
     */
    @ApiModelProperty("父级菜单ID")
    private String parentMenu;

    /**
     * 菜单名
     */
    @ApiModelProperty("菜单名")
    private String name;

    /**
     * 菜单图标
     */
    @ApiModelProperty("菜单图标")
    private String icon;

    /**
     * 菜单路由，父菜单为空
     */
    @ApiModelProperty("菜单路由，父菜单为空")
    private String component;

    /**
     * 标记菜单的状态 0:禁用 1：正常（根据权限正常显示）
     */
    @ApiModelProperty("标记菜单的状态 0:禁用 1：正常（根据权限正常显示）")
    private Boolean status;

    /**
     * 用户类型，1管理员，2审计管理员，3安全管理员，4普通用户
     */
    @ApiModelProperty("用户类型，1管理员，2审计管理员，3安全管理员，4普通用户")
    private String type;

    /**
     * 权限
     */
    @ApiModelProperty("权限")
    private String permission;

    /**
     * 重定向路径，一级菜单有值
     */
    @ApiModelProperty("重定向路径，一级菜单有值")
    private String redirect;

    /**
     * 排序，值越小越靠前，一级菜单有值
     */
    @ApiModelProperty("排序，值越小越靠前，一级菜单有值")
    private Integer orderNo;

    /**
     * 子菜单集
     */
    @Column(ignore = true)
    @ApiModelProperty("子菜单集")
    private List<MenuRouteVo> children;

    /**
     * 路由地址
     */
    @ApiModelProperty("路由地址")
    private String path;

    /**
     * 标题
     */
    @ApiModelProperty("标题")
    private String title;

    /**
     * 隐藏菜单
     */
    @ApiModelProperty("隐藏菜单")
    private Boolean hideMenu;

    /**
     * 内部定义类
     */
    @Column(ignore = true)
    @ApiModelProperty("内部定义类")
    private Meta meta;

    /**
     * 内部类
     */
    @Data
    public class Meta {

        /**
         * 标题
         */
        private String title;
        /**
         * 图标
         */
        private String icon;
        /**
         * 排序
         */
        private Integer orderNo;
        /**
         * 隐藏菜单
         */
        private Boolean hideMenu;

        /**
         * 隐藏子类菜单
         */
        private Boolean hideChildrenInMenu;
    }
}
