public virtual async Task <MenuDto> CreateAsync(MenuCreateDto input) { var layout = await LayoutRepository.GetAsync(input.LayoutId); var data = await DataRepository.GetAsync(layout.DataId); var menu = await MenuManager.CreateAsync( GuidGenerator.Create(), layout.Id, input.Path, input.Name, input.Component, input.DisplayName, input.Redirect, input.Description, layout.PlatformType, input.ParentId, CurrentTenant.Id, input.IsPublic); // 利用布局约定的数据字典来校验必须的路由元数据,元数据的加入是为了适配多端路由 foreach (var dataItem in data.Items) { if (!input.Meta.TryGetValue(dataItem.Name, out object meta)) { if (!dataItem.AllowBeNull) { throw new BusinessException(PlatformErrorCodes.MenuMissingMetadata) .WithData("Name", dataItem.DisplayName) .WithData("DataName", data.DisplayName); } // 是否需要设定默认值 menu.SetProperty(dataItem.Name, dataItem.DefaultValue); } else { // 需要检查参数是否有效 menu.SetProperty(dataItem.Name, DataItemMapping.MapToString(dataItem.ValueType, meta)); } } await CurrentUnitOfWork.SaveChangesAsync(); return(ObjectMapper.Map <Menu, MenuDto>(menu)); }
public virtual async Task <MenuDto> CreateAsync(MenuCreateDto input) { return(await MenuAppService.CreateAsync(input)); }