diff --git a/Admin.NET/Admin.NET.Core/Entity/SysCodeGen.cs b/Admin.NET/Admin.NET.Core/Entity/SysCodeGen.cs index 8ec86d27..733dae7a 100644 --- a/Admin.NET/Admin.NET.Core/Entity/SysCodeGen.cs +++ b/Admin.NET/Admin.NET.Core/Entity/SysCodeGen.cs @@ -128,4 +128,10 @@ public partial class SysCodeGen : EntityBase /// [SugarColumn(ColumnDescription = "是否使用 Api Service")] public bool IsApiService { get; set; } = false; + + /// + /// 模板关系 + /// + [Navigate(NavigateType.OneToMany, nameof(SysCodeGenTemplateRelation.CodeGenId))]//SysCodeGenTemplateRelation表中的CodeGenId + public List CodeGenTemplateRelations { get; set; }//注意禁止给CodeGenTemplateRelations手动赋值 } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Entity/SysCodeGenTemplate.cs b/Admin.NET/Admin.NET.Core/Entity/SysCodeGenTemplate.cs index 75b00476..c2c333e7 100644 --- a/Admin.NET/Admin.NET.Core/Entity/SysCodeGenTemplate.cs +++ b/Admin.NET/Admin.NET.Core/Entity/SysCodeGenTemplate.cs @@ -32,6 +32,12 @@ public partial class SysCodeGenTemplate : EntityBase [SugarColumn(ColumnDescription = "是否是内置模板")] public YesNoEnum SysFlag { get; set; } = YesNoEnum.Y; + /// + /// 是否默认 + /// + [SugarColumn(ColumnDescription = "是否默认")] + public bool? IsDefault { get; set; } + /// /// 输出位置 /// diff --git a/Admin.NET/Admin.NET.Core/Entity/SysCodeGenTemplateRelation.cs b/Admin.NET/Admin.NET.Core/Entity/SysCodeGenTemplateRelation.cs new file mode 100644 index 00000000..d229de4a --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Entity/SysCodeGenTemplateRelation.cs @@ -0,0 +1,29 @@ +// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 +// +// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 +// +// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + +namespace Admin.NET.Core; + +/// +/// 代码生成模板关系表 +/// +[SugarTable(null, "代码生成模板关系表")] +[SysTable] +public partial class SysCodeGenTemplateRelation : EntityBaseId +{ + /// + /// 代码生成Id + /// + [SugarColumn(ColumnDescription = "代码生成Id")] + [Required] + public long CodeGenId { get; set; } + + /// + /// 模板Id + /// + [SugarColumn(ColumnDescription = "模板Id")] + [Required] + public long TemplateId { get; set; } +} \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/SeedData/SysCodeGenTemplate.cs b/Admin.NET/Admin.NET.Core/SeedData/SysCodeGenTemplate.cs index e2ef9ad9..0574815c 100644 --- a/Admin.NET/Admin.NET.Core/SeedData/SysCodeGenTemplate.cs +++ b/Admin.NET/Admin.NET.Core/SeedData/SysCodeGenTemplate.cs @@ -4,6 +4,8 @@ // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! +using Microsoft.AspNetCore.Server.IISIntegration; + namespace Admin.NET.Core; /// @@ -19,13 +21,13 @@ public class SysCodeGenTemplateSeedData : ISqlSugarEntitySeedData public override bool IsApiService { get; set; } + + /// + /// 模板Id集合 + /// + public List CodeGenTemplateIds { get; set; } } public class DeleteCodeGenInput diff --git a/Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs b/Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs index 96dd1834..aee6ffb0 100644 --- a/Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs +++ b/Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs @@ -42,6 +42,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient public async Task> Page(PageCodeGenInput input) { return await _db.Queryable() + .Includes(u => u.CodeGenTemplateRelations) .WhereIF(!string.IsNullOrWhiteSpace(input.TableName), u => u.TableName!.Contains(input.TableName.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.BusName), u => u.BusName!.Contains(input.BusName.Trim())) .OrderBy(u => u.Id, OrderByType.Desc) @@ -62,12 +63,41 @@ public class SysCodeGenService : IDynamicApiController, ITransient throw Oops.Oh(ErrorCodeEnum.D1400); var codeGen = input.Adapt(); - var newCodeGen = await _db.Insertable(codeGen).ExecuteReturnEntityAsync(); + long id = YitIdHelper.NextId(); + var templateRelations = GetCodeGenTemplateRelation(id, input.CodeGenTemplateIds); + codeGen.Id = id; + codeGen.CodeGenTemplateRelations = templateRelations; + //var newCodeGen = await _db.Insertable(codeGen).ExecuteReturnEntityAsync(); + var newCodeGen = await _db.InsertNav(codeGen) + .Include(t => t.CodeGenTemplateRelations) + .ExecuteReturnEntityAsync(); // 增加配置表 _codeGenConfigService.AddList(GetColumnList(input), newCodeGen); } + /// + /// 获取代码生成模板关系集合 🔖 + /// + /// + /// + /// + private List GetCodeGenTemplateRelation(long codeGenId, List templateIds) + { + + List list = new List(); + foreach (var item in templateIds) + { + SysCodeGenTemplateRelation relation = new SysCodeGenTemplateRelation(); + relation.CodeGenId = codeGenId; + relation.TemplateId = item; + list.Add(relation); + } + return list; + } + + + /// /// 更新代码生成 🔖 /// @@ -82,7 +112,12 @@ public class SysCodeGenService : IDynamicApiController, ITransient throw Oops.Oh(ErrorCodeEnum.D1400); var codeGen = input.Adapt(); - await _db.Updateable(codeGen).ExecuteCommandAsync(); + var templateRelations = GetCodeGenTemplateRelation(codeGen.Id, input.CodeGenTemplateIds); + codeGen.CodeGenTemplateRelations = templateRelations; + //await _db.Updateable(codeGen).ExecuteCommandAsync(); + await _db.UpdateNav(codeGen) + .Include(t => t.CodeGenTemplateRelations) + .ExecuteCommandAsync(); // 更新配置表 _codeGenConfigService.AddList(GetColumnList(input.Adapt()), codeGen); @@ -102,7 +137,10 @@ public class SysCodeGenService : IDynamicApiController, ITransient var codeGenConfigTaskList = new List(); inputs.ForEach(u => { - _db.Deleteable().In(u.Id).ExecuteCommand(); + //_db.Deleteable().In(u.Id).ExecuteCommand(); + _db.DeleteNav(t=>t.Id==u.Id) + .Include(t => t.CodeGenTemplateRelations) + .ExecuteCommand(); // 删除配置表 codeGenConfigTaskList.Add(_codeGenConfigService.DeleteCodeGenConfig(u.Id)); @@ -775,22 +813,26 @@ public class SysCodeGenService : IDynamicApiController, ITransient /// private List GetTemplateList(SysCodeGen input) { + //var codeGen= _codeGenRep.AsQueryable() //TODO: 只获取选中的模板 if (input.GenerateType!.Substring(1, 1).Contains('1')) { return _codeGetTemplateRep.AsQueryable() .Where(u => u.Type == CodeGenTypeEnum.Frontend) + .Where(u => u.Id == SqlFunc.Subqueryable().Where(s => s.CodeGenId == input.Id).GroupBy(s => s.TemplateId).Select(s => s.TemplateId)) .ToList(); } else if (input.GenerateType.Substring(1, 1).Contains('2')) { return _codeGetTemplateRep.AsQueryable() .Where(u => u.Type == CodeGenTypeEnum.Backend) + .Where(u => u.Id == SqlFunc.Subqueryable().Where(s => s.CodeGenId == input.Id).GroupBy(s => s.TemplateId).Select(s => s.TemplateId)) .ToList(); } else { return _codeGetTemplateRep.AsQueryable() + .Where(u => u.Id == SqlFunc.Subqueryable().Where(s => s.CodeGenId == input.Id).GroupBy(s => s.TemplateId).Select(s => s.TemplateId)) .ToList(); } } diff --git a/Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenTemplateService.cs b/Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenTemplateService.cs new file mode 100644 index 00000000..a2906c63 --- /dev/null +++ b/Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenTemplateService.cs @@ -0,0 +1,31 @@ +// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 +// +// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 +// +// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + +namespace Admin.NET.Core.Service; + +/// +/// 代码生成模板配置服务 🧩 +/// +[ApiDescriptionSettings(Order = 260)] +public class SysCodeGenTemplateService : IDynamicApiController, ITransient +{ + private readonly SqlSugarRepository _codeGenTemplateRep; + public SysCodeGenTemplateService(SqlSugarRepository codeGenTemplateRep) + { + _codeGenTemplateRep = codeGenTemplateRep; + } + + /// + /// 获取代码生成模板配置列表 + /// + /// + [ApiDescriptionSettings(Name = "list", Description = "获取代码生成模板配置列表", Order = 950), HttpGet] + [DisplayName("获取代码生成模板配置列表")] + public async Task> List() + { + return await _codeGenTemplateRep.AsQueryable().Select().ToListAsync(); + } +} diff --git a/Web/src/api-services/models/update-code-gen-input.ts b/Web/src/api-services/models/update-code-gen-input.ts index b59bacba..6096fc31 100644 --- a/Web/src/api-services/models/update-code-gen-input.ts +++ b/Web/src/api-services/models/update-code-gen-input.ts @@ -249,4 +249,12 @@ export interface UpdateCodeGenInput { * @memberof UpdateCodeGenInput */ id: number; + + /** + * 模板关系 + * + * @type {any[]} + * @memberof UpdateCodeGenInput + */ + codeGenTemplateRelations:any[]; } diff --git a/Web/src/api/system/sysCodeGenTemplate.ts b/Web/src/api/system/sysCodeGenTemplate.ts new file mode 100644 index 00000000..61b4b871 --- /dev/null +++ b/Web/src/api/system/sysCodeGenTemplate.ts @@ -0,0 +1,14 @@ +import request from '/@/utils/request'; +enum Api { + ListSysCodeGenTemplate = '/api/sysCodeGenTemplate/list', +} + +// 获取代码生成模板配置列表 +export const listSysCodeGenTemplate = (params?: any) => + request({ + url: Api.ListSysCodeGenTemplate, + method: 'get', + data: params, + }); + + diff --git a/Web/src/views/system/codeGen/component/editCodeGenDialog.vue b/Web/src/views/system/codeGen/component/editCodeGenDialog.vue index f628c7cc..3cad74df 100644 --- a/Web/src/views/system/codeGen/component/editCodeGenDialog.vue +++ b/Web/src/views/system/codeGen/component/editCodeGenDialog.vue @@ -3,168 +3,198 @@ -
- - 如果是在前端生成的实体/表(在生成表选择项里面找不到),请重启后台服务后再进行代码生成。 -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 使用API Service - 不使用 - - - - - - - - - - - - - - - - - - - + + +
+ + 如果是在前端生成的实体/表(在生成表选择项里面找不到),请重启后台服务后再进行代码生成。 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 使用API Service + 不使用 + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +