添加生成代码的时候同时生成菜单种子数据文件
This commit is contained in:
parent
94a075fa20
commit
d603ffd1dc
@ -23,4 +23,10 @@ public enum CodeGenTypeEnum
|
||||
/// </summary>
|
||||
[Description("后端")]
|
||||
Backend = 2,
|
||||
|
||||
/// <summary>
|
||||
/// 种子数据
|
||||
/// </summary>
|
||||
[Description("种子数据")]
|
||||
SeedData =3,
|
||||
}
|
||||
@ -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},
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -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>
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user