添加生成代码的时候同时生成菜单种子数据文件

This commit is contained in:
轻风2016 2024-09-03 14:26:08 +08:00
parent 94a075fa20
commit d603ffd1dc
4 changed files with 101 additions and 4 deletions

View File

@ -23,4 +23,10 @@ public enum CodeGenTypeEnum
/// </summary>
[Description("后端")]
Backend = 2,
/// <summary>
/// 种子数据
/// </summary>
[Description("种子数据")]
SeedData =3,
}

View File

@ -28,6 +28,7 @@ public class SysCodeGenTemplateSeedData : ISqlSugarEntitySeedData<SysCodeGenTemp
new SysCodeGenTemplate{ Id=36036980202003, SysFlag=YesNoEnum.Y, Type=CodeGenTypeEnum.Backend, Name="service_OutputDto.cs.vm", OutputFile="Service/{TableName}/Dto/{TableName}Output.cs", Describe ="(服务端)输出参数",IsDefault=true},
new SysCodeGenTemplate{ Id=36036980203001, SysFlag=YesNoEnum.Y, Type=CodeGenTypeEnum.Frontend, Name="web_views_el_table_index.vue.vm", OutputFile="views/{PagePath}/{TableNameLower}/index.vue", Describe ="(WEB)列表页面,基于el-table",IsDefault=false},
new SysCodeGenTemplate{ Id=36036980202004, SysFlag=YesNoEnum.Y, Type=CodeGenTypeEnum.SeedData, Name="sys_menu_seed_data.cs.vm", OutputFile="SeedData/{TableName}MenuSeedData.cs", Describe ="(服务端)业务菜单种子数据",IsDefault=true},
};
}
}

View File

@ -430,7 +430,8 @@ public class SysCodeGenService : IDynamicApiController, ITransient
};
// 模板
var templateList = GetTemplateList(input);
var templateAllList = GetTemplateList(input);
var templateList = templateAllList.Where(t => t.Type != CodeGenTypeEnum.SeedData).ToList();
var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "template");
for (var i = 0; i < templateList.Count; i++)
@ -471,7 +472,56 @@ public class SysCodeGenService : IDynamicApiController, ITransient
File.WriteAllText(targetFile, tResult, Encoding.UTF8);
}
if (input.GenerateMenu)
await AddMenu(input.TableName!, input.BusName!, input.MenuPid ?? 0, input.MenuIcon!, input.PagePath!, tableFieldList);
{
var menus = await AddMenu(input.TableName!, input.BusName!, input.MenuPid ?? 0, input.MenuIcon!, input.PagePath!, tableFieldList);
//获得种子模板
var seedDataTemplates = templateAllList.Where(t => t.Type == CodeGenTypeEnum.SeedData).ToList();
for (var i = 0; i < seedDataTemplates.Count; i++)
{
var templateFilePath = Path.Combine(templatePath, seedDataTemplates[i].Name);
if (!File.Exists(templateFilePath)) continue;
var tContent = File.ReadAllText(templateFilePath);
var seedData = new
{
AuthorName = input.AuthorName!,//作者
BusName = input.BusName!,//业务名称
NameSpace = input.NameSpace!,//命名空间
ClassName = input.TableName!,//类名称
input.ConfigId,
MenuList = menus,//菜单集合
};
var tResult = await _viewEngine.RunCompileAsync(tContent, seedData, builderAction: builder =>
{
builder.AddAssemblyReferenceByName("System.Linq");
builder.AddAssemblyReferenceByName("System.Collections");
builder.AddUsing("System.Collections.Generic");
builder.AddUsing("System.Linq");
});
string targetFile = seedDataTemplates[i].OutputFile
.Replace("{PagePath}", input.PagePath)
.Replace("{TableName}", input.TableName)
.Replace("{TableNameLower}", ToFirstLetterLowerCase(input.TableName!));
string tmpPath;
if (!input.GenerateType.StartsWith('1'))
{
tmpPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent!.FullName, input.NameSpace);
}
else
{
tmpPath = Path.Combine(outputPath, input!.NameSpace!);
}
targetFile = Path.Combine(tmpPath, targetFile);
var dirPath = new DirectoryInfo(targetFile).Parent!.FullName;
if (!Directory.Exists(dirPath))
Directory.CreateDirectory(dirPath);
File.WriteAllText(targetFile, tResult, Encoding.UTF8);
}
}
// 非ZIP压缩返回空
if (!input.GenerateType.StartsWith('1'))
@ -544,7 +594,8 @@ public class SysCodeGenService : IDynamicApiController, ITransient
};
// 获取模板文件并替换
var templateList = GetTemplateList(input);
var templateAllList = GetTemplateList(input);
var templateList = templateAllList.Where(t => t.Type != CodeGenTypeEnum.SeedData).ToList();
var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "template");
var result = new Dictionary<string, string>();
@ -600,7 +651,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
/// <param name="pagePath"></param>
/// <param name="tableFieldList"></param>
/// <returns></returns>
private async Task AddMenu(string className, string busName, long pid, string menuIcon, string pagePath, List<CodeGenConfig> tableFieldList)
private async Task<List<SysMenu>> AddMenu(string className, string busName, long pid, string menuIcon, string pagePath, List<CodeGenConfig> tableFieldList)
{
var pPath = string.Empty;
// 若 pid=0 为顶级则创建菜单目录
@ -802,6 +853,8 @@ public class SysCodeGenService : IDynamicApiController, ITransient
menuList.Add(menuType1);
}
await _db.Insertable(menuList).ExecuteCommandAsync();
menuList.Insert(0, menuType);
return menuList;
}
/// <summary>

View File

@ -0,0 +1,37 @@
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace @(@Model.NameSpace).SeedData;
/// <summary>
/// @(@Model.BusName)系统菜单表种子数据
/// </summary>
public class @(@Model.ClassName)SeedData : ISqlSugarEntitySeedData<SysMenu>
{
/// <summary>
/// 种子数据
/// </summary>
/// <returns></returns>
public IEnumerable<SysMenu> HasData()
{
//菜单列表
var list = new List<SysMenu>();
#region @(@Model.BusName)
@foreach (var menu in Model.MenuList){
@if((int)menu.Type==2){
@:list.Add(new SysMenu { Id = @(menu.Id), Pid = @(menu.Pid), Title = "@(menu.Title)", Path = "@(menu.Path)", Name = "@(menu.Name)", Component = "@(menu.Name)", Icon = "@(menu.Icon)", Type = MenuTypeEnum.Menu, CreateTime = DateTime.Parse("@(menu.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"))"), OrderNo = @(menu.OrderNo) });
}
@if((int)menu.Type==3) {
@:list.Add(new SysMenu { Id = @(menu.Id), Pid = @(menu.Pid), Title = "@(menu.Title)", Permission = "@(menu.Permission)", Type = MenuTypeEnum.Btn, CreateTime = DateTime.Parse("@(menu.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"))"), OrderNo = @(menu.OrderNo) });
}
}
#endregion
return list;
}
}