Merge pull request '优化代码生成器代码预览时可查看对应菜单种子数据' (#133) from 616036448/Admin.NET.Pro:main into main

Reviewed-on: http://101.43.53.74:3000/Admin.NET/Admin.NET.Pro/pulls/133
This commit is contained in:
zuohuaijun 2024-09-10 15:48:58 +08:00
commit 6d63f25703
2 changed files with 184 additions and 111 deletions

View File

@ -374,7 +374,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
if (string.IsNullOrEmpty(input.GenerateType)) if (string.IsNullOrEmpty(input.GenerateType))
input.GenerateType = "200"; input.GenerateType = "200";
string outputPath = Path.Combine(App.WebHostEnvironment.WebRootPath, "CodeGen", input.TableName!); string outputPath = Path.Combine(App.WebHostEnvironment.WebRootPath, "codeGen", input.TableName!);
if (Directory.Exists(outputPath)) if (Directory.Exists(outputPath))
Directory.Delete(outputPath, true); Directory.Delete(outputPath, true);
@ -428,22 +428,50 @@ public class SysCodeGenService : IDynamicApiController, ITransient
}; };
// 模板 // 模板
var templateAllList = GetTemplateList(input); var templateList = GetTemplateList(input);
var templateList = templateAllList.Where(t => t.Type != CodeGenTypeEnum.SeedData).ToList();
var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "template"); var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "template");
// 获得菜单
var menuList = await GetMenus(input.TableName!, input.BusName!, input.MenuPid ?? 0, input.MenuIcon!, input.PagePath!, tableFieldList);
for (var i = 0; i < templateList.Count; i++) for (var i = 0; i < templateList.Count; i++)
{ {
string tResult = string.Empty;//模板生成结果
var templateFilePath = Path.Combine(templatePath, templateList[i].Name); var templateFilePath = Path.Combine(templatePath, templateList[i].Name);
if (!File.Exists(templateFilePath)) continue; if (!File.Exists(templateFilePath)) continue;
var tContent = File.ReadAllText(templateFilePath); var tContent = File.ReadAllText(templateFilePath);
var tResult = await _viewEngine.RunCompileFromCachedAsync(tContent, data, builderAction: builder =>
if (templateList[i].Type == CodeGenTypeEnum.SeedData)
{
//种子模板
var seedData = new
{
AuthorName = input.AuthorName!,//作者
BusName = input.BusName!,//业务名称
NameSpace = input.NameSpace!,//命名空间
ClassName = input.TableName!,//类名称
input.ConfigId,
MenuList = menuList,//菜单集合
};
tResult = await _viewEngine.RunCompileAsync(tContent, seedData, builderAction: builder =>
{ {
builder.AddAssemblyReferenceByName("System.Linq"); builder.AddAssemblyReferenceByName("System.Linq");
builder.AddAssemblyReferenceByName("System.Collections"); builder.AddAssemblyReferenceByName("System.Collections");
builder.AddUsing("System.Collections.Generic"); builder.AddUsing("System.Collections.Generic");
builder.AddUsing("System.Linq"); builder.AddUsing("System.Linq");
}); });
}
else
{
tResult = await _viewEngine.RunCompileFromCachedAsync(tContent, data, builderAction: builder =>
{
builder.AddAssemblyReferenceByName("System.Linq");
builder.AddAssemblyReferenceByName("System.Collections");
builder.AddUsing("System.Collections.Generic");
builder.AddUsing("System.Linq");
});
}
string targetFile = templateList[i].OutputFile string targetFile = templateList[i].OutputFile
.Replace("{PagePath}", input.PagePath) .Replace("{PagePath}", input.PagePath)
@ -471,54 +499,8 @@ public class SysCodeGenService : IDynamicApiController, ITransient
} }
if (input.GenerateMenu) if (input.GenerateMenu)
{ {
var menus = await AddMenu(input.TableName!, input.BusName!, input.MenuPid ?? 0, input.MenuIcon!, input.PagePath!, tableFieldList); //添加菜单
await AddMenu(menuList, input.MenuPid ?? 0);
//获得种子模板
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压缩返回空 // 非ZIP压缩返回空
@ -531,7 +513,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
if (File.Exists(downloadPath)) if (File.Exists(downloadPath))
File.Delete(downloadPath); File.Delete(downloadPath);
ZipFile.CreateFromDirectory(outputPath, downloadPath); ZipFile.CreateFromDirectory(outputPath, downloadPath);
return new { url = $"{App.HttpContext.Request.Scheme}://{App.HttpContext.Request.Host.Value}/CodeGen/{input.TableName}.zip" }; return new { url = $"{App.HttpContext.Request.Scheme}://{App.HttpContext.Request.Host.Value}/codeGen/{input.TableName}.zip" };
} }
} }
@ -592,23 +574,51 @@ public class SysCodeGenService : IDynamicApiController, ITransient
}; };
// 获取模板文件并替换 // 获取模板文件并替换
var templateAllList = GetTemplateList(input); var templateList = GetTemplateList(input);
var templateList = templateAllList.Where(t => t.Type != CodeGenTypeEnum.SeedData).ToList();
var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "template"); var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "template");
var result = new Dictionary<string, string>(); var result = new Dictionary<string, string>();
for (var i = 0; i < templateList.Count; i++) for (var i = 0; i < templateList.Count; i++)
{ {
string tResult = string.Empty;//模板生成结果
var templateFilePath = Path.Combine(templatePath, templateList[i].Name); var templateFilePath = Path.Combine(templatePath, templateList[i].Name);
if (!File.Exists(templateFilePath)) continue; if (!File.Exists(templateFilePath)) continue;
var tContent = File.ReadAllText(templateFilePath); var tContent = File.ReadAllText(templateFilePath);
var tResult = await _viewEngine.RunCompileFromCachedAsync(tContent, data, builderAction: builder =>
if (templateList[i].Type == CodeGenTypeEnum.SeedData)
{
// 种子模板
// 获得菜单
var menuList = await GetMenus(input.TableName!, input.BusName!, input.MenuPid ?? 0, input.MenuIcon!, input.PagePath!, tableFieldList);
var seedData = new
{
AuthorName = input.AuthorName!,//作者
BusName = input.BusName!,//业务名称
NameSpace = input.NameSpace!,//命名空间
ClassName = input.TableName!,//类名称
input.ConfigId,
MenuList = menuList,//菜单集合
};
tResult = await _viewEngine.RunCompileAsync(tContent, seedData, builderAction: builder =>
{ {
builder.AddAssemblyReferenceByName("System.Linq"); builder.AddAssemblyReferenceByName("System.Linq");
builder.AddAssemblyReferenceByName("System.Collections"); builder.AddAssemblyReferenceByName("System.Collections");
builder.AddUsing("System.Collections.Generic"); builder.AddUsing("System.Collections.Generic");
builder.AddUsing("System.Linq"); builder.AddUsing("System.Linq");
}); });
}
else
{
tResult = await _viewEngine.RunCompileFromCachedAsync(tContent, data, builderAction: builder =>
{
builder.AddAssemblyReferenceByName("System.Linq");
builder.AddAssemblyReferenceByName("System.Collections");
builder.AddUsing("System.Collections.Generic");
builder.AddUsing("System.Linq");
});
}
result.Add(templateList[i].Name?.TrimEnd(".vm")!, tResult); result.Add(templateList[i].Name?.TrimEnd(".vm")!, tResult);
} }
@ -642,29 +652,18 @@ public class SysCodeGenService : IDynamicApiController, ITransient
/// <summary> /// <summary>
/// 增加菜单 /// 增加菜单
/// </summary> /// </summary>
/// <param name="className"></param> /// <param name="menus"></param>
/// <param name="busName"></param>
/// <param name="pid"></param> /// <param name="pid"></param>
/// <param name="menuIcon"></param>
/// <param name="pagePath"></param>
/// <param name="tableFieldList"></param>
/// <returns></returns> /// <returns></returns>
private async Task<List<SysMenu>> AddMenu(string className, string busName, long pid, string menuIcon, string pagePath, List<CodeGenConfig> tableFieldList) private async Task AddMenu(List<SysMenu> menus, long pid)
{ {
var pPath = string.Empty; var pPath = string.Empty;
// 若 pid=0 为顶级则创建菜单目录 // 若 pid=0 为顶级则创建菜单目录
if (pid == 0) if (pid == 0)
{ {
// 目录 // 顶级目录
var menuType0 = new SysMenu var menuType0 = menus.Where(u => u.Type == MenuTypeEnum.Dir && u.Pid == 0).FirstOrDefault();
{
Pid = 0,
Title = busName + "管理",
Type = MenuTypeEnum.Dir,
Icon = "robot",
Path = "/" + className.ToLower(),
Component = "Layout",
};
// 若先前存在则删除本级和下级 // 若先前存在则删除本级和下级
var menuList0 = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType0.Title && u.Type == menuType0.Type).ToListAsync(); var menuList0 = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType0.Title && u.Type == menuType0.Type).ToListAsync();
if (menuList0.Count > 0) if (menuList0.Count > 0)
@ -680,25 +679,11 @@ public class SysCodeGenService : IDynamicApiController, ITransient
await _db.Deleteable<SysMenu>().Where(u => listIds.Contains(u.Id)).ExecuteCommandAsync(); await _db.Deleteable<SysMenu>().Where(u => listIds.Contains(u.Id)).ExecuteCommandAsync();
await _db.Deleteable<SysRoleMenu>().Where(u => listIds.Contains(u.MenuId)).ExecuteCommandAsync(); await _db.Deleteable<SysRoleMenu>().Where(u => listIds.Contains(u.MenuId)).ExecuteCommandAsync();
} }
pid = (await _db.Insertable(menuType0).ExecuteReturnEntityAsync()).Id; await _db.Insertable(menuType0).ExecuteReturnEntityAsync();
}
else
{
var pMenu = await _db.Queryable<SysMenu>().SingleAsync(u => u.Id == pid) ?? throw Oops.Oh(ErrorCodeEnum.D1505);
pPath = pMenu.Path;
} }
// 菜单 // 菜单
var menuType = new SysMenu var menuType = menus.Where(u => u.Type == MenuTypeEnum.Menu).FirstOrDefault();
{
Pid = pid,
Title = busName + "管理",
Name = className[..1].ToLower() + className[1..],
Type = MenuTypeEnum.Menu,
Icon = menuIcon,
Path = pPath + "/" + className.ToLower(),
Component = "/" + pagePath + "/" + className[..1].ToLower() + className[1..] + "/index",
};
// 若先前存在则删除本级和下级 // 若先前存在则删除本级和下级
var menuListCurrent = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType.Title && u.Type == menuType.Type).ToListAsync(); var menuListCurrent = await _db.Queryable<SysMenu>().Where(u => u.Title == menuType.Title && u.Type == menuType.Type).ToListAsync();
if (menuListCurrent.Count > 0) if (menuListCurrent.Count > 0)
@ -714,94 +699,168 @@ public class SysCodeGenService : IDynamicApiController, ITransient
await _db.Deleteable<SysMenu>().Where(u => listIds.Contains(u.Id)).ExecuteCommandAsync(); await _db.Deleteable<SysMenu>().Where(u => listIds.Contains(u.Id)).ExecuteCommandAsync();
await _db.Deleteable<SysRoleMenu>().Where(u => listIds.Contains(u.MenuId)).ExecuteCommandAsync(); await _db.Deleteable<SysRoleMenu>().Where(u => listIds.Contains(u.MenuId)).ExecuteCommandAsync();
} }
await _db.Insertable(menus).ExecuteCommandAsync();
}
var menuPid = (await _db.Insertable(menuType).ExecuteReturnEntityAsync()).Id;
/// <summary>
/// 获得菜单列表
/// </summary>
/// <param name="className"></param>
/// <param name="busName"></param>
/// <param name="pid"></param>
/// <param name="menuIcon"></param>
/// <param name="pagePath"></param>
/// <param name="tableFieldList"></param>
/// <returns></returns>
private async Task<List<SysMenu>> GetMenus(string className, string busName, long pid, string menuIcon, string pagePath, List<CodeGenConfig> tableFieldList)
{
var pPath = string.Empty;
// 若 pid=0 为顶级则创建菜单目录
SysMenu menuType0 = null;
long tempPid = pid;//暂存原始pid
if (pid == 0)
{
// 目录
menuType0 = new SysMenu
{
Id = YitIdHelper.NextId(),
Pid = 0,
Title = busName + "管理",
Type = MenuTypeEnum.Dir,
Icon = "robot",
Path = "/" + className.ToLower() + "/dir",
Name = className[..1].ToLower() + className[1..] + "Dir",
Component = "Layout",
OrderNo = 100,
CreateTime = DateTime.Now
};
pid = menuType0.Id;
}
else
{
var pMenu = await _db.Queryable<SysMenu>().FirstAsync(u => u.Id == pid) ?? throw Oops.Oh(ErrorCodeEnum.D1505);
pPath = pMenu.Path;
}
// 菜单
var menuType = new SysMenu
{
Id = YitIdHelper.NextId(),
Pid = pid,
Title = busName + "管理",
Name = className[..1].ToLower() + className[1..],
Type = MenuTypeEnum.Menu,
Icon = menuIcon,
Path = pPath + "/" + className.ToLower(),
Component = "/" + pagePath + "/" + className[..1].ToLower() + className[1..] + "/index",
CreateTime = DateTime.Now
};
var menuPid = menuType.Id;
int menuOrder = 100; int menuOrder = 100;
// 按钮-page // 按钮-page
var menuTypePage = new SysMenu var menuTypePage = new SysMenu
{ {
Id = YitIdHelper.NextId(),
Pid = menuPid, Pid = menuPid,
Title = "查询", Title = "查询",
Type = MenuTypeEnum.Btn, Type = MenuTypeEnum.Btn,
Permission = className[..1].ToLower() + className[1..] + "/page", Permission = className[..1].ToLower() + className[1..] + "/page",
OrderNo = menuOrder OrderNo = menuOrder,
CreateTime = DateTime.Now
}; };
menuOrder += 10; menuOrder += 10;
// 按钮-detail // 按钮-detail
var menuTypeDetail = new SysMenu var menuTypeDetail = new SysMenu
{ {
Id = YitIdHelper.NextId(),
Pid = menuPid, Pid = menuPid,
Title = "详情", Title = "详情",
Type = MenuTypeEnum.Btn, Type = MenuTypeEnum.Btn,
Permission = className[..1].ToLower() + className[1..] + "/detail", Permission = className[..1].ToLower() + className[1..] + "/detail",
OrderNo = menuOrder OrderNo = menuOrder,
CreateTime = DateTime.Now
}; };
menuOrder += 10; menuOrder += 10;
// 按钮-add // 按钮-add
var menuTypeAdd = new SysMenu var menuTypeAdd = new SysMenu
{ {
Id = YitIdHelper.NextId(),
Pid = menuPid, Pid = menuPid,
Title = "增加", Title = "增加",
Type = MenuTypeEnum.Btn, Type = MenuTypeEnum.Btn,
Permission = className[..1].ToLower() + className[1..] + "/add", Permission = className[..1].ToLower() + className[1..] + "/add",
OrderNo = menuOrder OrderNo = menuOrder,
CreateTime = DateTime.Now
}; };
menuOrder += 10; menuOrder += 10;
// 按钮-delete // 按钮-delete
var menuTypeDelete = new SysMenu var menuTypeDelete = new SysMenu
{ {
Id = YitIdHelper.NextId(),
Pid = menuPid, Pid = menuPid,
Title = "删除", Title = "删除",
Type = MenuTypeEnum.Btn, Type = MenuTypeEnum.Btn,
Permission = className[..1].ToLower() + className[1..] + "/delete", Permission = className[..1].ToLower() + className[1..] + "/delete",
OrderNo = menuOrder OrderNo = menuOrder,
CreateTime = DateTime.Now
}; };
menuOrder += 10; menuOrder += 10;
// 按钮-update // 按钮-update
var menuTypeUpdate = new SysMenu var menuTypeUpdate = new SysMenu
{ {
Id = YitIdHelper.NextId(),
Pid = menuPid, Pid = menuPid,
Title = "编辑", Title = "编辑",
Type = MenuTypeEnum.Btn, Type = MenuTypeEnum.Btn,
Permission = className[..1].ToLower() + className[1..] + "/update", Permission = className[..1].ToLower() + className[1..] + "/update",
OrderNo = menuOrder OrderNo = menuOrder,
CreateTime = DateTime.Now
}; };
menuOrder += 10; menuOrder += 10;
// 按钮-print // 按钮-print
var menuTypePrint = new SysMenu var menuTypePrint = new SysMenu
{ {
Id = YitIdHelper.NextId(),
Pid = menuPid, Pid = menuPid,
Title = "打印", Title = "打印",
Type = MenuTypeEnum.Btn, Type = MenuTypeEnum.Btn,
Permission = className[..1].ToLower() + className[1..] + "/print", Permission = className[..1].ToLower() + className[1..] + "/print",
OrderNo = menuOrder OrderNo = menuOrder,
CreateTime = DateTime.Now
}; };
menuOrder += 10; menuOrder += 10;
// 按钮-import // 按钮-import
var menuTypeImport = new SysMenu var menuTypeImport = new SysMenu
{ {
Id = YitIdHelper.NextId(),
Pid = menuPid, Pid = menuPid,
Title = "导入", Title = "导入",
Type = MenuTypeEnum.Btn, Type = MenuTypeEnum.Btn,
Permission = className[..1].ToLower() + className[1..] + "/import", Permission = className[..1].ToLower() + className[1..] + "/import",
OrderNo = menuOrder OrderNo = menuOrder,
CreateTime = DateTime.Now
}; };
menuOrder += 10; menuOrder += 10;
// 按钮-export // 按钮-export
var menuTypeExport = new SysMenu var menuTypeExport = new SysMenu
{ {
Id = YitIdHelper.NextId(),
Pid = menuPid, Pid = menuPid,
Title = "导出", Title = "导出",
Type = MenuTypeEnum.Btn, Type = MenuTypeEnum.Btn,
Permission = className[..1].ToLower() + className[1..] + "/export", Permission = className[..1].ToLower() + className[1..] + "/export",
OrderNo = menuOrder OrderNo = menuOrder,
CreateTime = DateTime.Now
}; };
menuOrder += 10; menuOrder += 10;
@ -813,11 +872,13 @@ public class SysCodeGenService : IDynamicApiController, ITransient
{ {
var menuType1 = new SysMenu var menuType1 = new SysMenu
{ {
Id = YitIdHelper.NextId(),
Pid = menuPid, Pid = menuPid,
Title = "外键" + @column.ColumnName, Title = "外键" + @column.ColumnName,
Type = MenuTypeEnum.Btn, Type = MenuTypeEnum.Btn,
Permission = className[..1].ToLower() + className[1..] + "/" + column.FkEntityName + column.ColumnName + "Dropdown", Permission = className[..1].ToLower() + className[1..] + "/" + column.FkEntityName + column.ColumnName + "Dropdown",
OrderNo = menuOrder OrderNo = menuOrder,
CreateTime = DateTime.Now
}; };
menuOrder += 10; menuOrder += 10;
menuList.Add(menuType1); menuList.Add(menuType1);
@ -827,11 +888,13 @@ public class SysCodeGenService : IDynamicApiController, ITransient
{ {
var menuType1 = new SysMenu var menuType1 = new SysMenu
{ {
Id = YitIdHelper.NextId(),
Pid = menuPid, Pid = menuPid,
Title = "树型" + @column.ColumnName, Title = "树型" + @column.ColumnName,
Type = MenuTypeEnum.Btn, Type = MenuTypeEnum.Btn,
Permission = className[..1].ToLower() + className[1..] + "/" + column.FkEntityName + "Tree", Permission = className[..1].ToLower() + className[1..] + "/" + column.FkEntityName + "Tree",
OrderNo = menuOrder OrderNo = menuOrder,
CreateTime = DateTime.Now
}; };
menuOrder += 10; menuOrder += 10;
menuList.Add(menuType1); menuList.Add(menuType1);
@ -841,17 +904,23 @@ public class SysCodeGenService : IDynamicApiController, ITransient
{ {
var menuType1 = new SysMenu var menuType1 = new SysMenu
{ {
Id = YitIdHelper.NextId(),
Pid = menuPid, Pid = menuPid,
Title = "上传" + @column.ColumnName, Title = "上传" + @column.ColumnName,
Type = MenuTypeEnum.Btn, Type = MenuTypeEnum.Btn,
Permission = className[..1].ToLower() + className[1..] + "/Upload" + column.ColumnName, Permission = className[..1].ToLower() + className[1..] + "/Upload" + column.ColumnName,
OrderNo = menuOrder OrderNo = menuOrder,
CreateTime = DateTime.Now
}; };
menuOrder += 10; menuOrder += 10;
menuList.Add(menuType1); menuList.Add(menuType1);
} }
await _db.Insertable(menuList).ExecuteCommandAsync();
menuList.Insert(0, menuType); menuList.Insert(0, menuType);
if (tempPid == 0)
{
//顶级目录需要添加目录本身
menuList.Insert(0, menuType0);
}
return menuList; return menuList;
} }

View File

@ -10,6 +10,7 @@ namespace @(@Model.NameSpace).SeedData;
/// <summary> /// <summary>
/// @(@Model.BusName)系统菜单表种子数据 /// @(@Model.BusName)系统菜单表种子数据
/// </summary> /// </summary>
[IncreSeed]
public class @(@Model.ClassName)SeedData : ISqlSugarEntitySeedData<SysMenu> public class @(@Model.ClassName)SeedData : ISqlSugarEntitySeedData<SysMenu>
{ {
/// <summary> /// <summary>
@ -23,6 +24,9 @@ public class @(@Model.ClassName)SeedData : ISqlSugarEntitySeedData<SysMenu>
#region @(@Model.BusName) #region @(@Model.BusName)
@foreach (var menu in Model.MenuList){ @foreach (var menu in Model.MenuList){
@if((int)menu.Type==1){
@:list.Add(new SysMenu { Id = @(menu.Id), Pid = @(menu.Pid), Title = "@(menu.Title)", Path = "@(menu.Path)", Name = "@(menu.Name)", Component = "Layout", Icon = "@(menu.Icon)", Type = MenuTypeEnum.Dir, CreateTime = DateTime.Parse("@(menu.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"))"), OrderNo = @(menu.OrderNo) });
}
@if((int)menu.Type==2){ @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.Component)", Icon = "@(menu.Icon)", Type = MenuTypeEnum.Menu, CreateTime = DateTime.Parse("@(menu.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"))"), OrderNo = @(menu.OrderNo) }); @:list.Add(new SysMenu { Id = @(menu.Id), Pid = @(menu.Pid), Title = "@(menu.Title)", Path = "@(menu.Path)", Name = "@(menu.Name)", Component = "@(menu.Component)", Icon = "@(menu.Icon)", Type = MenuTypeEnum.Menu, CreateTime = DateTime.Parse("@(menu.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"))"), OrderNo = @(menu.OrderNo) });
} }