From c71ae2c923f9997bf24da1c4d5a08546076e2abf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BE=AF=E7=82=AF?= Date: Tue, 22 Jul 2025 16:01:52 +0800 Subject: [PATCH] =?UTF-8?q?1=E4=BF=AE=E6=94=B9=E6=A8=A1=E6=9D=BF=E6=95=85?= =?UTF-8?q?=E9=9A=9C=202=E7=BB=9F=E4=B8=80=E8=A7=84=E8=8C=83=E5=91=BD?= =?UTF-8?q?=E5=90=8D=203=E5=B1=8F=E8=94=BD=E6=9C=8D=E5=8A=A1=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3,=E8=A7=84=E8=8C=83=E6=9C=8D=E5=8A=A1=E5=91=BD?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SeedData/SysCodeGenTemplateSeedData.cs | 4 +- .../wwwroot/template/service_Service.cs.vm | 83 ++++++++++++++++--- .../wwwroot/template/web_views_List.vue.vm | 2 +- .../template/web_views_TreeList.vue.vm | 8 +- .../template/web_views_editDialog.vue.vm | 2 +- .../wwwroot/template/web_views_index.vue.vm | 2 +- 6 files changed, 81 insertions(+), 20 deletions(-) diff --git a/Admin.NET/Admin.NET.Core/SeedData/SysCodeGenTemplateSeedData.cs b/Admin.NET/Admin.NET.Core/SeedData/SysCodeGenTemplateSeedData.cs index 9b397eb9..f50f6c4f 100644 --- a/Admin.NET/Admin.NET.Core/SeedData/SysCodeGenTemplateSeedData.cs +++ b/Admin.NET/Admin.NET.Core/SeedData/SysCodeGenTemplateSeedData.cs @@ -59,7 +59,7 @@ public class SysCodeGenTemplateSeedData : ISqlSugarEntitySeedData /// /// - [ApiDescriptionSettings(Name = "page", Description = "分页查询", Order = 1000), HttpPost] + [ApiDescriptionSettings(Name = "Page", Description = "分页查询", Order = 1000), HttpPost] [DisplayName("分页查询@(@Model.BusName)")] public async Task> Page(Page@(@Model.ClassName)Input input) { @@ -98,7 +98,7 @@ public partial class @(@Model.ClassName)Service : IDynamicApiController, ITransi /// /// /// - [ApiDescriptionSettings(Name = "add", Description = "增加@(@Model.BusName)", Order = 990), HttpPost] + [ApiDescriptionSettings(Name = "Add", Description = "增加@(@Model.BusName)", Order = 990), HttpPost] [DisplayName("增加@(@Model.BusName)")] public async Task Add(Add@(@Model.ClassName)Input input) { @@ -120,7 +120,7 @@ public partial class @(@Model.ClassName)Service : IDynamicApiController, ITransi /// /// /// - [ApiDescriptionSettings(Name = "delete", Description = "删除(@Model.BusName)", Order = 980), HttpPost] + [ApiDescriptionSettings(Name = "Delete", Description = "删除(@Model.BusName)", Order = 980), HttpPost] [DisplayName("删除@(@Model.BusName)")] public async Task Delete(Delete@(@Model.ClassName)Input input) { @@ -138,7 +138,7 @@ if (@column.ColumnKey == "True"){ /// /// /// - [ApiDescriptionSettings(Name = "update", Description = "更新@(@Model.BusName)", Order = 970), HttpPost] + [ApiDescriptionSettings(Name = "Update", Description = "更新@(@Model.BusName)", Order = 970), HttpPost] [DisplayName("更新@(@Model.BusName)")] public async Task Update(Update@(@Model.ClassName)Input input) { @@ -160,7 +160,7 @@ if (@column.ColumnKey == "True"){ /// /// /// - [ApiDescriptionSettings(Name = "detail", Description = "获取@(@Model.BusName)", Order = 960), HttpGet] + [ApiDescriptionSettings(Name = "Detail", Description = "获取@(@Model.BusName)", Order = 960), HttpGet] [DisplayName("获取@(@Model.BusName)")] public async Task<@(@Model.ClassName)> Detail([FromQuery] QueryById@(@Model.ClassName)Input input) { @@ -170,7 +170,7 @@ if (@column.ColumnKey == "True"){ } } } - + /*HJ:不要,有分页了,列表多余的 /// /// 获取@(@Model.BusName)列表 /// @@ -182,7 +182,9 @@ if (@column.ColumnKey == "True"){ { return await @(@Model.ClassName)Mid.GetQuery(_@(@Model.LowerClassName)Rep, input).OrderBuilder(input).ToListAsync(); } + */ + /*HJ:不要这应该在视图里,或者用ReZero里用 /// /// 获取@(@Model.BusName) /// @@ -216,7 +218,9 @@ if (@column.ColumnKey == "True"){ }); return await querystats.ToListAsync(); } - + */ + + /*HJ:不要危险度大,容易SQL注入,且不符合规范 /// /// 根据输入参数获取@(@Model.BusName)统计 /// 支持双模式聚合配置: @@ -299,6 +303,8 @@ if (@column.ColumnKey == "True"){ @:return await query.ToListAsync(); } } + + */ @foreach (var column in Model.TableField){ if(@column.EffectType == "ForeignKey" && (@column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")){ @@ -328,7 +334,7 @@ if(@column.EffectType == "Upload"){ @:/// @:/// @:/// - @:[ApiDescriptionSettings(Name = "upload@(@column.PropertyName)", Description = "上传@(@column.ColumnComment)", Order = 930), HttpPost] + @:[ApiDescriptionSettings(Name = "Upload@(@column.PropertyName)", Description = "上传@(@column.ColumnComment)", Order = 930), HttpPost] @:[DisplayName("上传@(@column.ColumnComment)")] @:public async Task Upload@(@column.PropertyName)([Required] IFormFile file) @:{ @@ -346,11 +352,66 @@ if(@column.EffectType == "ApiTreeSelector" && !definedObjects.ContainsKey("@(@co @:/// @:/// @:/// - @:[ApiDescriptionSettings(Name = "GetTreeList", Description = "获取@(@Model.BusName)树列表", Order = 960), HttpPost] + @:[ApiDescriptionSettings(Name = "Tree", Description = "获取@(@Model.BusName)树列表", Order = 960), HttpPost] @:[DisplayName("获取@(@Model.BusName)树列表")] - @:public async Task GetTreeList() + @:public async Task Tree(Page@(@Model.ClassName)Input input) @:{ - @:return await _@(@Model.LowerClassName)Rep.AsQueryable().OrderBy(u => new { u.OrderNo, u.Id }).ToTreeAsync(u => u.Children, u => u.Pid, 0, u => u.Id); + + @:// 有筛选条件时返回list列表(防止构造不出树) + @:var isSearch=false; + + foreach (var columnTree in Model.TableField){ + if (@columnTree.QueryWhether == "Y"){ + if (@columnTree.NetType?.TrimEnd('?') == "string"){ + @:if(!string.IsNullOrWhiteSpace(input.@columnTree.PropertyName))isSearch=true; + + }else if((@columnTree.NetType?.TrimEnd('?') == "int" || @columnTree.NetType?.TrimEnd('?') == "long")){ + @:if(input.@columnTree.PropertyName>0)isSearch=true; + + }else if((@columnTree.NetType?.TrimEnd('?') == "DateTime" && @columnTree.QueryType == "~")){ + @:if(input.@(@columnTree.PropertyName)Range != null)isSearch=true; + } }} + + + @:if (isSearch||!string.IsNullOrEmpty(input.SearchKey?.Trim())) + @:{ + + @:return await _@(@Model.LowerClassName)Rep.AsQueryable() + + @{string conditionFlag = "";} + @if (haveLikeCdt) { + @:.WhereIF(!string.IsNullOrEmpty(input.SearchKey?.Trim()), u => + @foreach (var columnTree in Model.TableField){ + if (@columnTree.QueryWhether == "Y" && columnTree.QueryType == "like"){ + @:@(conditionFlag)u.@(@columnTree.PropertyName).Contains(input.SearchKey.Trim()) + conditionFlag="|| "; + } + } + @:) + } + foreach (var columnTree in Model.TableField){ + if (@columnTree.QueryWhether == "Y"){if (@columnTree.NetType?.TrimEnd('?') == "string"){if(@columnTree.QueryType == "like"){ + @:.WhereIF(!string.IsNullOrWhiteSpace(input.@columnTree.PropertyName), u => u.@(@columnTree.PropertyName).Contains(input.@(@columnTree.PropertyName).Trim())) + }else{ + @:.WhereIF(!string.IsNullOrWhiteSpace(input.@columnTree.PropertyName), u => u.@(@columnTree.PropertyName) @columnTree.QueryType input.@(@columnTree.PropertyName)) + }}else if(@columnTree.NetType?.TrimEnd('?') == "int" || @columnTree.NetType?.TrimEnd('?') == "long"){ + @:.WhereIF(input.@columnTree.PropertyName>0, u => (int)u.@(@columnTree.PropertyName) @columnTree.QueryType input.@(@columnTree.PropertyName)) + }else if(@columnTree.NetType?.TrimEnd('?') == "DateTime" && @columnTree.QueryType == "~"){ + @:.WhereIF(input.@(@columnTree.PropertyName)Range != null && input.@(@columnTree.PropertyName)Range.Length == 2, u => u.@(@columnTree.PropertyName) >= input.@(@columnTree.PropertyName)Range[0] && u.@(@columnTree.PropertyName) <= input.@(@columnTree.PropertyName)Range[1]) + }else if(@columnTree.NetType?.TrimEnd('?').EndsWith("Enum") == true) { + @:.WhereIF(input.@(@columnTree.PropertyName).HasValue, u => u.@(@columnTree.PropertyName) @columnTree.QueryType input.@(@columnTree.PropertyName)) + }}} + //HJ @:.OrderBy(u => u.OrderNo) + @:.OrderByDescending(u => u.Id) + @:.Distinct().ToListAsync(); + @:} + + @:// 无筛选条件时返回树列表 + @:return await _@(@Model.LowerClassName)Rep.AsQueryable() + //HJ @:.OrderBy(u => u.OrderNo) + @:.OrderByDescending(u => u.Id) + @:.ToTreeAsync(u => u.Children, u => u.Pid, 0, u => u.Id); + @:} } } diff --git a/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_List.vue.vm b/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_List.vue.vm index 2aeab8c8..08857bd9 100644 --- a/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_List.vue.vm +++ b/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_List.vue.vm @@ -206,7 +206,7 @@ import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table'; import { useVxeTable } from '/@@/hooks/useVxeTableOptionsHook'; import { Local } from '/@@/utils/storage'; import { auth } from '/@@/utils/authFunction'; -import EditDialog from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/editDialog.vue'; +import EditDialog from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/edit.vue'; import ModifyRecord from '/@@/components/table/modifyRecord.vue'; @if(@Model.TableField.Any(x=>x.EffectType == "DatePicker")){ diff --git a/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_TreeList.vue.vm b/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_TreeList.vue.vm index 82788ea4..50a475bd 100644 --- a/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_TreeList.vue.vm +++ b/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_TreeList.vue.vm @@ -52,7 +52,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -210,7 +210,7 @@ import { useUserInfo } from '/@@/stores/userInfo'; import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table'; import { useVxeTable } from '/@@/hooks/useVxeTableOptionsHook'; import { Local } from '/@@/utils/storage'; -import EditDialog from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/editDialog.vue'; +import EditDialog from '/@@/views/@(@Model.PagePath)/@(@Model.LowerClassName)/component/edit.vue'; import ModifyRecord from '/@@/components/table/modifyRecord.vue'; @if(@Model.TableField.Any(x=>x.EffectType == "DatePicker")){ @@ -368,7 +368,7 @@ onMounted(() => { const handleQueryApi = async () => { const params = Object.assign(state.queryParams); @if (@Model.IsApiService) { - @:return getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)GetTreeListPost(params); + @:return getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)TreePost(params); } else { @:return treelist@(@Model.ClassName)(params); } diff --git a/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_editDialog.vue.vm b/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_editDialog.vue.vm index 931bc9b6..5c7cdf73 100644 --- a/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_editDialog.vue.vm +++ b/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_editDialog.vue.vm @@ -417,7 +417,7 @@ if(@column.EffectType == "ApiTreeSelector" && !definedObjects.ContainsKey("defin @{definedObjects.Add("define_get@(@column.FkEntityName)TreeData", 1);} @:const @LowerFirstLetter(@column.FkEntityName)TreeData = ref([]); @:const get@(@column.FkEntityName)TreeData = async () => { - @:let list = await getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)GetTreeListPost(); + @:let list = await getAPI(@(@Model.ClassName)Api).api@(@Model.ClassName)TreePost(); @:@LowerFirstLetter(@column.FkEntityName)TreeData.value = list.data.result ?? []; @:}; @:get@(@column.FkEntityName)TreeData(); diff --git a/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_index.vue.vm b/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_index.vue.vm index 37621cbc..5812422c 100644 --- a/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_index.vue.vm +++ b/Admin.NET/Admin.NET.Web.Entry/wwwroot/template/web_views_index.vue.vm @@ -25,7 +25,7 @@