diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt index 94c0916..78eb7b5 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplDto.txt @@ -5,6 +5,9 @@ using System.ComponentModel.DataAnnotations; $if(replaceDto.ShowBtnExport) using MiniExcelLibs.Attributes; $end +$if(null != genTable.SubTableName && "" != genTable.SubTableName) +using ${subTableOptions.ModelsNamespace}.${subTableOptions.SubNamespace}; +$end namespace ${options.DtosNamespace} { @@ -54,14 +57,14 @@ $if(genTable.TplCategory == "subNav" && genTable.SubTable != null) $if(replaceDto.ShowBtnExport) [ExcelIgnore] $end - public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName} { get; set; } + public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName}Nav { get; set; } $end $if(genTable.TplCategory == "subNavMore" && genTable.SubTable != null) $if(replaceDto.ShowBtnExport) [ExcelIgnore] $end - public List<${genTable.SubTable.ClassName}> ${genTable.SubTable.ClassName} { get; set; } + public List<${genTable.SubTable.ClassName}> ${genTable.SubTable.ClassName}Nav { get; set; } $end } } \ No newline at end of file diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt index 024af8b..bb30e0c 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplModel.txt @@ -1,6 +1,9 @@ using System; using SqlSugar; using System.Collections.Generic; +$if(genTable.TplCategory.Contains("subNav") && genTable.SubTable != null) +using ${subTableOptions.ModelsNamespace}.${subTableOptions.SubNamespace}; +$end namespace ${options.ModelsNamespace}.${options.SubNamespace} { @@ -38,12 +41,12 @@ $if(genTable.TplCategory == "tree") public List<${replaceDto.ModelTypeName}> Children { get; set; } $end $if(genTable.TplCategory == "subNav" && genTable.SubTable != null) - [Navigate(NavigateType.Dynamic, null)] //自定义关系映射 - public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName} { get; set; } + [Navigate(NavigateType.OneToOne, nameof(${replaceDto.PKName}))] //自定义关系映射 + public ${genTable.SubTable.ClassName} ${genTable.SubTable.ClassName}Nav { get; set; } $end $if(genTable.TplCategory == "subNavMore" && genTable.SubTable != null) - [Navigate(NavigateType.Dynamic, null)] //自定义关系映射 - public List<${genTable.SubTable.ClassName}> ${genTable.SubTable.ClassName} { get; set; } + [Navigate(NavigateType.OneToMany, nameof(${genTable.SubTable.ClassName}.${genTable.SubTableFkName}), nameof(${replaceDto.PKName}))] //自定义关系映射 + public List<${genTable.SubTable.ClassName}> ${genTable.SubTable.ClassName}Nav { 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 30b21fd..ebe6972 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/TplService.txt @@ -51,7 +51,7 @@ $end $end var response = Queryable() $if(null != genTable.SubTableName && "" != genTable.SubTableName) - .Includes(it => it.${genTable.SubTable.ClassName}.MappingField(z => z.${genTable.SubTableFkName}, () => it.${replaceDto.PKName})) + .Includes(x => x.${genTable.SubTable.ClassName}Nav) //填充子对象 $end $if(genTable.Options.SortField != "" && genTable.Options.SortField != null) //.OrderBy("${genTable.Options.SortField} ${genTable.Options.SortType}") diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt index 9224b8f..089dba3 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt @@ -102,7 +102,6 @@ $end $foreach(column in genTable.Columns) $set(labelName = "") -$set(checkboxHtml = "") $set(showToolTipHtml = "") $set(columnName = column.CsharpFieldFl) $if(column.CsharpType == "string" || column.HtmlType == "datetime") diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt index 75f9d11..55c241b 100644 --- a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt @@ -114,19 +114,37 @@ $end @sort-change="sortChange" @selection-change="handleSelectionChange"> +$if(null != genTable.SubTableName && "" != genTable.SubTableName && genTable.TplCategory == "subNav") + + + +$end +$if(null != genTable.SubTableName && "" != genTable.SubTableName && genTable.TplCategory == "subNavMore") + + + +$end $foreach(column in genTable.Columns) -$set(labelName = "") -$set(checkboxHtml = "") +$set(labelName = column.ColumnComment) $set(showToolTipHtml = "") $set(columnName = column.CsharpFieldFl) $if(column.CsharpType == "string" || column.HtmlType == "datetime") $set(showToolTipHtml = " :show-overflow-tooltip=\"true\"") $end -$if(column.ColumnComment != "") -$set(labelName = column.ColumnComment) -$else -$set(labelName = column.CsharpFieldFl) -$end $if(column.IsList == true) $if(column.HtmlType == "customInput" && column.IsPk == false) @@ -192,14 +210,9 @@ $end $foreach(column in genTable.Columns) -$set(labelName = "") $set(columnName = column.CsharpFieldFl) $set(value = "item.dictValue") -$if(column.ColumnComment != "") $set(labelName = column.ColumnComment) -$else -$set(labelName = column.CsharpFieldFl) -$end $if(column.CsharpType == "int" || column.CsharpType == "long") $set(value = "parseInt(item.dictValue)") $end diff --git a/ZR.CodeGenerator/CodeGeneratorTool.cs b/ZR.CodeGenerator/CodeGeneratorTool.cs index 80514de..dc1c4e2 100644 --- a/ZR.CodeGenerator/CodeGeneratorTool.cs +++ b/ZR.CodeGenerator/CodeGeneratorTool.cs @@ -32,7 +32,11 @@ namespace ZR.CodeGenerator { dto.VueParentPath = vuePath; } - dto.GenOptions = GenerateOption(dto.GenTable); ; + dto.GenOptions = GenerateOption(dto.GenTable); + if (dto.GenTable.SubTable != null) + { + dto.SubTableOptions = GenerateOption(dto.GenTable.SubTable); + } ReplaceDto replaceDto = new() { @@ -45,33 +49,15 @@ namespace ZR.CodeGenerator ShowBtnExport = dto.GenTable.Options.CheckedBtn.Any(f => f == 4), ShowBtnView = dto.GenTable.Options.CheckedBtn.Any(f => f == 5), ShowBtnTruncate = dto.GenTable.Options.CheckedBtn.Any(f => f == 6), - PKName = "Id", - PKType = "int" }; + var columns = dto.GenTable.Columns; - //循环表字段信息 - foreach (GenTableColumn dbFieldInfo in dto.GenTable.Columns.OrderBy(x => x.Sort)) - { - if (dbFieldInfo.IsPk || dbFieldInfo.IsIncrement) - { - replaceDto.PKName = dbFieldInfo.CsharpField; - replaceDto.PKType = dbFieldInfo.CsharpType; - } - if (dbFieldInfo.HtmlType.Equals(GenConstants.HTML_IMAGE_UPLOAD) || dbFieldInfo.HtmlType.Equals(GenConstants.HTML_FILE_UPLOAD)) - { - replaceDto.UploadFile = 1; - } - if (dbFieldInfo.HtmlType.Equals(GenConstants.HTML_SELECT_MULTI)) - { - replaceDto.SelectMulti = 1; - } - if (dbFieldInfo.HtmlType.Equals(GenConstants.HTML_EDITOR)) - { - replaceDto.ShowEditor = 1; - } - dbFieldInfo.CsharpFieldFl = dbFieldInfo.CsharpField.FirstLowerCase(); - } + replaceDto.PKName = columns.Find(f => f.IsPk || f.IsIncrement).CsharpField ?? "Id"; + replaceDto.PKType = columns.Find(f => f.IsPk || f.IsIncrement).CsharpType ?? "int"; + replaceDto.UploadFile = columns.Any(f => f.HtmlType.Equals(GenConstants.HTML_IMAGE_UPLOAD) || f.HtmlType.Equals(GenConstants.HTML_FILE_UPLOAD)) ? 1 : 0; + replaceDto.SelectMulti = columns.Any(f => f.HtmlType.Equals(GenConstants.HTML_SELECT_MULTI)) ? 1 : 0; + replaceDto.ShowEditor = columns.Any(f => f.HtmlType.Equals(GenConstants.HTML_EDITOR)) ? 1 : 0; replaceDto.FistLowerPk = replaceDto.PKName.FirstLowerCase(); InitJntTemplate(dto, replaceDto); @@ -188,27 +174,12 @@ namespace ZR.CodeGenerator /// 生成Vue页面 private static void GenerateVueViews(ReplaceDto replaceDto, GenerateDto generateDto) { - string fileName = string.Empty; - switch (generateDto.GenTable.TplCategory) + string fileName = generateDto.GenTable.TplCategory switch { - case "tree": - fileName = "TplTreeVue.txt"; - break; - case "crud": - fileName = "TplVue.txt"; - break; - case "subNav": - fileName = "TplVue.txt"; - break; - case "subNavMore": - fileName = "TplVue.txt"; - break; - case "select": - fileName = "TplVueSelect.txt"; - break; - default: - break; - } + "tree" => "TplTreeVue.txt", + "select" => "TplVueSelect.txt", + _ => "TplVue.txt", + }; var tpl = JnHelper.ReadTemplate(CodeTemplateDir, fileName); tpl.Set("vueQueryFormHtml", replaceDto.VueQueryFormHtml); tpl.Set("VueViewFormContent", replaceDto.VueViewFormHtml);//添加、修改表单 @@ -230,10 +201,6 @@ namespace ZR.CodeGenerator string fileName = generateDto.GenTable.TplCategory switch { "tree" => "TreeVue.txt", - "crud" => "Vue.txt", - //case "select": - // fileName = "TplVueSelect.txt"; - // break; _ => "Vue.txt", }; fileName = Path.Combine("v3", fileName); @@ -557,7 +524,9 @@ namespace ZR.CodeGenerator options.Data.Set("nextTick", "$"); options.Data.Set("replaceDto", replaceDto); options.Data.Set("options", dto.GenOptions); + options.Data.Set("subTableOptions", dto.SubTableOptions); options.Data.Set("genTable", dto.GenTable); + options.Data.Set("genSubTable", dto.GenTable?.SubTable); options.Data.Set("showCustomInput", showCustomInput); options.Data.Set("tool", new CodeGeneratorTool()); options.Data.Set("codeTool", new CodeGenerateTemplate()); diff --git a/ZR.CodeGenerator/Model/GenerateDto.cs b/ZR.CodeGenerator/Model/GenerateDto.cs index 57e6697..47fb4ba 100644 --- a/ZR.CodeGenerator/Model/GenerateDto.cs +++ b/ZR.CodeGenerator/Model/GenerateDto.cs @@ -23,7 +23,14 @@ namespace ZR.CodeGenerator.Model /// public int[] CheckedBtn { get; set; } = System.Array.Empty(); public GenTable GenTable { get; set; } + /// + /// 主表属性 + /// public CodeGenerateOption GenOptions { get; set; } + /// + /// 子表属性 + /// + public CodeGenerateOption SubTableOptions { get; set; } #region 存储路径 /// /// 代码模板预览存储路径存放 diff --git a/ZR.Model/System/Generate/GenTableColumn.cs b/ZR.Model/System/Generate/GenTableColumn.cs index 9686f16..12f5ff6 100644 --- a/ZR.Model/System/Generate/GenTableColumn.cs +++ b/ZR.Model/System/Generate/GenTableColumn.cs @@ -25,7 +25,18 @@ namespace ZR.Model.System.Generate /// /// 列说明 /// - public string ColumnComment { get; set; } = string.Empty; + private string columnComment; + public string ColumnComment + { + get + { + return string.IsNullOrEmpty(columnComment) ? CsharpField : columnComment; + } + set + { + columnComment = value; + } + } /// /// 数据库列类型 /// @@ -121,7 +132,13 @@ namespace ZR.Model.System.Generate /// C# 字段名 首字母小写,用于前端 /// [SugarColumn(IsIgnore = true)] - public string CsharpFieldFl { get; set; } + public string CsharpFieldFl + { + get + { + return CsharpField[..1].ToLower() + CsharpField[1..]; + } + } /// /// 前端 只读字段 ///