This commit is contained in:
2026-01-05 12:44:01 +08:00
parent 41a939176e
commit ea541fb6e4
14 changed files with 171 additions and 467 deletions

View File

@@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Localization;
using System.Threading.Tasks;
namespace Atomx.Admin.Controllers
{
@@ -60,6 +61,21 @@ namespace Atomx.Admin.Controllers
_localizer = localizer;
}
/// <summary>
/// 获取省份-城市树形数据
/// </summary>
/// <param name="search"></param>
/// <param name="page"></param>
/// <param name="size"></param>
/// <returns></returns>
[HttpGet("tree/{countryId}")]
public async Task<IActionResult> GetAreatree(long countryId)
{
var result = new ApiResult<List<KeyValueTree>>();
var list = await _cacheService.GetAreaTree(countryId);
return new JsonResult(result.IsSuccess(list));
}
/// <summary>
/// 数据查询
/// </summary>
@@ -67,8 +83,8 @@ namespace Atomx.Admin.Controllers
/// <param name="page"></param>
/// <param name="size"></param>
/// <returns></returns>
[HttpPost("search")]
public IActionResult Search(AreaSearch search, int page, int size = 20)
[HttpPost("stateprovince/search")]
public async Task<IActionResult> StateProvinceSearch(AreaSearch search, int page, int size = 20)
{
if (page < 1)
{
@@ -77,9 +93,83 @@ namespace Atomx.Admin.Controllers
var result = new ApiResult<PagingList<AreaItem>>();
var list = new PagingList<AreaItem>() { Index = page, Size = size };
var countries = new List<Country>();
var stateProvices = new List<StateProvince>();
var query = from p in _dbContext.Areas
where p.StateProvinceId == 0
select p;
if (!string.IsNullOrEmpty(search.Name))
{
query = from p in query
where p.Name.Contains(search.Name)
select p;
}
if (search.CountryId > 0)
{
query = from p in query
where p.CountryId == search.CountryId
select p;
}
list.Count = query.Count();
var data = query.OrderByDescending(p => p.DisplayOrder).Skip((page - 1) * size).Take(size).ToList();
if (search.CountryId > 0)
{
var country = _dbContext.Countries.SingleOrDefault(p => p.Id == search.CountryId);
if (country != null)
{
countries.Add(country);
}
}
else
{
var countryIds = data.Select(p => p.CountryId).Distinct().ToList();
countries = _dbContext.Countries.Where(p => countryIds.Contains(p.Id)).ToList();
}
foreach (var item in data)
{
var model = _mapper.Map<AreaItem>(item);
var country = countries.SingleOrDefault(p => p.Id == item.CountryId);
if (country != null)
{
model.CountryName = country.Name;
}
var state = await _cacheService.GetStateProvince(item.CountryId, item.ParentId);
if (state != null)
{
model.StateProvinceName = state.Name;
}
list.Items.Add(model);
}
result = result.IsSuccess(list);
return new JsonResult(result);
}
/// <summary>
/// 数据查询
/// </summary>
/// <param name="search"></param>
/// <param name="page"></param>
/// <param name="size"></param>
/// <returns></returns>
[HttpPost("search")]
public async Task<IActionResult> SearchAsync(AreaSearch search, int page, int size = 20)
{
if (page < 1)
{
page = 1;
}
var result = new ApiResult<PagingList<AreaItem>>();
var list = new PagingList<AreaItem>() { Index = page, Size = size };
var countries = new List<Country>();
var query = from p in _dbContext.Areas
where p.StateProvinceId != 0
select p;
if (!string.IsNullOrEmpty(search.Name))
@@ -98,7 +188,7 @@ namespace Atomx.Admin.Controllers
if (search.StateProvinceId > 0)
{
query = from p in query
where p.StateProvinceId == search.StateProvinceId
where p.ParentId == search.StateProvinceId
select p;
}
list.Count = query.Count();
@@ -118,20 +208,6 @@ namespace Atomx.Admin.Controllers
countries = _dbContext.Countries.Where(p => countryIds.Contains(p.Id)).ToList();
}
if (search.StateProvinceId > 0)
{
var state = _dbContext.StateProvinces.SingleOrDefault(p => p.Id == search.StateProvinceId);
if (state != null)
{
stateProvices.Add(state);
}
}
else
{
var stateIds = data.Select(p => p.StateProvinceId).Distinct().ToList();
stateProvices = _dbContext.StateProvinces.Where(p => stateIds.Contains(p.Id)).ToList();
}
foreach (var item in data)
{
var model = _mapper.Map<AreaItem>(item);
@@ -140,7 +216,7 @@ namespace Atomx.Admin.Controllers
{
model.CountryName = country.Name;
}
var state = stateProvices.SingleOrDefault(p => p.Id == item.StateProvinceId);
var state = await _cacheService.GetStateProvince(item.CountryId, item.ParentId);
if (state != null)
{
model.StateProvinceName = state.Name;
@@ -196,14 +272,13 @@ namespace Atomx.Admin.Controllers
return new JsonResult(result);
}
/// <summary>
/// 新增编辑数据
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost("save")]
public IActionResult AddressEdit(AreaModel model)
public IActionResult Edit(AreaModel model)
{
var result = new ApiResult<bool>();
var validation = _validator.Validate(model);
@@ -212,15 +287,13 @@ namespace Atomx.Admin.Controllers
var message = validation.Errors.FirstOrDefault()?.ErrorMessage ?? string.Empty;
return new JsonResult(new ApiResult<string>().IsFail(message, null));
}
var data = _dbContext.Areas.SingleOrDefault(p => p.CountryId == model.CountryId && p.StateProvinceId == model.StateProvinceId && p.Name == model.Name && p.Id != model.Id);
var data = _dbContext.Areas.SingleOrDefault(p => p.CountryId == model.CountryId && p.ParentId == model.ParentId && p.Name == model.Name && p.Id != model.Id);
if (data != null)
{
return new JsonResult(new ApiResult<string>().IsFail("当前站点语言下已经存在这个配置,请认真检查", null));
}
if (model.Id > 0)
{
data = _dbContext.Areas.SingleOrDefault(p => p.Id == model.Id);
if (data == null)
{
@@ -229,7 +302,7 @@ namespace Atomx.Admin.Controllers
data = _mapper.Map(model, data);
var parent = _dbContext.Categories.Where(p => p.Id == model.ParentId).SingleOrDefault();
var parent = _dbContext.Areas.Where(p => p.Id == model.ParentId).SingleOrDefault();
if (parent == null)
{
data.Depth = 0;
@@ -237,6 +310,15 @@ namespace Atomx.Admin.Controllers
}
else
{
if (parent.StateProvinceId == 0)
{
data.StateProvinceId = parent.Id;
}
else
{
data.StateProvinceId = parent.StateProvinceId;
}
data.Depth = parent.Depth + 1;
data.Path = $"{parent.Path},{data.Id}";
}
@@ -249,7 +331,7 @@ namespace Atomx.Admin.Controllers
data = _mapper.Map<Area>(model);
data.Id = _idCreator.CreateId();
var parent = _dbContext.Categories.Where(p => p.Id == data.ParentId).SingleOrDefault();
var parent = _dbContext.Areas.Where(p => p.Id == data.ParentId).SingleOrDefault();
if (parent == null)
{
data.Depth = 0;
@@ -257,6 +339,14 @@ namespace Atomx.Admin.Controllers
}
else
{
if (parent.StateProvinceId == 0)
{
data.StateProvinceId = parent.Id;
}
else
{
data.StateProvinceId = parent.StateProvinceId;
}
data.Depth = parent.Depth + 1;
data.Path = $"{parent.Path},{data.Id}";
}