diff --git a/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs b/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs index 0a4ccb7..49eecc9 100644 --- a/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs +++ b/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs @@ -202,12 +202,7 @@ namespace ZR.Admin.WebApi.Controllers } var genTable = genTableDto.Adapt().ToUpdate(HttpContext); - genTable.Options = JsonConvert.SerializeObject(new - { - parentMenuId = genTableDto.ParentMenuId, - sortField = genTableDto.SortField, - sortType = genTable.SortType - }); + genTable.Options = JsonConvert.SerializeObject(genTableDto.Params); DbResult result = GenTableService.UseTran(() => { int rows = GenTableService.UpdateGenTable(genTable); diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt index 20e77c9..0a5a915 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplControllers.txt @@ -51,6 +51,21 @@ namespace ${options.ApiControllerNamespace}.Controllers return SUCCESS(response); } +$if(genTable.TplCategory == "tree") + /// + /// 查询${genTable.FunctionName}列表树 + /// + /// + /// + [HttpGet("treeList")] + [ActionPermissionFilter(Permission = "${replaceDto.PermissionPrefix}:list")] + public IActionResult QueryTree${replaceDto.ModelTypeName}([FromQuery] ${replaceDto.ModelTypeName}QueryDto parm) + { + var response = _${replaceDto.ModelTypeName}Service.GetTreeList(parm); + return SUCCESS(response); + } +$end + /// /// 查询${genTable.FunctionName}详情 /// diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt index 714ee09..310864d 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplIService.txt @@ -2,6 +2,7 @@ using ${options.ModelsNamespace}; using ${options.ModelsNamespace}.Dto; using ${options.ModelsNamespace}.Models; +using System.Collections.Generic; namespace ${options.IServicsNamespace}.${options.SubNamespace}.I${options.SubNamespace}Service { @@ -14,5 +15,9 @@ namespace ${options.IServicsNamespace}.${options.SubNamespace}.I${options.SubNam public interface I${replaceDto.ModelTypeName}Service : IBaseService<${replaceDto.ModelTypeName}> { PagedInfo<${replaceDto.ModelTypeName}> GetList(${replaceDto.ModelTypeName}QueryDto parm); + +$if(genTable.TplCategory == "tree") + List<${replaceDto.ModelTypeName}> GetTreeList(${replaceDto.ModelTypeName}QueryDto parm); +$end } } diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt index f8d1809..de45db4 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt @@ -25,5 +25,10 @@ $elseif(item.CsharpField.ToLower() != item.ColumnName.ToLower()) $end public $item.CsharpType$item.RequiredStr $item.CsharpField { get; set; } ${end} + +$if(genTable.TplCategory == "tree") + [SugarColumn(IsIgnore = true)] + public List<${replaceDto.ModelTypeName}> Children { get; set; } +$end } } \ No newline at end of file diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt index ebda1a5..855eb33 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt @@ -7,6 +7,7 @@ using ${options.IRepositoriesNamespace}; using ${options.IServicsNamespace}.${options.SubNamespace}.I${options.SubNamespace}Service; using System; using SqlSugar; +using System.Collections.Generic; namespace ${options.ServicesNamespace}.${options.SubNamespace} { @@ -54,11 +55,39 @@ $end $if(genTable.SortField != "" && genTable.SortField != null) var response = _${replaceDto.ModelTypeName}repository.GetPages(predicate.ToExpression(), parm, x => x.${genTable.SortField}, "${genTable.SortType}"); $else - var response = _${replaceDto.ModelTypeName}repository.Where(predicate.ToExpression()).ToPage(parm); + var response = _${replaceDto.ModelTypeName}repository.Queryable().Where(predicate.ToExpression()).ToPage(parm); $end return response; } +$if(genTable.TplCategory == "tree") + /// + /// 查询${genTable.FunctionName}树列表 + /// + /// + /// + public List<${replaceDto.ModelTypeName}> GetTreeList(${replaceDto.ModelTypeName}QueryDto parm) + { + //开始拼装查询条件 + var predicate = Expressionable.Create<${replaceDto.ModelTypeName}>(); + + //搜索条件查询语法参考Sqlsugar +$foreach(column in genTable.Columns) +$if(column.IsQuery) +$if(column.CsharpType == "string") + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.${column.CsharpField}), ${codeTool.QueryExp(column.CsharpField, column.QueryType)}; +$elseif(column.CsharpType == "int" || column.CsharpType == "long") + predicate = predicate.AndIF(parm.${column.CsharpField} != null, ${codeTool.QueryExp(column.CsharpField, column.QueryType)}; +$end +$end +$end + + var response = _${replaceDto.ModelTypeName}repository.Queryable().Where(predicate.ToExpression()) + .ToTree(it => it.Children, it => it.${genTable.TreeParentCode}, 0); + + return response; + } +$end #endregion } } \ No newline at end of file diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt new file mode 100644 index 0000000..f38883a --- /dev/null +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplTreeVue.txt @@ -0,0 +1,383 @@ + + \ No newline at end of file diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt index 840d3be..48d25b9 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplVueApi.txt @@ -12,6 +12,20 @@ export function list${genTable.BusinessName}(query) { }) } +$if(genTable.TplCategory == "tree") +/** +* ${genTable.functionName}tree查询 +* @param {查询条件} data +*/ +export function treelist${genTable.BusinessName}(query) { + return request({ + url: '${genTable.ModuleName}/${genTable.BusinessName}/treelist', + method: 'get', + params: query, + }) +} +$end + /** * 新增${genTable.functionName} * @param data diff --git a/ZR.CodeGenerator/CodeGenerateTemplate.cs b/ZR.CodeGenerator/CodeGenerateTemplate.cs index bd4a022..1ea848c 100644 --- a/ZR.CodeGenerator/CodeGenerateTemplate.cs +++ b/ZR.CodeGenerator/CodeGenerateTemplate.cs @@ -17,7 +17,7 @@ namespace ZR.CodeGenerator /// /// /// - public static string TplVueFormContent(GenTableColumn dbFieldInfo) + public static string TplVueFormContent(GenTableColumn dbFieldInfo, GenTable genTable) { string columnName = dbFieldInfo.CsharpFieldFl; string labelName = CodeGeneratorTool.GetLabelName(dbFieldInfo.ColumnComment, columnName); @@ -36,6 +36,17 @@ namespace ZR.CodeGenerator sb.AppendLine(" "); return sb.ToString(); } + + //树 + if (genTable.TplCategory.Equals("tree", StringComparison.OrdinalIgnoreCase) && genTable.TreeParentCode != null && dbFieldInfo.CsharpField.Equals(genTable.TreeParentCode)) + { + sb.AppendLine(@" "); + sb.AppendLine($@" "); + sb.AppendLine($@" "); + sb.AppendLine(@" "); + sb.AppendLine(@" "); + return sb.ToString(); + } //主键、非自增要插入,不能编辑 if (dbFieldInfo.IsPk || dbFieldInfo.IsIncrement) { diff --git a/ZR.CodeGenerator/CodeGeneratorTool.cs b/ZR.CodeGenerator/CodeGeneratorTool.cs index c2e4972..3b3e315 100644 --- a/ZR.CodeGenerator/CodeGeneratorTool.cs +++ b/ZR.CodeGenerator/CodeGeneratorTool.cs @@ -66,7 +66,7 @@ namespace ZR.CodeGenerator dbFieldInfo.CsharpFieldFl = FirstLowerCase(dbFieldInfo.CsharpField); //CodeGenerateTemplate.GetQueryDtoProperty(dbFieldInfo, replaceDto); - replaceDto.VueViewFormHtml += CodeGenerateTemplate.TplVueFormContent(dbFieldInfo); + replaceDto.VueViewFormHtml += CodeGenerateTemplate.TplVueFormContent(dbFieldInfo, dto.GenTable); replaceDto.VueViewListHtml += CodeGenerateTemplate.TplTableColumn(dbFieldInfo, dto.GenTable); replaceDto.VueQueryFormHtml += CodeGenerateTemplate.TplQueryFormHtml(dbFieldInfo); } @@ -172,8 +172,19 @@ namespace ZR.CodeGenerator private static void GenerateVueViews(ReplaceDto replaceDto, GenerateDto generateDto) { var fullPath = Path.Combine(generateDto.GenCodePath, "ZR.Vue", "src", "views", generateDto.GenTable.ModuleName, $"{generateDto.GenTable.BusinessName}.vue"); - - var tpl = FileHelper.ReadJtTemplate("TplVue.txt"); + string fileName = string.Empty; + switch (generateDto.GenTable.TplCategory) + { + case "tree": + fileName = "TplTreeVue.txt"; + break; + case "crud": + fileName = "TplVue.txt"; + break; + default: + break; + } + var tpl = FileHelper.ReadJtTemplate(fileName); tpl.Set("vueQueryFormHtml", replaceDto.VueQueryFormHtml); tpl.Set("VueViewEditFormRuleContent", replaceDto.VueViewEditFormRuleContent);//添加、修改表单验证规则 tpl.Set("VueViewFormContent", replaceDto.VueViewFormHtml);//添加、修改表单 @@ -459,6 +470,7 @@ namespace ZR.CodeGenerator //options.DisableeLogogram = true;//禁用简写 options.Data.Set("refs", "$");//特殊标签替换 options.Data.Set("confirm", "$");//特殊标签替换 + options.Data.Set("nextTick", "$"); options.Data.Set("replaceDto", replaceDto); options.Data.Set("options", dto.GenOptions); options.Data.Set("genTable", dto.GenTable); diff --git a/ZR.Model/System/Dto/GenTableDto.cs b/ZR.Model/System/Dto/GenTableDto.cs index e534095..cf5f022 100644 --- a/ZR.Model/System/Dto/GenTableDto.cs +++ b/ZR.Model/System/Dto/GenTableDto.cs @@ -24,12 +24,28 @@ namespace ZR.Model.System.Dto /// /// 上级菜单id /// - public int? ParentMenuId { get; set; } - public string SortField { get; set; } - public string SortType { get; set; } + //public int? ParentMenuId { get; set; } + //public string SortField { get; set; } + //public string SortType { get; set; } + /// + /// 额外参数 + /// + public Options Params { get; set; } public List Columns { get; set; } } + /// + /// 额外参数 + /// + public class Options + { + public string treeCode { get; set; } + public string treeName { get; set; } + public string treeParentCode { get; set; } + public int? parentMenuId { get; set; } + public string sortField { get; set; } + public string sortType { get; set; } + } public class GenTableColumnDto { public int ColumnId { get; set; } @@ -56,4 +72,5 @@ namespace ZR.Model.System.Dto /// public string DictType { get; set; } } + } diff --git a/ZR.Model/System/Generate/GenTable.cs b/ZR.Model/System/Generate/GenTable.cs index 008233f..de0f198 100644 --- a/ZR.Model/System/Generate/GenTable.cs +++ b/ZR.Model/System/Generate/GenTable.cs @@ -83,8 +83,18 @@ namespace ZR.Model.System.Generate public object ParentMenuId { get; set; } [SqlSugar.SugarColumn(IsIgnore = true)] public object SortType { get; set; } = "asc"; + [SqlSugar.SugarColumn(IsIgnore = true)] - public object SortField { get; set; } = ""; + public object SortField { get; set; } = string.Empty; + + [SqlSugar.SugarColumn(IsIgnore = true)] + public object TreeCode { get; set; } = string.Empty; + + [SqlSugar.SugarColumn(IsIgnore = true)] + public object TreeName { get; set; } = string.Empty; + + [SqlSugar.SugarColumn(IsIgnore = true)] + public object TreeParentCode { get; set; } #endregion } } diff --git a/ZR.Service/System/GenTableService.cs b/ZR.Service/System/GenTableService.cs index 0334999..286932c 100644 --- a/ZR.Service/System/GenTableService.cs +++ b/ZR.Service/System/GenTableService.cs @@ -79,9 +79,16 @@ namespace ZR.Service.System if (!string.IsNullOrEmpty(genTable?.Options)) { Dictionary options = JsonConvert.DeserializeObject>(genTable.Options); + if (options == null) return; + genTable.ParentMenuId = options.GetValueOrDefault("parentMenuId") ?? null; + genTable.SortType = options.GetValueOrDefault("sortType") ?? "asc"; - genTable.SortField = options.GetValueOrDefault("sortField") ?? null; + genTable.SortField = options.GetValueOrDefault("sortField") ?? ""; + + genTable.TreeParentCode = options.GetValueOrDefault("treeParentCode") ?? ""; + genTable.TreeName = options.GetValueOrDefault("treeName") ?? ""; + genTable.TreeCode = options.GetValueOrDefault("treeCode") ?? ""; } } diff --git a/ZR.Vue/src/views/tool/gen/basicInfoForm.vue b/ZR.Vue/src/views/tool/gen/basicInfoForm.vue index afe4a5b..91f5397 100644 --- a/ZR.Vue/src/views/tool/gen/basicInfoForm.vue +++ b/ZR.Vue/src/views/tool/gen/basicInfoForm.vue @@ -1,28 +1,28 @@