private async Task <Layout> SeedDefaultLayoutAsync(Data data, DataItem uiDataItem)
        {
            var layout = await RouteDataSeeder.SeedLayoutAsync(
                "Vben Admin Layout",
                "LAYOUT", // 路由层面已经处理好了,只需要传递LAYOUT可自动引用布局
                "Vben Admin Layout",
                data.Id,
                uiDataItem.Name,
                "",
                "Vben Admin Layout",
                data.TenantId
                );

            return(layout);
        }
        private async Task <Layout> SeedDefaultLayoutAsync(Data data)
        {
            var layout = await RouteDataSeeder.SeedLayoutAsync(
                "Layout",
                "layout/index.vue",
                "Vue Admin Layout",
                data.Id,
                PlatformType.WebMvvm, // 针对当前的vue管理页
                "",
                "Vue Admin Layout",
                data.TenantId
                );

            return(layout);
        }
        private async Task <Layout> SeedDefaultLayoutAsync(Data data, DataItem uiDataItem)
        {
            var layout = await RouteDataSeeder.SeedLayoutAsync(
                "Layout",
                "layout/index.vue",
                "Vue Admin Layout",
                data.Id,
                uiDataItem.Name,
                "",
                "Vue Admin Layout",
                data.TenantId
                );

            return(layout);
        }
        private async Task <Menu> SeedMenuAsync(
            Layout layout,
            Data data,
            string name,
            string path,
            string code,
            string component,
            string displayName,
            string redirect    = "",
            string description = "",
            Guid?parentId      = null,
            Guid?tenantId      = null,
            Dictionary <string, object> meta = null,
            string[] roles = null,
            Guid[] users   = null,
            bool isPublic  = false
            )
        {
            var menu = await RouteDataSeeder.SeedMenuAsync(
                layout,
                name,
                path,
                code,
                component,
                displayName,
                redirect,
                description,
                parentId,
                tenantId,
                isPublic
                );

            foreach (var item in data.Items)
            {
                menu.SetProperty(item.Name, item.DefaultValue);
            }
            if (meta != null)
            {
                foreach (var item in meta)
                {
                    menu.SetProperty(item.Key, item.Value);
                }
            }

            if (roles != null)
            {
                foreach (var role in roles)
                {
                    await RouteDataSeeder.SeedRoleMenuAsync(role, menu, tenantId);
                }
            }

            if (users != null)
            {
                foreach (var user in users)
                {
                    await RouteDataSeeder.SeedUserMenuAsync(user, menu, tenantId);
                }
            }

            return(menu);
        }