diff --git a/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs b/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs index 8d2768b..4b3ed0d 100644 --- a/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs +++ b/ZR.Admin.WebApi/Controllers/System/CodeGeneratorController.cs @@ -221,13 +221,15 @@ namespace ZR.Admin.WebApi.Controllers /// 预览代码 /// /// + /// /// [HttpPost("preview/{tableId}")] [ActionPermissionFilter(Permission = "tool:gen:preview")] - public IActionResult Preview(long tableId = 0) + public IActionResult Preview(long tableId = 0, int VueVersion = 0) { GenerateDto dto = new(); dto.TableId = tableId; + dto.VueVersion = VueVersion; if (dto == null || dto.TableId <= 0) { throw new CustomException(ResultCode.CUSTOM_ERROR, "请求参数为空"); diff --git a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj index af5a88c..c366c9e 100644 --- a/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj +++ b/ZR.Admin.WebApi/ZR.Admin.WebApi.csproj @@ -59,7 +59,6 @@ - diff --git a/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt new file mode 100644 index 0000000..c41d79a --- /dev/null +++ b/ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/TreeVue.txt @@ -0,0 +1,559 @@ + + + \ No newline at end of file diff --git a/ZR.CodeGenerator/CodeGenerateOption.cs b/ZR.CodeGenerator/CodeGenerateOption.cs index 3c66763..4a16dca 100644 --- a/ZR.CodeGenerator/CodeGenerateOption.cs +++ b/ZR.CodeGenerator/CodeGenerateOption.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ZR.CodeGenerator +namespace ZR.CodeGenerator { public class CodeGenerateOption { diff --git a/ZR.CodeGenerator/CodeGeneratorTool.cs b/ZR.CodeGenerator/CodeGeneratorTool.cs index 59d460f..872d789 100644 --- a/ZR.CodeGenerator/CodeGeneratorTool.cs +++ b/ZR.CodeGenerator/CodeGeneratorTool.cs @@ -38,6 +38,8 @@ namespace ZR.CodeGenerator _option.ServicesNamespace = _option.BaseNamespace + "Service"; _option.ApiControllerNamespace = _option.BaseNamespace + "Admin.WebApi"; + dto.VueParentPath = dto.VueVersion == 3 ? "ZRAdmin-vue" : "ZR.Vue"; + dto.GenOptions = _option; string PKName = "Id"; @@ -71,16 +73,23 @@ namespace ZR.CodeGenerator replaceDto.PKType = PKType; replaceDto.FistLowerPk = PKName.FirstLowerCase(); InitJntTemplate(dto, replaceDto); - replaceDto.VueViewListHtml = GenerateVueTableList(); - replaceDto.VueQueryFormHtml = GenerateVueQueryForm(); - replaceDto.VueViewFormHtml = GenerateCurdForm(); GenerateModels(replaceDto, dto); GenerateRepository(replaceDto, dto); GenerateService(replaceDto, dto); GenerateControllers(replaceDto, dto); - GenerateVueViews(replaceDto, dto); - GenerateVue3Views(replaceDto, dto); + if (dto.VueVersion == 3) + { + GenerateVue3Views(replaceDto, dto); + } + else + { + replaceDto.VueViewListHtml = GenerateVueTableList(); + replaceDto.VueQueryFormHtml = GenerateVueQueryForm(); + replaceDto.VueViewFormHtml = GenerateCurdForm(); + + GenerateVueViews(replaceDto, dto); + } GenerateVueJs(replaceDto, dto); GenerateSql(replaceDto, dto); @@ -88,6 +97,7 @@ namespace ZR.CodeGenerator foreach (var item in dto.GenCodes) { + item.Path = Path.Combine(dto.GenCodePath, item.Path); FileHelper.WriteAndSave(item.Path, item.Content); } } @@ -104,8 +114,8 @@ namespace ZR.CodeGenerator var tpl = FileHelper.ReadJtTemplate("TplModel.txt"); var tplDto = FileHelper.ReadJtTemplate("TplDto.txt"); - string fullPath = generateDto.IsPreview ? string.Empty : Path.Combine(generateDto.GenCodePath, _option.ModelsNamespace, "Models", _option.SubNamespace, replaceDto.ModelTypeName + ".cs"); - string fullPathDto = generateDto.IsPreview ? string.Empty : Path.Combine(generateDto.GenCodePath, _option.ModelsNamespace, "Dto", _option.SubNamespace, $"{replaceDto.ModelTypeName}Dto.cs"); + string fullPath = Path.Combine(_option.ModelsNamespace, "Models", _option.SubNamespace, replaceDto.ModelTypeName + ".cs"); + string fullPathDto = Path.Combine(_option.ModelsNamespace, "Dto", _option.SubNamespace, $"{replaceDto.ModelTypeName}Dto.cs"); generateDto.GenCodes.Add(new GenCode(1, "Model.cs", fullPath, tpl.Render())); generateDto.GenCodes.Add(new GenCode(2, "Dto.cs", fullPathDto, tplDto.Render())); @@ -120,7 +130,7 @@ namespace ZR.CodeGenerator { var tpl = FileHelper.ReadJtTemplate("TplRepository.txt"); var result = tpl.Render(); - var fullPath = generateDto.IsPreview ? string.Empty : Path.Combine(generateDto.GenCodePath, _option.RepositoriesNamespace, _option.SubNamespace, $"{replaceDto.ModelTypeName}Repository.cs"); + var fullPath = Path.Combine(_option.RepositoriesNamespace, _option.SubNamespace, $"{replaceDto.ModelTypeName}Repository.cs"); generateDto.GenCodes.Add(new GenCode(3, "Repository.cs", fullPath, result)); } @@ -135,8 +145,8 @@ namespace ZR.CodeGenerator var result = tpl.Render(); var result2 = tpl2.Render(); - var fullPath = generateDto.IsPreview ? string.Empty : Path.Combine(generateDto.GenCodePath, _option.ServicesNamespace, _option.SubNamespace, $"{replaceDto.ModelTypeName}Service.cs"); - var fullPath2 = generateDto.IsPreview ? string.Empty : Path.Combine(generateDto.GenCodePath, _option.IServicsNamespace, _option.SubNamespace, $"I{_option.SubNamespace}Service", $"I{replaceDto.ModelTypeName}Service.cs"); + var fullPath = Path.Combine(_option.ServicesNamespace, _option.SubNamespace, $"{replaceDto.ModelTypeName}Service.cs"); + var fullPath2 = Path.Combine(_option.IServicsNamespace, _option.SubNamespace, $"I{_option.SubNamespace}Service", $"I{replaceDto.ModelTypeName}Service.cs"); generateDto.GenCodes.Add(new GenCode(4, "Service.cs", fullPath, result)); generateDto.GenCodes.Add(new GenCode(4, "IService.cs", fullPath2, result2)); @@ -151,7 +161,7 @@ namespace ZR.CodeGenerator tpl.Set("QueryCondition", replaceDto.QueryCondition); var result = tpl.Render(); - var fullPath = generateDto.IsPreview ? string.Empty : Path.Combine(generateDto.GenCodePath, _option.ApiControllerNamespace, "Controllers", _option.SubNamespace, $"{replaceDto.ModelTypeName}Controller.cs"); + var fullPath = Path.Combine(_option.ApiControllerNamespace, "Controllers", _option.SubNamespace, $"{replaceDto.ModelTypeName}Controller.cs"); generateDto.GenCodes.Add(new GenCode(5, "Controller.cs", fullPath, result)); } @@ -180,7 +190,7 @@ namespace ZR.CodeGenerator tpl.Set("VueViewListContent", replaceDto.VueViewListHtml);//查询 table列 var result = tpl.Render(); - var fullPath = generateDto.IsPreview ? string.Empty : Path.Combine(generateDto.GenCodePath, "ZR.Vue", "src", "views", generateDto.GenTable.ModuleName.FirstLowerCase(), $"{generateDto.GenTable.BusinessName.FirstUpperCase()}.vue"); + var fullPath = Path.Combine(generateDto.VueParentPath, "src", "views", generateDto.GenTable.ModuleName.FirstLowerCase(), $"{generateDto.GenTable.BusinessName.FirstUpperCase()}.vue"); generateDto.GenCodes.Add(new GenCode(6, "index.vue", fullPath, result)); } @@ -191,29 +201,24 @@ namespace ZR.CodeGenerator /// private static void GenerateVue3Views(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 = "Vue.txt"; - break; + "tree" => "TreeVue.txt", + "crud" => "Vue.txt", //case "select": // fileName = "TplVueSelect.txt"; // break; - default: - fileName = "Vue.txt"; - break; - } + _ => "Vue.txt", + }; fileName = Path.Combine("v3", fileName); var tpl = FileHelper.ReadJtTemplate(fileName); + tpl.Set("treeCode", generateDto.GenTable?.TreeCode?.ToString()?.FirstLowerCase()); + tpl.Set("treeName", generateDto.GenTable.TreeName?.ToString()?.FirstLowerCase()); + tpl.Set("treeParentCode", generateDto.GenTable.TreeParentCode?.ToString()?.FirstLowerCase()); var result = tpl.Render(); - var fullPath = generateDto.IsPreview ? string.Empty : Path.Combine(generateDto.GenCodePath, "ZRAdmin-vue", "src", "views", generateDto.GenTable.ModuleName.FirstLowerCase(), $"{generateDto.GenTable.BusinessName.FirstUpperCase()}.vue"); - //Console.WriteLine(result); - generateDto.GenCodes.Add(new GenCode(16, "vue3.vue", fullPath, result)); + var fullPath = Path.Combine(generateDto.VueParentPath, "src", "views", generateDto.GenTable.ModuleName.FirstLowerCase(), $"{generateDto.GenTable.BusinessName.FirstUpperCase()}.vue"); + generateDto.GenCodes.Add(new GenCode(16, "index.vue", fullPath, result)); } /// /// 生成vue页面api @@ -226,11 +231,19 @@ namespace ZR.CodeGenerator var tpl = FileHelper.ReadJtTemplate("TplVueApi.txt"); var result = tpl.Render(); - string fullPath = generateDto.IsPreview ? string.Empty : Path.Combine(generateDto.GenCodePath, "ZR.Vue", "src", "api", generateDto.GenTable.ModuleName.FirstLowerCase(), generateDto.GenTable.BusinessName.FirstUpperCase() + ".js"); + string fileName; + if (generateDto.VueVersion == 3) + { + fileName = generateDto.GenTable.BusinessName.ToLower() + ".js"; + } + else + { + fileName = generateDto.GenTable.BusinessName.FirstUpperCase() + ".js"; + } + string fullPath = Path.Combine(generateDto.VueParentPath, "src", "api", generateDto.GenTable.ModuleName.FirstLowerCase(), fileName); + generateDto.GenCodes.Add(new GenCode(7, "api.js", fullPath, result)); - string fullPathV3 = generateDto.IsPreview ? string.Empty : Path.Combine(generateDto.GenCodePath, "ZRAdmin-vue", "src", "api", generateDto.GenTable.ModuleName.FirstLowerCase(), generateDto.GenTable.BusinessName.ToLower() + ".js"); - generateDto.GenCodes.Add(new GenCode(7, "api.js", fullPathV3, result)); } /// @@ -255,7 +268,7 @@ namespace ZR.CodeGenerator var tpl = FileHelper.ReadJtTemplate($"{tempName}.txt"); tpl.Set("parentId", generateDto.GenTable.ParentMenuId ?? 0); var result = tpl.Render(); - string fullPath = generateDto.IsPreview ? string.Empty : Path.Combine(generateDto.GenCodePath, "sql", generateDto.GenTable.BusinessName + ".sql"); + string fullPath = Path.Combine(generateDto.GenCodePath, "sql", generateDto.GenTable.BusinessName + ".sql"); generateDto.GenCodes.Add(new GenCode(8, "sql", fullPath, result)); } @@ -278,7 +291,7 @@ namespace ZR.CodeGenerator { var tpl = FileHelper.ReadJtTemplate("TableList.txt"); var result = tpl.Render(); - //Console.WriteLine(result); + return result; } /// @@ -289,7 +302,6 @@ namespace ZR.CodeGenerator { var tpl = FileHelper.ReadJtTemplate("CurdForm.txt"); var result = tpl.Render(); - //Console.WriteLine(result); return result; } #endregion @@ -339,7 +351,15 @@ namespace ZR.CodeGenerator /// public static string FirstLowerCase(string str) { - return string.IsNullOrEmpty(str) ? str : str.Substring(0, 1).ToLower() + str[1..]; + try + { + return string.IsNullOrEmpty(str) ? str : str.Substring(0, 1).ToLower() + str[1..]; + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + return ""; + } } /// @@ -493,7 +513,7 @@ namespace ZR.CodeGenerator /// private static void InitJntTemplate(GenerateDto dto, ReplaceDto replaceDto) { - //Engine.Current.Clean(); + Engine.Current.Clean(); dto.GenTable.Columns = dto.GenTable.Columns.OrderBy(x => x.Sort).ToList(); bool showCustomInput = dto.GenTable.Columns.Any(f => f.HtmlType.Equals(GenConstants.HTML_CUSTOM_INPUT, StringComparison.OrdinalIgnoreCase)); //jnt模板引擎全局变量 diff --git a/ZR.CodeGenerator/Model/GenerateDto.cs b/ZR.CodeGenerator/Model/GenerateDto.cs index 91e99a8..57e6697 100644 --- a/ZR.CodeGenerator/Model/GenerateDto.cs +++ b/ZR.CodeGenerator/Model/GenerateDto.cs @@ -5,6 +5,10 @@ namespace ZR.CodeGenerator.Model { public class GenerateDto { + /// + /// vue版本 + /// + public int VueVersion { get; set; } public long TableId { get; set; } /// /// 是否预览代码 @@ -28,7 +32,7 @@ namespace ZR.CodeGenerator.Model /// /// 代码生成路径 /// - public string GenCodePath { get; set; } + public string GenCodePath { get; set; } = string.Empty; /// /// 代码生成压缩包路径 /// @@ -42,6 +46,10 @@ namespace ZR.CodeGenerator.Model /// public string GenType { get; set; } public string GenPath { get; set; } = ""; + /// + /// vue代码路径 + /// + public string VueParentPath { get; set; } #endregion }