diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Home.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Home.razor index e7c88e0..14bb3c0 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Pages/Home.razor +++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Home.razor @@ -27,6 +27,9 @@
  • 货币设置
  • +
  • + 国家管理 +
  • @code { diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CountryEdit.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CountryEdit.razor index 7e0e1ae..030da68 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CountryEdit.razor +++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CountryEdit.razor @@ -10,7 +10,7 @@ 管理后台 - 系统配置 + 系统配置 国家管理 @@ -19,7 +19,7 @@
    - @if (Id > 0 && languageList.Any()) + @if (Id > 0 && languageList.Count() > 0) { @@ -82,7 +82,7 @@ CountryModel model { get; set; } = new(); Form editform = null!; - Country Country = new(); + CountryLocalizedModel country = new(); List languageList = new(); @@ -96,6 +96,7 @@ protected override void OnParametersSet() { + _ = LoadLanguage(); if (Id > 0) { LoadData(); @@ -110,28 +111,30 @@ if (apiResult.Success) { languageList = apiResult.Data ?? new List(); + StateHasChanged(); } } async void LoadData() { pageLoading = true; - var url = $"/api/currency/{Id}"; - var apiResult = await HttpService.Get>(url); + var url = $"/api/country/detail?id={Id}"; + var apiResult = await HttpService.Get>(url); if (apiResult.Success) { if (apiResult.Data == null) { - Navigation.NavigateTo($"/currency/create"); + Navigation.NavigateTo($"/country/create"); } else { + country = apiResult.Data; model = apiResult.Data.Adapt(); } } else { - Navigation.NavigateTo($"/currency/create"); + Navigation.NavigateTo($"/country/create"); } pageLoading = false; @@ -143,16 +146,14 @@ if (editform.Validate()) { saving = true; - var url = $"api/currency/save"; + var url = $"api/country/save"; var result = new ApiResult(); result = await HttpService.Post>(url, model); - - - if (result.Code == (int)ResultCode.Success) + if (result.Success) { saving = false; await ModalService.InfoAsync(new ConfirmOptions() { Title = "提示", Content = "数据提交成功!" }); - Navigation.NavigateTo($"/currency/list"); + Navigation.NavigateTo($"/country/list"); } else { @@ -167,7 +168,7 @@ if (key != "0") { model.LanguageId = key; - var data = model.Localized.Where(p => p.LanguageId == key.ToInt()).ToList(); + var data = country.Locales.Where(p => p.LanguageId == key.ToInt()).ToList(); if (data.Any()) { var name = nameof(model.Name); @@ -181,10 +182,8 @@ } else { - // model = Mapper.Map(model); - - // model.LanguageId = key; - // model.IsEdit = true; + model = country.Adapt(); + model.LanguageId = key; } } diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CountryList.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CountryList.razor index 9d77268..85d67d4 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CountryList.razor +++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CountryList.razor @@ -8,8 +8,8 @@ - Home - 系统配置 + 管理后台 + 系统配置 国家管理 @@ -22,6 +22,8 @@ + +
    @@ -30,7 +32,8 @@ - +
    +
    @@ -121,10 +124,10 @@ async Task LoadListAsync() { + pageLoading = true; try { - pageLoading = true; - var url = "/api/country/search"; + var url = "/api/country/searh"; var apiResult = await HttpService.GetPagingList(url, search, Page.GetValueOrDefault(1), PageSize.GetValueOrDefault(20)); if (apiResult.Success) { diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CurrencyList.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CurrencyList.razor index 2bd8ffc..078f360 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CurrencyList.razor +++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/CurrencyList.razor @@ -7,8 +7,8 @@ - Home - 系统配置 + 管理后台 + 系统配置 货币管理 diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/StateProvinceList.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/StateProvinceList.razor index ccbac73..b33b463 100644 --- a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/StateProvinceList.razor +++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/StateProvinceList.razor @@ -8,8 +8,8 @@ - Home - 系统配置 + 管理后台 + 系统配置 州省管理 diff --git a/Atomx.Admin/Atomx.Admin/Controllers/AreaController.cs b/Atomx.Admin/Atomx.Admin/Controllers/AreaController.cs index ad1efb4..f3b8f97 100644 --- a/Atomx.Admin/Atomx.Admin/Controllers/AreaController.cs +++ b/Atomx.Admin/Atomx.Admin/Controllers/AreaController.cs @@ -101,6 +101,49 @@ namespace Atomx.Admin.Controllers return new JsonResult(result); } + /// + /// 通过ID获取数据 + /// + /// + /// + [HttpGet] + public IActionResult Get(long id) + { + var result = new ApiResult(); + var data = _dbContext.Areas.SingleOrDefault(p => p.Id == id); + if (data == null) + { + return new JsonResult(new ApiResult().IsFail("数据不存在", null)); + } + + result = result.IsSuccess(data); + return new JsonResult(result); + } + + + /// + /// 通过ID获取详情,含多语言 + /// + /// + /// + [HttpGet("detail")] + public IActionResult Detail(long id) + { + var result = new ApiResult(); + var data = _dbContext.Areas.SingleOrDefault(p => p.Id == id); + if (data == null) + { + return new JsonResult(new ApiResult().IsFail("数据不存在", null)); + } + var localizedList = _dbContext.LocalizedProperties.Where(p => p.EntityId == id).ToList(); + var model = _mapper.Map(data); + model.Locales = localizedList; + + result = result.IsSuccess(model); + + return new JsonResult(result); + } + /// /// 新增编辑数据 diff --git a/Atomx.Admin/Atomx.Admin/Controllers/CategoryController.cs b/Atomx.Admin/Atomx.Admin/Controllers/CategoryController.cs index 097ff51..7347923 100644 --- a/Atomx.Admin/Atomx.Admin/Controllers/CategoryController.cs +++ b/Atomx.Admin/Atomx.Admin/Controllers/CategoryController.cs @@ -1,5 +1,4 @@ using Atomx.Admin.Client.Models; -using Atomx.Admin.Client.Validators; using Atomx.Admin.Services; using Atomx.Common.Entities; using Atomx.Common.Models; diff --git a/Atomx.Admin/Atomx.Admin/Controllers/CountryController.cs b/Atomx.Admin/Atomx.Admin/Controllers/CountryController.cs index 4856fa1..29e2727 100644 --- a/Atomx.Admin/Atomx.Admin/Controllers/CountryController.cs +++ b/Atomx.Admin/Atomx.Admin/Controllers/CountryController.cs @@ -2,10 +2,12 @@ using Atomx.Admin.Services; using Atomx.Common.Constants; using Atomx.Common.Entities; +using Atomx.Common.Enums; using Atomx.Common.Models; using Atomx.Data; using Atomx.Data.CacheServices; using Atomx.Data.Services; +using Atomx.Utils.Extension; using FluentValidation; using MapsterMapper; using Microsoft.AspNetCore.Authorization; @@ -60,7 +62,6 @@ namespace Atomx.Admin.Controllers /// /// [HttpPost("searh")] - [Authorize(Policy = Permissions.User.View)] public IActionResult Search(CountrySearch search, int page, int size = 20) { if (page < 1) @@ -88,16 +89,36 @@ namespace Atomx.Admin.Controllers } /// - /// 详情,含多语言 + /// 通过ID获取数据 /// /// /// - [HttpPost("detail")] + [HttpGet] + public IActionResult Get(long id) + { + var result = new ApiResult(); + var data = _dbContext.Countries.SingleOrDefault(p => p.Id == id); + if (data == null) + { + return new JsonResult(new ApiResult().IsFail("数据不存在", null)); + } + + result = result.IsSuccess(data); + return new JsonResult(result); + } + + + /// + /// 通过ID获取详情,含多语言 + /// + /// + /// + [HttpGet("detail")] public IActionResult Detail(long id) { var result = new ApiResult(); var data = _dbContext.Countries.SingleOrDefault(p => p.Id == id); - if(data == null) + if (data == null) { return new JsonResult(new ApiResult().IsFail("数据不存在", null)); } @@ -126,7 +147,7 @@ namespace Atomx.Admin.Controllers var message = validation.Errors.FirstOrDefault()?.ErrorMessage ?? string.Empty; return new JsonResult(new ApiResult().IsFail(message, null)); } - var data = _dbContext.Countries.SingleOrDefault(p => p.Name == model.Name && p.Id != model.Id); + var data = _dbContext.Countries.SingleOrDefault(p => p.Name == model.Name && p.Id != model.Id); if (data != null) { return new JsonResult(new ApiResult().IsFail("当前数据名称,请认真检查", null)); @@ -139,9 +160,74 @@ namespace Atomx.Admin.Controllers return new JsonResult(new ApiResult().IsFail("数据不存在", null)); } - data = _mapper.Map(model, data); + if (model.LanguageId.ToInt() == 0) + { + data = _mapper.Map(model, data); + _dbContext.SaveChanges(); + } + else + { + var localizedList = _dbContext.LocalizedProperties.Where(p => p.LanguageId == model.LanguageId.ToInt() && p.EntityId == model.Id).ToList(); + var name = nameof(model.Name); - _dbContext.SaveChanges(); + var nameData = localizedList.SingleOrDefault(p => p.Key == name); + + var newLocalizedList = new List(); + + var addLocalizedList = new List(); + + if (nameData == null) + { + if (!string.IsNullOrEmpty(model.Name)) + { + nameData = new LocalizedProperty() + { + Id = _idCreator.CreateId(), + EntityId = model.Id, + LanguageId = model.LanguageId.ToInt(), + Type = (int)LocalizedType.Country, + Key = name, + Value = model.Name + }; + addLocalizedList.Add(nameData); + } + } + else + { + if (!string.IsNullOrEmpty(model.Name)) + { + nameData.Value = model.Name; + } + else + { + _dbContext.LocalizedProperties.Remove(nameData); + } + + } + if (nameData != null) + { + newLocalizedList.Add(nameData); + } + + if (addLocalizedList.Any()) + { + _dbContext.LocalizedProperties.AddRange(addLocalizedList); + } + + data.Enabled = model.Enabled; + data.DisplayOrder = model.DisplayOrder; + + + try + { + + _dbContext.SaveChanges(); + } + catch (Exception ex) + { + Console.WriteLine($"{ex.Message}"); + } + } } else diff --git a/Atomx.Admin/Atomx.Admin/Controllers/ProductController.cs b/Atomx.Admin/Atomx.Admin/Controllers/ProductController.cs index 384808d..c6847c6 100644 --- a/Atomx.Admin/Atomx.Admin/Controllers/ProductController.cs +++ b/Atomx.Admin/Atomx.Admin/Controllers/ProductController.cs @@ -1,5 +1,4 @@ using Atomx.Admin.Client.Models; -using Atomx.Admin.Client.Validators; using Atomx.Admin.Services; using Atomx.Common.Entities; using Atomx.Common.Enums; diff --git a/Atomx.Admin/Atomx.Admin/Controllers/StateProvinceController.cs b/Atomx.Admin/Atomx.Admin/Controllers/StateProvinceController.cs index 6664ef8..d6c531c 100644 --- a/Atomx.Admin/Atomx.Admin/Controllers/StateProvinceController.cs +++ b/Atomx.Admin/Atomx.Admin/Controllers/StateProvinceController.cs @@ -91,6 +91,49 @@ namespace Atomx.Admin.Controllers return new JsonResult(result); } + /// + /// 通过ID获取数据 + /// + /// + /// + [HttpGet] + public IActionResult Get(long id) + { + var result = new ApiResult(); + var data = _dbContext.StateProvinces.SingleOrDefault(p => p.Id == id); + if (data == null) + { + return new JsonResult(new ApiResult().IsFail("数据不存在", null)); + } + + result = result.IsSuccess(data); + return new JsonResult(result); + } + + + /// + /// 通过ID获取详情,含多语言 + /// + /// + /// + [HttpGet("detail")] + public IActionResult Detail(long id) + { + var result = new ApiResult(); + var data = _dbContext.StateProvinces.SingleOrDefault(p => p.Id == id); + if (data == null) + { + return new JsonResult(new ApiResult().IsFail("数据不存在", null)); + } + var localizedList = _dbContext.LocalizedProperties.Where(p => p.EntityId == id).ToList(); + var model = _mapper.Map(data); + model.Locales = localizedList; + + result = result.IsSuccess(model); + + return new JsonResult(result); + } + /// /// 新增编辑数据 diff --git a/Atomx.Common/Enums/LocalizedType.cs b/Atomx.Common/Enums/LocalizedType.cs index 2b51d33..cd1c1bb 100644 --- a/Atomx.Common/Enums/LocalizedType.cs +++ b/Atomx.Common/Enums/LocalizedType.cs @@ -3,5 +3,8 @@ public enum LocalizedType { None, + Country, + StateProvince, + AreaCity } } diff --git a/Atomx.Common/Models/AreaLocalizedModel.cs b/Atomx.Common/Models/AreaLocalizedModel.cs new file mode 100644 index 0000000..1f00263 --- /dev/null +++ b/Atomx.Common/Models/AreaLocalizedModel.cs @@ -0,0 +1,9 @@ +using Atomx.Common.Entities; + +namespace Atomx.Common.Models +{ + public class AreaLocalizedModel:Area + { + public List Locales { get; set; } = new List(); + } +} diff --git a/Atomx.Common/Models/CategoryLocalizedModel.cs b/Atomx.Common/Models/CategoryLocalizedModel.cs new file mode 100644 index 0000000..02bdd63 --- /dev/null +++ b/Atomx.Common/Models/CategoryLocalizedModel.cs @@ -0,0 +1,9 @@ +using Atomx.Common.Entities; + +namespace Atomx.Common.Models +{ + public class CategoryLocalizedModel : Category + { + public List Locales { get; set; } = new List(); + } +} diff --git a/Atomx.Common/Models/StateProvinceLocalizedModel.cs b/Atomx.Common/Models/StateProvinceLocalizedModel.cs new file mode 100644 index 0000000..cd24598 --- /dev/null +++ b/Atomx.Common/Models/StateProvinceLocalizedModel.cs @@ -0,0 +1,9 @@ +using Atomx.Common.Entities; + +namespace Atomx.Common.Models +{ + public class StateProvinceLocalizedModel : StateProvince + { + public List Locales { get; set; } = new List(); + } +}