using System;
using System.Collections.Generic;

namespace Znyc.Recruitment.Admin.Commons.Tree
{
    /// <summary>
    ///     Vuex菜单模型
    /// </summary>
    [Serializable]
    public class VueRouterModel
    {
        /// <summary>
        ///     设定路由的名字,一定要填写不然使用keep-alive时会出现各种问题
        /// </summary>
        public string name { get; set; }

        /// <summary>
        ///     路由地址,对应当前路由的路径,总是解析为绝对路径
        /// </summary>
        public string path { get; set; }

        /// <summary>
        ///     是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现
        /// </summary>
        public bool hidden { get; set; }

        /// <summary>
        ///     命名视图组件,组件地址
        /// </summary>
        public string component { get; set; }

        /// <summary>
        ///     重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
        /// </summary>
        public string redirect { get; set; }

        /// <summary>
        ///     当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面
        /// </summary>
        public bool alwaysShow { get; set; }

        /// <summary>
        ///     在根路由设置权限,这样它下面所以的子路由都继承了这个权限
        /// </summary>
        public Meta meta { get; set; }

        /// <summary>
        ///     子路由,子菜单
        /// </summary>
        public List<VueRouterModel> children { get; set; }
    }

    /// <summary>
    ///     路由元信息模型
    /// </summary>
    [Serializable]
    public class Meta
    {
        /// <summary>
        ///     构造函数
        /// </summary>
        /// <param name="title"></param>
        /// <param name="icon"></param>
        /// <param name="noCache"></param>
        public Meta(string title, string icon, bool noCache)
        {
            this.title = title;
            this.icon = icon;
            this.noCache = noCache;
        }

        /// <summary>
        ///     设置该路由在侧边栏和面包屑中展示的名字
        /// </summary>
        public string title { get; set; }

        /// <summary>
        ///     设置该路由的图标
        /// </summary>
        public string icon { get; set; }

        /// <summary>
        ///     设置为true,则不会被keep-alive缓存
        /// </summary>
        public bool noCache { get; set; }

        /// <summary>
        ///     当路由设置了该属性,则会高亮相对应的侧边栏。
        ///     这在某些场景非常有用,比如:一个文章的列表页路由为:/article/list
        ///     点击文章进入文章详情页,这时候路由为/article/1,但你想在侧边栏高亮文章列表的路由,就可以进行如下设置
        ///     activeMenu: '/article/list'
        /// </summary>
        public string activeMenu { get; set; }
    }
}