package com.ema.admin.modules.system.entity;

import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import com.ema.common.domain.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

import java.io.Serializable;

/**
 * 菜单权限表 实体类。
 *
 * @author LIJIAN
 * @since 2026-03-23
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ApiModel("菜单权限表")
@Table("sys_menu")
public class SysMenu extends BaseEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 菜单ID
     */
    @Id(keyType = KeyType.Generator, value = "snowFlakeId")
    @ApiModelProperty("菜单ID")
    private String id;

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

    /**
     * 父菜单ID (0为顶级菜单)
     */
    @ApiModelProperty("父菜单ID (0为顶级菜单)")
    private String parentId;

    /**
     * 显示顺序
     */
    @ApiModelProperty("显示顺序")
    private Integer sort;

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

    /**
     * 前端组件路径
     */
    @ApiModelProperty("前端组件路径")
    private String component;

    /**
     * 权限标识 (例如: system:user:list)
     */
    @ApiModelProperty("权限标识 (例如: system:user:list)")
    private String perms;

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

    /**
     * 是否为外链 (0否 1是)
     */
    @ApiModelProperty("是否为外链 (0否 1是)")
    private String isFrame;

    /**
     * 菜单类型 (M目录 C菜单 F按钮)
     */
    @ApiModelProperty("菜单类型 (M目录 C菜单 F按钮)")
    private String menuType;

    /**
     * 菜单状态 (0隐藏,1显示 )
     */
    @ApiModelProperty("菜单状态 (0隐藏,1显示 )")
    private String visible;

    /**
     * 菜单状态 ((0停用 1正常)
     */
    @ApiModelProperty("菜单状态 (0停用 1正常)")
    private String status;

    /**
     * 备注
     */
    @ApiModelProperty("备注")
    private String remark;

}
