private async Task <DataItem> SeedUIFrameworkDataAsync(Guid?tenantId)
        {
            var data = await DataDictionaryDataSeeder
                       .SeedAsync(
                "UI Framewark",
                CodeNumberGenerator.CreateCode(2),
                "UI框架",
                "UI Framewark",
                null,
                tenantId,
                true);

            data.AddItem(
                GuidGenerator,
                "Vue Vben Admin",
                "Vue Vben Admin",
                "Vue Vben Admin",
                Datas.ValueType.String,
                "Vue Vben Admin",
                isStatic: true);

            return(data.FindItem("Vue Vben Admin"));
        }
        private async Task <Data> SeedLayoutDataAsync(Guid?tenantId)
        {
            var data = await DataDictionaryDataSeeder
                       .SeedAsync(
                "Vben Admin Layout",
                CodeNumberGenerator.CreateCode(3),
                "Vben Admin布局约束",
                "Vben Admin Layout Meta Dictionary",
                null,
                tenantId,
                true);

            data.AddItem(
                GuidGenerator,
                "hideMenu",
                "不在菜单显示",
                "false",
                Datas.ValueType.Boolean,
                "当前路由不在菜单显示",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "icon",
                "图标",
                "",
                Datas.ValueType.String,
                "图标,也是菜单图标",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "currentActiveMenu",
                "当前激活的菜单",
                "",
                Datas.ValueType.String,
                "用于配置详情页时左侧激活的菜单路径",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "ignoreKeepAlive",
                "KeepAlive缓存",
                "false",
                Datas.ValueType.Boolean,
                "是否忽略KeepAlive缓存",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "frameSrc",
                "IFrame地址",
                "",
                Datas.ValueType.String,
                "内嵌iframe的地址",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "transitionName",
                "路由切换动画",
                "",
                Datas.ValueType.String,
                "指定该路由切换的动画名",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "roles",
                "可以访问的角色",
                "",
                Datas.ValueType.Array,
                "可以访问的角色,只在权限模式为Role的时候有效",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "title",
                "路由标题",
                "",
                Datas.ValueType.String,
                "路由title 一般必填",
                false,
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "carryParam",
                "在tab页显示",
                "false",
                Datas.ValueType.Boolean,
                "如果该路由会携带参数,且需要在tab页上面显示。则需要设置为true",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "hideBreadcrumb",
                "隐藏面包屑",
                "false",
                Datas.ValueType.Boolean,
                "隐藏该路由在面包屑上面的显示",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "ignoreAuth",
                "忽略权限",
                "false",
                Datas.ValueType.Boolean,
                "是否忽略权限,只在权限模式为Role的时候有效",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "hideChildrenInMenu",
                "隐藏所有子菜单",
                "false",
                Datas.ValueType.Boolean,
                "隐藏所有子菜单",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "hideTab",
                "不在标签页显示",
                "false",
                Datas.ValueType.Boolean,
                "当前路由不在标签页显示",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "affix",
                "固定标签页",
                "false",
                Datas.ValueType.Boolean,
                "是否固定标签页",
                isStatic: true);
            data.AddItem(
                GuidGenerator,
                "frameFormat",
                "格式化IFrame",
                "false",
                Datas.ValueType.Boolean,
                "扩展的格式化frame,{token}: 在打开的iframe页面传递token请求头");

            return(data);
        }
        private async Task <Data> SeedDefaultDataDictionaryAsync(Guid?tenantId)
        {
            var data = await DataDictionaryDataSeeder
                       .SeedAsync(
                "Layout",
                CodeNumberGenerator.CreateCode(1),
                "Vue Admin Layout Meta Dictionary",
                "Vue Admin Layout Meta Dictionary",
                null,
                tenantId);

            data.AddItem(
                GuidGenerator,
                "roles", // TODO: 是否需要把这一项写入到预置数据?
                "roles",
                "",
                Datas.ValueType.Array,
                "will control the page roles (allow setting multiple roles)");
            data.AddItem(
                GuidGenerator,
                "title",
                "title",
                "component",
                Datas.ValueType.String,
                "the name showed in subMenu and breadcrumb (recommend set)");
            data.AddItem(
                GuidGenerator,
                "icon",
                "icon",
                "icon",
                Datas.ValueType.String,
                "the icon showed in the sidebar");
            data.AddItem(
                GuidGenerator,
                "hidden",
                "hidden",
                "false",
                Datas.ValueType.Boolean,
                "if true, this route will not show in the sidebar (default is false)");
            data.AddItem(
                GuidGenerator,
                "alwaysShow",
                "alwaysShow",
                "false",
                Datas.ValueType.Boolean,
                "if true, will always show the root menu (default is false)");
            data.AddItem(
                GuidGenerator,
                "breadcrumb",
                "breadcrumb",
                "true",
                Datas.ValueType.Boolean,
                "if false, the item will be hidden in breadcrumb (default is true)");
            data.AddItem(
                GuidGenerator,
                "noCache",
                "noCache",
                "false",
                Datas.ValueType.Boolean,
                "if true, the page will not be cached (default is false)");
            data.AddItem(
                GuidGenerator,
                "affix",
                "affix",
                "false",
                Datas.ValueType.Boolean,
                "if true, the tag will affix in the tags-view");
            data.AddItem(
                GuidGenerator,
                "activeMenu",
                "activeMenu",
                "",
                Datas.ValueType.String,
                "if set path, the sidebar will highlight the path you set");

            return(data);
        }