diff --git a/CoreCms.Net.Utility/Helper/GoodsHelper.cs b/CoreCms.Net.Utility/Helper/GoodsHelper.cs index 891155fc..de7045a0 100644 --- a/CoreCms.Net.Utility/Helper/GoodsHelper.cs +++ b/CoreCms.Net.Utility/Helper/GoodsHelper.cs @@ -80,6 +80,37 @@ namespace CoreCms.Net.Utility.Helper #endregion + #region 递归获取下级所有序列 + /// + /// 递归获取下级所有序列 + /// + /// + [Description("递归获取下级所有序列")] + public static List GetChildIds(List categories, int parentId) + { + var ids = new List { parentId }; + ids = GetChildrenIds(categories, parentId, ids); + return ids; + } + + /// + /// 迭代方法 + /// + /// + /// + /// + /// + private static List GetChildrenIds(List oldNavs, int parentId, List ids) + { + var model = oldNavs.Where(p => p.parentId == parentId).ToList(); + foreach (var item in model) + { + ids.Add(item.id); + GetChildrenIds(oldNavs, item.id, ids); + } + return ids; + } + #endregion #region 获取可用库存 /// @@ -120,16 +151,9 @@ namespace CoreCms.Net.Utility.Helper return url; } } - #endregion - - #region 小程序端获取编码后的分类集合 - - - #endregion #region 后端判断提交的商品属性值是否符合规则(判断内容,只允许中文,字母,数字,和-,/) - /// /// 判断内容,只允许中文,字母,数字,和-,/ /// @@ -139,17 +163,7 @@ namespace CoreCms.Net.Utility.Helper public static bool FilterChar(string inputValue) { return Regex.IsMatch(inputValue, "[`.~!@#$^&*()=|\"{}':;',\\[\\]<>?~!@#¥……&*&;|{}。*-+]+"); - //return Regex.IsMatch(inputValue, "[`.~!@#$^&*()=|\"{}':;',\\[\\]<>?~!@#¥……&*&;|{}。*-+]+"); - //if (Regex.IsMatch(inputValue, "[A-Za-z0-9\u4e00-\u9fa5-]+")) - //{ - // return Regex.Match(inputValue, "[A-Za-z0-9\u4e00-\u9fa5-]+").Value; - //} - //return ""; - //return Regex.IsMatch(inputValue, "[~!@#$%^&*()_+|<>,.?:;'\\[\\]{}\"]+"); - - //return Regex.IsMatch(inputValue, "[A-Za-z0-9\u4e00-\u9fa5-/]+"); } - #endregion diff --git a/CoreCms.Net.Web.Admin/Controllers/Good/CoreCmsGoodsController.cs b/CoreCms.Net.Web.Admin/Controllers/Good/CoreCmsGoodsController.cs index fd60f369..ea7cecd7 100644 --- a/CoreCms.Net.Web.Admin/Controllers/Good/CoreCmsGoodsController.cs +++ b/CoreCms.Net.Web.Admin/Controllers/Good/CoreCmsGoodsController.cs @@ -172,8 +172,18 @@ namespace CoreCms.Net.Web.Admin.Controllers var selectTreeSelectNodeId = Request.Form["selectTree_select_nodeId"].FirstOrDefault().ObjectToInt(0); if (selectTreeSelectNodeId > 0) @where = @where.And(p => p.goodsCategoryId == selectTreeSelectNodeId); //商品分类ID 关联category.id int + var goodsCategoryId = Request.Form["goodsCategoryId"].FirstOrDefault().ObjectToInt(0); - if (goodsCategoryId > 0) @where = @where.And(p => p.goodsCategoryId == goodsCategoryId); + if (goodsCategoryId > 0) + { + //获取全部数据缓存 + var categories = await _coreCmsGoodsCategoryServices.QueryAsync(true, true); + var ids = GoodsHelper.GetChildIds(categories, goodsCategoryId); + + @where = @where.And(p => ids.Contains(p.goodsCategoryId)); + } + + //商品类别ID 关联goods_type.id int var goodsTypeId = Request.Form["goodsTypeId"].FirstOrDefault().ObjectToInt(0); if (goodsTypeId > 0) @where = @where.And(p => p.goodsTypeId == goodsTypeId); diff --git a/CoreCms.Net.Web.WebApi/Controllers/GoodController.cs b/CoreCms.Net.Web.WebApi/Controllers/GoodController.cs index 5e827036..205b091e 100644 --- a/CoreCms.Net.Web.WebApi/Controllers/GoodController.cs +++ b/CoreCms.Net.Web.WebApi/Controllers/GoodController.cs @@ -25,6 +25,7 @@ using CoreCms.Net.Model.FromBody; using CoreCms.Net.Model.ViewModels.DTO; using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Utility.Extensions; +using CoreCms.Net.Utility.Helper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; @@ -195,16 +196,9 @@ namespace CoreCms.Net.Web.WebApi.Controllers className = category.name; } - var childs = await _goodsCategoryServices.QueryListByClauseAsync(p => p.parentId == catId, p => p.sort, OrderByType.Asc, true, true); - if (childs.Any()) - { - var ids = childs.Select(p => p.id).ToList(); - where = where.And(p => ids.Contains(p.goodsCategoryId) || p.goodsCategoryId == catId); - } - else - { - where = where.And(p => p.goodsCategoryId == catId); - } + var categories = await _goodsCategoryServices.QueryAsync(true, true); + var ids = GoodsHelper.GetChildIds(categories, catId); + where = where.And(p => ids.Contains(p.goodsCategoryId)); } } if (!string.IsNullOrWhiteSpace(obj.brandId))