package com.railway.common.core.domain.entity;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import java.util.ArrayList;
import javax.validation.constraints.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.railway.common.core.domain.BaseEntity;

/**
 * 菜单权限表 sys_menu
 *
 * @author railway
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("系统管理 - 菜单")
public class SysMenu extends BaseEntity {

  private static final long serialVersionUID = 1L;

  /**
   * 菜单ID
   */
  @ApiModelProperty(value = "菜单ID")
  private Long menuId;

  /**
   * 菜单名称
   */
  @ApiModelProperty(value = "菜单名称")
  @NotBlank(message = "菜单名称不能为空")
  @Size(max = 50, message = "菜单名称长度不能超过50个字符")
  private String menuName;

  /**
   * 父菜单名称
   */
  private String parentName;

  /**
   * 父菜单ID
   */
  @ApiModelProperty(value = "父菜单ID")
  private Long parentId;

  /**
   * 显示顺序
   */
  @ApiModelProperty(value = "显示顺序")
  @NotBlank(message = "显示顺序不能为空")
  private String orderNum;

  /**
   * 路由地址
   */
  private String path;

  /**
   * 组件路径
   */
  private String component;

  /**
   * 路由参数
   */
  private String query;

  /**
   * 是否为外链（0是 1否）
   */
  private String isFrame;

  /**
   * 是否缓存（0缓存 1不缓存）
   */
  private String isCache;

  /**
   * 菜单URL
   */
  @ApiModelProperty(value = "菜单URL")
  @Size(max = 200, message = "请求地址不能超过200个字符")
  private String url;

  /**
   * 打开方式（menuItem页签 menuBlank新窗口）
   */
  private String target;

  /**
   * 类型（M目录 C菜单 F按钮）
   */
  @ApiModelProperty(value = "类型（M目录 C菜单 F按钮）")
  @NotBlank(message = "菜单类型不能为空")
  private String menuType;

  /**
   * 菜单状态（0显示 1隐藏）
   */
  private String visible;

  /**
   * 菜单状态（0显示 1隐藏）
   */
  private String status;

  /**
   * 是否刷新（0刷新 1不刷新）
   */
  private String isRefresh;

  /**
   * 权限字符串
   */
  @ApiModelProperty(value = "权限字符串")
  @Size(max = 100, message = "权限标识长度不能超过100个字符")
  private String perms;

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

  /**
   * 子菜单
   */
  private List<SysMenu> children = new ArrayList<>();

}
