package com.chushang.system.entity.po;

import com.baomidou.mybatisplus.annotation.*;
import com.chushang.common.mybatis.base.BaseEntity;
import com.chushang.system.entity.enums.MenuTypeEnum;
import lombok.*;
import lombok.experimental.Accessors;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *
 * </p>
 *
 * @author author
 * @since 2022-08-18
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_menu")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SysMenu extends BaseEntity {

    /**
     * 自增主键Id
     */
    @TableId(value = "menu_id", type = IdType.ASSIGN_ID)
    private Long menuId;
    /**
     * 菜单名称
     */
    private String menuName;

    @TableField(exist = false)
    private String parentName;
    /**
     * 父级菜单id
     */
    private Integer parentId;
    /**
     * 排序，显示用
     */
    private Integer orderNum;

    /**
     * 对应的url 路径
     */
    private String path;

    private String component;

    private String query;

    /**
     * 是否 外链 1 为内链, 0 为外链
     */
    private Boolean frame;

    /** 是否缓存（1缓存 0不缓存） */
    private Boolean cache;

    /**
     * 是否显示 1 显示
     */
    private Boolean visible;
    /**
     * 状态 0 停用
     */
    private Boolean status;

    /**
     * 拥有权限
     */
    private String perms;

    /**
     * 图标
     */
    private String icon;

    /**
     * 类型 0 目录，1 菜单，2 按钮
     */
    private MenuTypeEnum menuType;

    /**
     * 备注
     */
    private String remark;

    /**
     * 创建人
     */
    @TableField(
            value = "create_by",
            updateStrategy = FieldStrategy.NEVER
    )
    protected String createBy;
    /**
     * 修改人
     */
    @TableField(
            value = "update_by",
            insertStrategy = FieldStrategy.NEVER
    )
    protected String updateBy;

    @TableField(exist = false)
    private List<SysMenu> children = new ArrayList<>();
}
