|
|
@@ -143,13 +143,13 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
|
|
|
var config = App.GetOptions<DbConnectionOptions>().ConnectionConfigs.FirstOrDefault(u => configId.Equals(u.ConfigId));
|
|
|
|
|
|
- var dbTableNames = dbTableInfos.Select(u => u.Name.ToLower()).ToList();
|
|
|
+ // var dbTableNames = dbTableInfos.Select(u => u.Name.ToLower()).ToList();
|
|
|
IEnumerable<EntityInfo> entityInfos = await GetEntityInfos();
|
|
|
|
|
|
var tableOutputList = new List<TableOutput>();
|
|
|
foreach (var item in entityInfos)
|
|
|
{
|
|
|
- var table = dbTableInfos.FirstOrDefault(u => u.Name.ToLower() == (config.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(item.DbTableName) : item.DbTableName).ToLower());
|
|
|
+ var table = dbTableInfos.FirstOrDefault(u => string.Equals(u.Name, (config!.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(item.DbTableName) : item.DbTableName), StringComparison.CurrentCultureIgnoreCase));
|
|
|
if (table == null) continue;
|
|
|
tableOutputList.Add(new TableOutput
|
|
|
{
|
|
|
@@ -180,7 +180,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
// 按原始类型的顺序获取所有实体类型属性(不包含导航属性,会返回null)
|
|
|
return provider.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new ColumnOuput
|
|
|
{
|
|
|
- ColumnName = config.DbSettings.EnableUnderLine ? CodeGenUtil.CamelColumnName(u.DbColumnName, entityBasePropertyNames) : u.DbColumnName,
|
|
|
+ ColumnName = config!.DbSettings.EnableUnderLine ? CodeGenUtil.CamelColumnName(u.DbColumnName, entityBasePropertyNames) : u.DbColumnName,
|
|
|
ColumnKey = u.IsPrimarykey.ToString(),
|
|
|
DataType = u.DataType.ToString(),
|
|
|
NetType = CodeGenUtil.ConvertDataType(u, provider.CurrentConnectionConfig.DbType),
|
|
|
@@ -198,7 +198,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
if (entityType == null)
|
|
|
return null;
|
|
|
var config = App.GetOptions<DbConnectionOptions>().ConnectionConfigs.FirstOrDefault(u => u.ConfigId.ToString() == input.ConfigId);
|
|
|
- var dbTableName = config.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(entityType.DbTableName) : entityType.DbTableName;
|
|
|
+ var dbTableName = config!.DbSettings.EnableUnderLine ? UtilMethods.ToUnderLine(entityType.DbTableName) : entityType.DbTableName;
|
|
|
|
|
|
// 切库---多库代码生成用
|
|
|
var provider = _db.AsTenant().GetConnectionScope(!string.IsNullOrEmpty(input.ConfigId) ? input.ConfigId : SqlSugarConst.MainConfigId);
|
|
|
@@ -226,14 +226,14 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
{
|
|
|
var columnOutput = result[i];
|
|
|
// 先找自定义字段名的,如果找不到就再找自动生成字段名的(并且过滤掉没有SugarColumn的属性)
|
|
|
- var propertyInfo = entityProperties.FirstOrDefault(u => (u.GetCustomAttribute<SugarColumn>()?.ColumnName ?? "").ToLower() == columnOutput.ColumnName.ToLower()) ??
|
|
|
+ var propertyInfo = entityProperties.FirstOrDefault(u => string.Equals((u.GetCustomAttribute<SugarColumn>()?.ColumnName ?? ""), columnOutput.ColumnName, StringComparison.CurrentCultureIgnoreCase)) ??
|
|
|
entityProperties.FirstOrDefault(u => u.GetCustomAttribute<SugarColumn>() != null && u.Name.ToLower() == (config.DbSettings.EnableUnderLine
|
|
|
? CodeGenUtil.CamelColumnName(columnOutput.ColumnName, entityBasePropertyNames).ToLower()
|
|
|
: columnOutput.ColumnName.ToLower()));
|
|
|
if (propertyInfo != null)
|
|
|
{
|
|
|
columnOutput.PropertyName = propertyInfo.Name;
|
|
|
- columnOutput.ColumnComment = propertyInfo.GetCustomAttribute<SugarColumn>().ColumnDescription;
|
|
|
+ columnOutput.ColumnComment = propertyInfo.GetCustomAttribute<SugarColumn>()!.ColumnDescription;
|
|
|
var propertyType = Nullable.GetUnderlyingType(propertyInfo.PropertyType);
|
|
|
if (propertyInfo.PropertyType.IsEnum || (propertyType?.IsEnum ?? false))
|
|
|
{
|
|
|
@@ -269,31 +269,22 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
foreach (var assembly in assemblies)
|
|
|
{
|
|
|
var assemblyName = assembly.GetName().Name;
|
|
|
- if (_codeGenOptions.EntityAssemblyNames.Contains(assemblyName) || _codeGenOptions.EntityAssemblyNames.Any(name => assemblyName.Contains(name)))
|
|
|
+ if (!_codeGenOptions.EntityAssemblyNames.Contains(assemblyName) &&
|
|
|
+ !_codeGenOptions.EntityAssemblyNames.Any(name => assemblyName!.Contains(name)))
|
|
|
{
|
|
|
- Assembly asm = Assembly.Load(assemblyName);
|
|
|
- types.AddRange(asm.GetExportedTypes().ToList());
|
|
|
+ continue;
|
|
|
}
|
|
|
+
|
|
|
+ Assembly asm = Assembly.Load(assemblyName!);
|
|
|
+ types.AddRange(asm.GetExportedTypes().ToList());
|
|
|
}
|
|
|
}
|
|
|
- bool IsMyAttribute(Attribute[] o)
|
|
|
- {
|
|
|
- foreach (Attribute a in o)
|
|
|
- {
|
|
|
- if (a.GetType() == type)
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
- Type[] cosType = types.Where(o =>
|
|
|
- {
|
|
|
- return IsMyAttribute(Attribute.GetCustomAttributes(o, true));
|
|
|
- }
|
|
|
- ).ToArray();
|
|
|
+
|
|
|
+ Type[] cosType = types.Where(o => IsMyAttribute(Attribute.GetCustomAttributes(o, true))).ToArray();
|
|
|
|
|
|
foreach (var ct in cosType)
|
|
|
{
|
|
|
- var sugarAttribute = ct.GetCustomAttributes(type, true)?.FirstOrDefault();
|
|
|
+ var sugarAttribute = ct.GetCustomAttributes(type, true).FirstOrDefault();
|
|
|
|
|
|
var des = ct.GetCustomAttributes(typeof(DescriptionAttribute), true);
|
|
|
var description = "";
|
|
|
@@ -310,6 +301,8 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
});
|
|
|
}
|
|
|
return await Task.FromResult(entityInfos);
|
|
|
+
|
|
|
+ bool IsMyAttribute(Attribute[] o) => o.Any(a => a.GetType() == type);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -334,74 +327,38 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
|
|
|
// 先删除该表已生成的菜单列表
|
|
|
List<string> targetPathList;
|
|
|
- var zipPath = Path.Combine(App.WebHostEnvironment.WebRootPath, "CodeGen", input.TableName);
|
|
|
+ var zipPath = Path.Combine(App.WebHostEnvironment.WebRootPath, "CodeGen", input.TableName!);
|
|
|
if (input.GenerateType.StartsWith('1'))
|
|
|
{
|
|
|
targetPathList = GetZipPathList(input);
|
|
|
- if (Directory.Exists(zipPath))
|
|
|
- Directory.Delete(zipPath, true);
|
|
|
+ if (Directory.Exists(zipPath)) Directory.Delete(zipPath, true);
|
|
|
}
|
|
|
else
|
|
|
targetPathList = GetTargetPathList(input);
|
|
|
|
|
|
- var tableFieldList = await _codeGenConfigService.GetList(new CodeGenConfig() { CodeGenId = input.Id }); // 字段集合
|
|
|
- var queryWhetherList = tableFieldList.Where(u => u.QueryWhether == YesNoEnum.Y.ToString()).ToList(); // 前端查询集合
|
|
|
- var joinTableList = tableFieldList.Where(u => u.EffectType == "Upload" || u.EffectType == "ForeignKey" || u.EffectType == "ApiTreeSelector").ToList(); // 需要连表查询的字段
|
|
|
-
|
|
|
- var data = new CustomViewEngine(_db)
|
|
|
- {
|
|
|
- ConfigId = input.ConfigId,
|
|
|
- AuthorName = input.AuthorName,
|
|
|
- BusName = input.BusName,
|
|
|
- NameSpace = input.NameSpace,
|
|
|
- ClassName = input.TableName,
|
|
|
- PagePath = input.PagePath,
|
|
|
- TableUniqueList = input.TableUniqueList ?? new(),
|
|
|
- ProjectLastName = input.NameSpace.Split('.').Last(),
|
|
|
- QueryWhetherList = queryWhetherList,
|
|
|
- TableField = tableFieldList,
|
|
|
- IsJoinTable = joinTableList.Count > 0,
|
|
|
- IsUpload = joinTableList.Where(u => u.EffectType == "Upload").Any(),
|
|
|
- PrintType = input.PrintType,
|
|
|
- PrintName = input.PrintName,
|
|
|
- };
|
|
|
- // 模板目录
|
|
|
+ var (tableFieldList, result) = await RenderTemplateAsync(input);
|
|
|
var templatePathList = GetTemplatePathList(input);
|
|
|
- var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "template");
|
|
|
-
|
|
|
for (var i = 0; i < templatePathList.Count; i++)
|
|
|
{
|
|
|
- var templateFilePath = Path.Combine(templatePath, templatePathList[i]);
|
|
|
- if (!File.Exists(templateFilePath)) continue;
|
|
|
- var tContent = File.ReadAllText(templateFilePath);
|
|
|
- var tResult = await _viewEngine.RunCompileFromCachedAsync(tContent, data, builderAction: builder =>
|
|
|
- {
|
|
|
- builder.AddAssemblyReferenceByName("System.Linq");
|
|
|
- builder.AddAssemblyReferenceByName("System.Collections");
|
|
|
- builder.AddAssemblyReferenceByName("System.Text.RegularExpressions");
|
|
|
- builder.AddUsing("System.Text.RegularExpressions");
|
|
|
- builder.AddUsing("System.Collections.Generic");
|
|
|
- builder.AddUsing("System.Linq");
|
|
|
- });
|
|
|
- var dirPath = new DirectoryInfo(targetPathList[i]).Parent.FullName;
|
|
|
- if (!Directory.Exists(dirPath))
|
|
|
- Directory.CreateDirectory(dirPath);
|
|
|
- File.WriteAllText(targetPathList[i], tResult, Encoding.UTF8);
|
|
|
+ var content = result.GetValueOrDefault(templatePathList[i]?.TrimEnd(".vm"));
|
|
|
+ if (string.IsNullOrWhiteSpace(content)) continue;
|
|
|
+ var dirPath = new DirectoryInfo(targetPathList[i]).Parent!.FullName;
|
|
|
+ if (!Directory.Exists(dirPath)) Directory.CreateDirectory(dirPath);
|
|
|
+ _ = File.WriteAllTextAsync(targetPathList[i], content, Encoding.UTF8);
|
|
|
}
|
|
|
- if (input.GenerateMenu)
|
|
|
- await AddMenu(input.TableName, input.BusName, input.MenuPid ?? 0, input.MenuIcon, input.PagePath, tableFieldList);
|
|
|
+
|
|
|
+ if (input.GenerateMenu) await AddMenu(input.TableName, input.BusName, input.MenuPid ?? 0, input.MenuIcon, input.PagePath, tableFieldList);
|
|
|
+
|
|
|
// 非ZIP压缩返回空
|
|
|
- if (!input.GenerateType.StartsWith('1'))
|
|
|
- return null;
|
|
|
- else
|
|
|
- {
|
|
|
- string downloadPath = zipPath + ".zip";
|
|
|
- // 判断是否存在同名称文件
|
|
|
- if (File.Exists(downloadPath))
|
|
|
- File.Delete(downloadPath);
|
|
|
- ZipFile.CreateFromDirectory(zipPath, downloadPath);
|
|
|
- return new { url = $"{App.HttpContext.Request.Scheme}://{App.HttpContext.Request.Host.Value}/codeGen/{input.TableName}.zip" };
|
|
|
- }
|
|
|
+ if (!input.GenerateType.StartsWith('1')) return null;
|
|
|
+
|
|
|
+ // 判断是否存在同名称文件
|
|
|
+ string downloadPath = zipPath + ".zip";
|
|
|
+ if (File.Exists(downloadPath)) File.Delete(downloadPath);
|
|
|
+
|
|
|
+ // 创建zip文件并返回下载地址
|
|
|
+ ZipFile.CreateFromDirectory(zipPath, downloadPath);
|
|
|
+ return new { url = $"{App.HttpContext.Request.Scheme}://{App.HttpContext.Request.Host.Value}/codeGen/{input.TableName}.zip" };
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -409,28 +366,51 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
[DisplayName("获取代码生成预览")]
|
|
|
+ // ReSharper disable once MemberCanBePrivate.Global
|
|
|
public async Task<Dictionary<string, string>> Preview(SysCodeGen input)
|
|
|
{
|
|
|
- var tableFieldList = await _codeGenConfigService.GetList(new CodeGenConfig() { CodeGenId = input.Id }); // 字段集合
|
|
|
- var queryWhetherList = tableFieldList.Where(u => u.QueryWhether == YesNoEnum.Y.ToString()).ToList(); // 前端查询集合
|
|
|
- var joinTableList = tableFieldList.Where(u => u.EffectType == "Upload" || u.EffectType == "ForeignKey" || u.EffectType == "ApiTreeSelector").ToList(); // 需要连表查询的字段
|
|
|
+ var (_, result) = await RenderTemplateAsync(input);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
|
|
|
- var data = new CustomViewEngine(_db)
|
|
|
+ /// <summary>
|
|
|
+ /// 渲染模板
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="input"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private async Task<(List<CodeGenConfig> tableFieldList, Dictionary<string, string> result)> RenderTemplateAsync(SysCodeGen input)
|
|
|
+ {
|
|
|
+ var tableFieldList = await _codeGenConfigService.GetList(new CodeGenConfig { CodeGenId = input.Id }); // 字段集合
|
|
|
+ var joinTableList = tableFieldList.Where(u => u.EffectType is "Upload" or "ForeignKey" or "ApiTreeSelector").ToList(); // 需要连表查询的字段
|
|
|
+
|
|
|
+ var data = new CustomViewEngine
|
|
|
{
|
|
|
ConfigId = input.ConfigId,
|
|
|
- AuthorName = input.AuthorName,
|
|
|
BusName = input.BusName,
|
|
|
+ PagePath = input.PagePath,
|
|
|
NameSpace = input.NameSpace,
|
|
|
ClassName = input.TableName,
|
|
|
- PagePath = input.PagePath,
|
|
|
- TableUniqueList = input.TableUniqueList ?? new(),
|
|
|
- ProjectLastName = input.NameSpace.Split('.').Last(),
|
|
|
- QueryWhetherList = queryWhetherList,
|
|
|
- TableField = tableFieldList,
|
|
|
- IsJoinTable = joinTableList.Count > 0,
|
|
|
- IsUpload = joinTableList.Where(u => u.EffectType == "Upload").Any(),
|
|
|
PrintType = input.PrintType,
|
|
|
PrintName = input.PrintName,
|
|
|
+ AuthorName = input.AuthorName,
|
|
|
+ ProjectLastName = input.NameSpace!.Split('.').Last(),
|
|
|
+ LowerClassName = input.TableName![..1].ToLower() + input.TableName[1..],
|
|
|
+ TableUniqueConfigList = input.TableUniqueList ?? new(),
|
|
|
+
|
|
|
+ TableField = tableFieldList,
|
|
|
+ QueryWhetherList = tableFieldList.Where(u => u.WhetherQuery == "Y").ToList(),
|
|
|
+ ImportFieldList = tableFieldList.Where(u => u.WhetherImport == "Y").ToList(),
|
|
|
+ UploadFieldList = tableFieldList.Where(u => u.EffectType == "Upload").ToList(),
|
|
|
+ DropdownFieldList = joinTableList.Where(u => u.EffectType != "Upload").ToList(),
|
|
|
+ PrimaryKeyFieldList = tableFieldList.Where(c => c.ColumnKey == "True").ToList(),
|
|
|
+ AddUpdateFieldList = tableFieldList.Where(u => u.WhetherAddUpdate == "Y").ToList(),
|
|
|
+
|
|
|
+ HasJoinTable = joinTableList.Count > 0,
|
|
|
+ HasDictField = tableFieldList.Any(u => u.EffectType == "DictSelector"),
|
|
|
+ HasEnumField = tableFieldList.Any(u => u.EffectType == "EnumSelector"),
|
|
|
+ HasConstField = tableFieldList.Any(u => u.EffectType == "ConstSelector"),
|
|
|
+ HasLikeQuery = tableFieldList.Any(c => c.WhetherQuery == "Y" && c.QueryType == "like"),
|
|
|
+ HasSetStatus = tableFieldList.Any(c => c.NetType == nameof(StatusEnum) && c.PropertyName == nameof(SysUser.Status)),
|
|
|
};
|
|
|
|
|
|
// 获取模板文件并替换
|
|
|
@@ -438,24 +418,24 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
var templatePath = Path.Combine(App.WebHostEnvironment.WebRootPath, "template");
|
|
|
|
|
|
var result = new Dictionary<string, string>();
|
|
|
- for (var i = 0; i < templatePathList.Count; i++)
|
|
|
+ foreach (var path in templatePathList)
|
|
|
{
|
|
|
- var templateFilePath = Path.Combine(templatePath, templatePathList[i]);
|
|
|
+ var templateFilePath = Path.Combine(templatePath, path);
|
|
|
if (!File.Exists(templateFilePath)) continue;
|
|
|
- var tContent = File.ReadAllText(templateFilePath);
|
|
|
+ var tContent = await File.ReadAllTextAsync(templateFilePath);
|
|
|
var tResult = await _viewEngine.RunCompileFromCachedAsync(tContent, data, builderAction: builder =>
|
|
|
{
|
|
|
- builder.AddAssemblyReferenceByName("System.Linq");
|
|
|
- builder.AddAssemblyReferenceByName("System.Collections");
|
|
|
builder.AddAssemblyReferenceByName("System.Text.RegularExpressions");
|
|
|
+ builder.AddAssemblyReferenceByName("System.Collections");
|
|
|
+ builder.AddAssemblyReferenceByName("System.Linq");
|
|
|
+
|
|
|
builder.AddUsing("System.Text.RegularExpressions");
|
|
|
builder.AddUsing("System.Collections.Generic");
|
|
|
builder.AddUsing("System.Linq");
|
|
|
});
|
|
|
- result.Add(templatePathList[i]?.TrimEnd(".vm"), tResult);
|
|
|
+ result.Add(path?.TrimEnd(".vm"), tResult);
|
|
|
}
|
|
|
-
|
|
|
- return result;
|
|
|
+ return (tableFieldList, result);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -489,13 +469,13 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
if (menuList0.Count > 0)
|
|
|
{
|
|
|
var listIds = menuList0.Select(u => u.Id).ToList();
|
|
|
- var childlistIds = new List<long>();
|
|
|
+ var childrenIds = new List<long>();
|
|
|
foreach (var item in listIds)
|
|
|
{
|
|
|
- var childlist = await _db.Queryable<SysMenu>().ToChildListAsync(u => u.Pid, item);
|
|
|
- childlistIds.AddRange(childlist.Select(u => u.Id).ToList());
|
|
|
+ var children = await _db.Queryable<SysMenu>().ToChildListAsync(u => u.Pid, item);
|
|
|
+ childrenIds.AddRange(children.Select(u => u.Id).ToList());
|
|
|
}
|
|
|
- listIds.AddRange(childlistIds);
|
|
|
+ listIds.AddRange(childrenIds);
|
|
|
await _db.Deleteable<SysMenu>().Where(u => listIds.Contains(u.Id)).ExecuteCommandAsync();
|
|
|
await _db.Deleteable<SysRoleMenu>().Where(u => listIds.Contains(u.MenuId)).ExecuteCommandAsync();
|
|
|
}
|
|
|
@@ -649,7 +629,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
var menuList = new List<SysMenu> { menuTypePage, menuTypeDetail, menuTypeAdd, menuTypeStatus, menuTypeDelete, menuTypeBatchDelete, menuTypeUpdate, menuTypePrint, menuTypeImport, menuTypeExport };
|
|
|
// 加入ForeignKey、Upload、ApiTreeSelector 等接口的权限
|
|
|
// 在生成表格时,有些字段只是查询时显示,不需要填写(WhetherAddUpdate),所以这些字段没必要生成相应接口
|
|
|
- var fkTableList = tableFieldList.Where(u => u.EffectType == "ForeignKey" && (u.WhetherAddUpdate == "Y" || u.QueryWhether == "Y")).ToList();
|
|
|
+ var fkTableList = tableFieldList.Where(u => u.EffectType == "ForeignKey" && (u.WhetherAddUpdate == "Y" || u.WhetherQuery == "Y")).ToList();
|
|
|
foreach (var @column in fkTableList)
|
|
|
{
|
|
|
var menuType1 = new SysMenu
|
|
|
@@ -700,7 +680,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
/// <returns></returns>
|
|
|
private static List<string> GetTemplatePathList(SysCodeGen input)
|
|
|
{
|
|
|
- if (input.GenerateType.Substring(1, 1).Contains('1'))
|
|
|
+ if (input.GenerateType!.Substring(1, 1).Contains('1'))
|
|
|
{
|
|
|
return new() { "index.vue.vm", "editDialog.vue.vm", "manage.js.vm" };
|
|
|
}
|
|
|
@@ -728,17 +708,17 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
private List<string> GetTargetPathList(SysCodeGen input)
|
|
|
{
|
|
|
//var backendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.FullName, _codeGenOptions.BackendApplicationNamespace, "Service", input.TableName);
|
|
|
- var backendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.FullName, input.NameSpace, "Service", input.TableName);
|
|
|
+ var backendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent!.FullName, input.NameSpace!, "Service", input.TableName!);
|
|
|
var servicePath = Path.Combine(backendPath, input.TableName + "Service.cs");
|
|
|
var inputPath = Path.Combine(backendPath, "Dto", input.TableName + "Input.cs");
|
|
|
var outputPath = Path.Combine(backendPath, "Dto", input.TableName + "Output.cs");
|
|
|
var viewPath = Path.Combine(backendPath, "Dto", input.TableName + "Dto.cs");
|
|
|
- var frontendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.Parent.FullName, _codeGenOptions.FrontRootPath, "src", "views", input.PagePath);
|
|
|
+ var frontendPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent!.Parent!.FullName, _codeGenOptions.FrontRootPath, "src", "views", input.PagePath!);
|
|
|
var indexPath = Path.Combine(frontendPath, input.TableName[..1].ToLower() + input.TableName[1..], "index.vue");//
|
|
|
var formModalPath = Path.Combine(frontendPath, input.TableName[..1].ToLower() + input.TableName[1..], "component", "editDialog.vue");
|
|
|
- var apiJsPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent.Parent.FullName, _codeGenOptions.FrontRootPath, "src", "api", input.PagePath, input.TableName[..1].ToLower() + input.TableName[1..] + ".ts");
|
|
|
+ var apiJsPath = Path.Combine(new DirectoryInfo(App.WebHostEnvironment.ContentRootPath).Parent!.Parent!.FullName, _codeGenOptions.FrontRootPath, "src", "api", input.PagePath, input.TableName[..1].ToLower() + input.TableName[1..] + ".ts");
|
|
|
|
|
|
- if (input.GenerateType.Substring(1, 1).Contains('1'))
|
|
|
+ if (input.GenerateType!.Substring(1, 1).Contains('1'))
|
|
|
{
|
|
|
// 生成到本项目(前端)
|
|
|
return new List<string>()
|
|
|
@@ -782,19 +762,19 @@ public class SysCodeGenService : IDynamicApiController, ITransient
|
|
|
/// <returns></returns>
|
|
|
private List<string> GetZipPathList(SysCodeGen input)
|
|
|
{
|
|
|
- var zipPath = Path.Combine(App.WebHostEnvironment.WebRootPath, "CodeGen", input.TableName);
|
|
|
+ var zipPath = Path.Combine(App.WebHostEnvironment.WebRootPath, "CodeGen", input.TableName!);
|
|
|
|
|
|
//var backendPath = Path.Combine(zipPath, _codeGenOptions.BackendApplicationNamespace, "Service", input.TableName);
|
|
|
- var backendPath = Path.Combine(zipPath, input.NameSpace, "Service", input.TableName);
|
|
|
+ var backendPath = Path.Combine(zipPath, input.NameSpace!, "Service", input.TableName);
|
|
|
var servicePath = Path.Combine(backendPath, input.TableName + "Service.cs");
|
|
|
var inputPath = Path.Combine(backendPath, "Dto", input.TableName + "Input.cs");
|
|
|
var outputPath = Path.Combine(backendPath, "Dto", input.TableName + "Output.cs");
|
|
|
var viewPath = Path.Combine(backendPath, "Dto", input.TableName + "Dto.cs");
|
|
|
- var frontendPath = Path.Combine(zipPath, _codeGenOptions.FrontRootPath, "src", "views", input.PagePath);
|
|
|
+ var frontendPath = Path.Combine(zipPath, _codeGenOptions.FrontRootPath, "src", "views", input.PagePath!);
|
|
|
var indexPath = Path.Combine(frontendPath, input.TableName[..1].ToLower() + input.TableName[1..], "index.vue");
|
|
|
var formModalPath = Path.Combine(frontendPath, input.TableName[..1].ToLower() + input.TableName[1..], "component", "editDialog.vue");
|
|
|
var apiJsPath = Path.Combine(zipPath, _codeGenOptions.FrontRootPath, "src", "api", input.PagePath, input.TableName[..1].ToLower() + input.TableName[1..] + ".ts");
|
|
|
- if (input.GenerateType.StartsWith("11"))
|
|
|
+ if (input.GenerateType!.StartsWith("11"))
|
|
|
{
|
|
|
return new List<string>()
|
|
|
{
|