diff --git a/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityDto.cs b/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityDto.cs new file mode 100644 index 00000000..fee4ce74 --- /dev/null +++ b/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityDto.cs @@ -0,0 +1,16 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Kurs.Platform.Entities; + +public class ActivityDto : FullAuditedEntityDto +{ + public Guid? TenantId { get; set; } + + public string Type { get; set; } + public string Subject { get; set; } + public string Content { get; set; } + public string RecipientUserName { get; set; } + + protected ActivityDto() { } +} diff --git a/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityFileDto.cs b/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityFileDto.cs new file mode 100644 index 00000000..d9838e18 --- /dev/null +++ b/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityFileDto.cs @@ -0,0 +1,18 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Kurs.Platform.Entities; + +public class ActivityFileDto : FullAuditedEntityDto +{ + public Guid? TenantId { get; set; } + + public string EntityName { get; set; } + public string EntityId { get; set; } + public string FileName { get; set; } + public long FileSize { get; set; } + public string FileType { get; set; } + public string FilePath { get; set; } + + public Guid ActivityItemId { get; set; } +} \ No newline at end of file diff --git a/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityItemDto.cs b/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityItemDto.cs new file mode 100644 index 00000000..cdc8de51 --- /dev/null +++ b/api/src/Kurs.Platform.Application.Contracts/Activity/ActivityItemDto.cs @@ -0,0 +1,21 @@ +using System; +using Volo.Abp.Application.Dtos; +using Volo.Abp.MultiTenancy; + +namespace Kurs.Platform.Entities; + +public class ActivityItemDto : FullAuditedEntityDto, IMultiTenant +{ + public Guid? TenantId { get; set; } + + public string Type { get; set; } + public string EntityName { get; set; } + public string EntityId { get; set; } + public Guid? RecipientUserId { get; set; } + public string RecipientUserName { get; set; } + public string Subject { get; set; } + public string Content { get; set; } + + // Navigation properties + public Guid ActivityId { get; set; } +} \ No newline at end of file diff --git a/api/src/Kurs.Platform.Application/AuditLogs/AuditLogActionDto.cs b/api/src/Kurs.Platform.Application.Contracts/AuditLogs/AuditLogActionDto.cs similarity index 100% rename from api/src/Kurs.Platform.Application/AuditLogs/AuditLogActionDto.cs rename to api/src/Kurs.Platform.Application.Contracts/AuditLogs/AuditLogActionDto.cs diff --git a/api/src/Kurs.Platform.Application/AuditLogs/AuditLogDto.cs b/api/src/Kurs.Platform.Application.Contracts/AuditLogs/AuditLogDto.cs similarity index 100% rename from api/src/Kurs.Platform.Application/AuditLogs/AuditLogDto.cs rename to api/src/Kurs.Platform.Application.Contracts/AuditLogs/AuditLogDto.cs diff --git a/api/src/Kurs.Platform.Application/AuditLogs/EntityChangeDto.cs b/api/src/Kurs.Platform.Application.Contracts/AuditLogs/EntityChangeDto.cs similarity index 100% rename from api/src/Kurs.Platform.Application/AuditLogs/EntityChangeDto.cs rename to api/src/Kurs.Platform.Application.Contracts/AuditLogs/EntityChangeDto.cs diff --git a/api/src/Kurs.Platform.Application/AuditLogs/EntityPropertyChangeDto.cs b/api/src/Kurs.Platform.Application.Contracts/AuditLogs/EntityPropertyChangeDto.cs similarity index 100% rename from api/src/Kurs.Platform.Application/AuditLogs/EntityPropertyChangeDto.cs rename to api/src/Kurs.Platform.Application.Contracts/AuditLogs/EntityPropertyChangeDto.cs diff --git a/api/src/Kurs.Platform.Application/Activity/ActivityAppService.cs b/api/src/Kurs.Platform.Application/Activity/ActivityAppService.cs new file mode 100644 index 00000000..24fc3f0a --- /dev/null +++ b/api/src/Kurs.Platform.Application/Activity/ActivityAppService.cs @@ -0,0 +1,22 @@ +using System; +using Kurs.Platform.Entities; +using Microsoft.AspNetCore.Authorization; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; + +namespace Kurs.Platform.DataSources; + +[Authorize] +public class ActivityAppService : CrudAppService< + Activity, + ActivityDto, + Guid, + PagedAndSortedResultRequestDto> +{ + public ActivityAppService( + IRepository repo) : base(repo) + { + + } +} diff --git a/api/src/Kurs.Platform.Application/Activity/ActivityAutoMapperProfile.cs b/api/src/Kurs.Platform.Application/Activity/ActivityAutoMapperProfile.cs new file mode 100644 index 00000000..40ca156d --- /dev/null +++ b/api/src/Kurs.Platform.Application/Activity/ActivityAutoMapperProfile.cs @@ -0,0 +1,15 @@ +using AutoMapper; +using Kurs.Platform.Entities; + +namespace Kurs.Platform.DataSources; + +public class ActivityAutoMapperProfile : Profile +{ + public ActivityAutoMapperProfile() + { + CreateMap(); + CreateMap(); + CreateMap(); + + } +} diff --git a/api/src/Kurs.Platform.Application/Activity/ActivityFileAppService.cs b/api/src/Kurs.Platform.Application/Activity/ActivityFileAppService.cs new file mode 100644 index 00000000..02016061 --- /dev/null +++ b/api/src/Kurs.Platform.Application/Activity/ActivityFileAppService.cs @@ -0,0 +1,22 @@ +using System; +using Kurs.Platform.Entities; +using Microsoft.AspNetCore.Authorization; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; + +namespace Kurs.Platform.DataSources; + +[Authorize] +public class ActivityFileAppService : CrudAppService< + ActivityFile, + ActivityFileDto, + Guid, + PagedAndSortedResultRequestDto> +{ + public ActivityFileAppService( + IRepository repo) : base(repo) + { + + } +} diff --git a/api/src/Kurs.Platform.Application/Activity/ActivityItemAppService.cs b/api/src/Kurs.Platform.Application/Activity/ActivityItemAppService.cs new file mode 100644 index 00000000..792a41cd --- /dev/null +++ b/api/src/Kurs.Platform.Application/Activity/ActivityItemAppService.cs @@ -0,0 +1,22 @@ +using System; +using Kurs.Platform.Entities; +using Microsoft.AspNetCore.Authorization; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; + +namespace Kurs.Platform.DataSources; + +[Authorize] +public class ActivityItemAppService : CrudAppService< + ActivityItem, + ActivityItemDto, + Guid, + PagedAndSortedResultRequestDto> +{ + public ActivityItemAppService( + IRepository repo) : base(repo) + { + + } +} diff --git a/api/src/Kurs.Platform.Application/AuditLogs/LogsAutoMapperProfile.cs b/api/src/Kurs.Platform.Application/AuditLogs/AuditLogAutoMapperProfile.cs similarity index 78% rename from api/src/Kurs.Platform.Application/AuditLogs/LogsAutoMapperProfile.cs rename to api/src/Kurs.Platform.Application/AuditLogs/AuditLogAutoMapperProfile.cs index 4e371692..236c12f7 100644 --- a/api/src/Kurs.Platform.Application/AuditLogs/LogsAutoMapperProfile.cs +++ b/api/src/Kurs.Platform.Application/AuditLogs/AuditLogAutoMapperProfile.cs @@ -3,9 +3,9 @@ using Volo.Abp.AuditLogging; namespace Kurs.Platform.AuditLogs; -public class LogsAutoMapperProfile : Profile +public class AuditLogAutoMapperProfile : Profile { - public LogsAutoMapperProfile() + public AuditLogAutoMapperProfile() { CreateMap(); CreateMap(); diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormsSeeder.cs b/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormsSeeder.cs index 4cdaa825..b7d6b468 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormsSeeder.cs +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormsSeeder.cs @@ -54,6 +54,7 @@ public class ListFormsSeeder : IDataSeedContributor, ITransientDependency { ListFormType = ListFormTypeEnum.Form, IsSubForm = false, + ShowActivity = true, LayoutJson = JsonSerializer.Serialize(new LayoutDto() { Grid = true, @@ -351,6 +352,7 @@ public class ListFormsSeeder : IDataSeedContributor, ITransientDependency { ListFormType = ListFormTypeEnum.Form, IsSubForm = false, + ShowActivity = true, LayoutJson = JsonSerializer.Serialize(new LayoutDto() { Grid = true, @@ -537,6 +539,7 @@ public class ListFormsSeeder : IDataSeedContributor, ITransientDependency { ListFormType = ListFormTypeEnum.Form, IsSubForm = false, + ShowActivity = true, LayoutJson = JsonSerializer.Serialize(new LayoutDto() { Grid = true, @@ -712,6 +715,7 @@ public class ListFormsSeeder : IDataSeedContributor, ITransientDependency { ListFormType = ListFormTypeEnum.Form, IsSubForm = false, + ShowActivity = true, LayoutJson = JsonSerializer.Serialize(new LayoutDto() { Grid = true, @@ -1265,6 +1269,7 @@ public class ListFormsSeeder : IDataSeedContributor, ITransientDependency { ListFormType = ListFormTypeEnum.Form, IsSubForm = false, + ShowActivity = true, LayoutJson = JsonSerializer.Serialize(new LayoutDto() { Grid = true, diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/Activity.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/Activity.cs new file mode 100644 index 00000000..0ae26888 --- /dev/null +++ b/api/src/Kurs.Platform.Domain/Entities/Tenant/Activity.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace Kurs.Platform.Entities; + +public class Activity : FullAuditedEntity, IMultiTenant +{ + public Guid? TenantId { get; set; } + + public string Type { get; set; } + public string Subject { get; set; } + public string Content { get; set; } + public Guid? RecipientUserId { get; set; } + public string RecipientUserName { get; set; } + + public ICollection ActivityItems { get; set; } + + protected Activity() { } + + public Activity(Guid id, string type, string subject, string content, string recipientUserName = null) + : base(id) + { + Type = type; + Subject = subject; + Content = content; + RecipientUserName = recipientUserName; + ActivityItems = new List(); + } +} \ No newline at end of file diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/ActivityFile.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/ActivityFile.cs new file mode 100644 index 00000000..a3682e7e --- /dev/null +++ b/api/src/Kurs.Platform.Domain/Entities/Tenant/ActivityFile.cs @@ -0,0 +1,43 @@ +using System; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace Kurs.Platform.Entities; + +public class ActivityFile : FullAuditedEntity, IMultiTenant +{ + public Guid? TenantId { get; set; } + + public string EntityName { get; set; } + public string EntityId { get; set; } + public string FileName { get; set; } + public long FileSize { get; set; } + public string FileType { get; set; } + public string FilePath { get; set; } + + // Navigation properties + public Guid ActivityItemId { get; set; } + public ActivityItem ActivityItem { get; set; } + + protected ActivityFile() { } + + public ActivityFile( + Guid id, + Guid activityItemId, + string entityName, + string entityId, + string fileName, + long fileSize, + string fileType, + string filePath) + : base(id) + { + ActivityItemId = activityItemId; + EntityName = entityName; + EntityId = entityId; + FileName = fileName; + FileSize = fileSize; + FileType = fileType; + FilePath = filePath; + } +} \ No newline at end of file diff --git a/api/src/Kurs.Platform.Domain/Entities/Tenant/ActivityItem.cs b/api/src/Kurs.Platform.Domain/Entities/Tenant/ActivityItem.cs new file mode 100644 index 00000000..f77a75de --- /dev/null +++ b/api/src/Kurs.Platform.Domain/Entities/Tenant/ActivityItem.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace Kurs.Platform.Entities; + +public class ActivityItem : FullAuditedEntity, IMultiTenant +{ + public Guid? TenantId { get; set; } + + public string Type { get; set; } + public string EntityName { get; set; } + public string EntityId { get; set; } + public Guid? RecipientUserId { get; set; } + public string RecipientUserName { get; set; } + public string Subject { get; set; } + public string Content { get; set; } + + // Navigation properties + public Guid ActivityId { get; set; } + public Activity Activity { get; set; } + + public ICollection AttachedFiles { get; set; } + + protected ActivityItem() { } + + public ActivityItem( + Guid id, + Guid activityId, + string type, + string entityName, + string entityId, + string subject, + string content, + Guid? recipientUserId = null, + string recipientUserName = null) + : base(id) + { + ActivityId = activityId; + Type = type; + EntityName = entityName; + EntityId = entityId; + Subject = subject; + Content = content; + RecipientUserId = recipientUserId; + RecipientUserName = recipientUserName; + AttachedFiles = []; + } +} \ No newline at end of file diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs b/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs index 88c8faf2..12bebd9c 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/EntityFrameworkCore/PlatformDbContext.cs @@ -63,6 +63,9 @@ public class PlatformDbContext : public DbSet ReportParameters { get; set; } public DbSet ReportGenerated { get; set; } public DbSet ReportCategories { get; set; } + public DbSet Activities { get; set; } + public DbSet ActivityItems { get; set; } + public DbSet ActivityFiles { get; set; } #endregion #region Definitions from the modules @@ -1549,5 +1552,72 @@ public class PlatformDbContext : b.HasIndex(x => x.SenderId); b.HasIndex(x => x.Timestamp); }); + + // Form Activity Entities + builder.Entity(b => + { + b.ToTable(Prefix.DbTableDefault + nameof(Activity), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.Subject).IsRequired().HasMaxLength(256); + b.Property(x => x.Content).IsRequired().HasMaxLength(2000); + b.Property(x => x.RecipientUserName).HasMaxLength(100); + b.Property(x => x.Type).IsRequired(); + + b.HasIndex(x => x.Type); + b.HasIndex(x => x.CreatorId); + b.HasIndex(x => x.CreationTime); + }); + + builder.Entity(b => + { + b.ToTable(Prefix.DbTableDefault + nameof(ActivityItem), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.EntityName).IsRequired().HasMaxLength(128); + b.Property(x => x.EntityId).IsRequired().HasMaxLength(128); + b.Property(x => x.Subject).IsRequired().HasMaxLength(256); + b.Property(x => x.Content).IsRequired().HasMaxLength(2000); + b.Property(x => x.RecipientUserName).HasMaxLength(100); + b.Property(x => x.Type).IsRequired(); + + // Foreign key relationship + b.HasOne(ai => ai.Activity) + .WithMany(a => a.ActivityItems) + .HasForeignKey(ai => ai.ActivityId) + .OnDelete(DeleteBehavior.Cascade); + + b.HasIndex(x => x.ActivityId); + b.HasIndex(x => x.EntityName); + b.HasIndex(x => x.EntityId); + b.HasIndex(x => x.Type); + b.HasIndex(x => x.RecipientUserId); + b.HasIndex(x => x.CreatorId); + }); + + builder.Entity(b => + { + b.ToTable(Prefix.DbTableDefault + nameof(ActivityFile), Prefix.DbSchema); + b.ConfigureByConvention(); + + b.Property(x => x.EntityName).IsRequired().HasMaxLength(128); + b.Property(x => x.EntityId).IsRequired().HasMaxLength(128); + b.Property(x => x.FileName).IsRequired().HasMaxLength(256); + b.Property(x => x.FileType).IsRequired().HasMaxLength(50); + b.Property(x => x.FilePath).IsRequired().HasMaxLength(512); + b.Property(x => x.FileSize).IsRequired(); + + // Foreign key relationship + b.HasOne(af => af.ActivityItem) + .WithMany(ai => ai.AttachedFiles) + .HasForeignKey(af => af.ActivityItemId) + .OnDelete(DeleteBehavior.Cascade); + + b.HasIndex(x => x.ActivityItemId); + b.HasIndex(x => x.EntityName); + b.HasIndex(x => x.EntityId); + b.HasIndex(x => x.FileName); + b.HasIndex(x => x.CreatorId); + }); } } diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013115205_Initial.Designer.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013134213_Initial.Designer.cs similarity index 97% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013115205_Initial.Designer.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013134213_Initial.Designer.cs index 3be095aa..ec1c8040 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013115205_Initial.Designer.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013134213_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Kurs.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20251013115205_Initial")] + [Migration("20251013134213_Initial")] partial class Initial { /// @@ -625,6 +625,247 @@ namespace Kurs.Platform.Migrations b.ToTable("WAbout", (string)null); }); + modelBuilder.Entity("Kurs.Platform.Entities.Activity", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("RecipientUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Subject") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreationTime"); + + b.HasIndex("CreatorId"); + + b.HasIndex("Type"); + + b.ToTable("PActivity", (string)null); + }); + + modelBuilder.Entity("Kurs.Platform.Entities.ActivityFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ActivityItemId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("EntityName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("FilePath") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("FileType") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("ActivityItemId"); + + b.HasIndex("CreatorId"); + + b.HasIndex("EntityId"); + + b.HasIndex("EntityName"); + + b.HasIndex("FileName"); + + b.ToTable("PActivityFile", (string)null); + }); + + modelBuilder.Entity("Kurs.Platform.Entities.ActivityItem", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ActivityId") + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("EntityName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("RecipientUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RecipientUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Subject") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId"); + + b.HasIndex("CreatorId"); + + b.HasIndex("EntityId"); + + b.HasIndex("EntityName"); + + b.HasIndex("RecipientUserId"); + + b.HasIndex("Type"); + + b.ToTable("PActivityItem", (string)null); + }); + modelBuilder.Entity("Kurs.Platform.Entities.AiBot", b => { b.Property("Id") @@ -8619,6 +8860,28 @@ namespace Kurs.Platform.Migrations b.Navigation("NotificationRule"); }); + modelBuilder.Entity("Kurs.Platform.Entities.ActivityFile", b => + { + b.HasOne("Kurs.Platform.Entities.ActivityItem", "ActivityItem") + .WithMany("AttachedFiles") + .HasForeignKey("ActivityItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ActivityItem"); + }); + + modelBuilder.Entity("Kurs.Platform.Entities.ActivityItem", b => + { + b.HasOne("Kurs.Platform.Entities.Activity", "Activity") + .WithMany("ActivityItems") + .HasForeignKey("ActivityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Activity"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.ApiEndpoint", b => { b.HasOne("Kurs.Platform.Entities.CustomEntity", "Entity") @@ -9117,6 +9380,16 @@ namespace Kurs.Platform.Migrations b.Navigation("Notifications"); }); + modelBuilder.Entity("Kurs.Platform.Entities.Activity", b => + { + b.Navigation("ActivityItems"); + }); + + modelBuilder.Entity("Kurs.Platform.Entities.ActivityItem", b => + { + b.Navigation("AttachedFiles"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.BlogCategory", b => { b.Navigation("Posts"); diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013115205_Initial.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013134213_Initial.cs similarity index 96% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013115205_Initial.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013134213_Initial.cs index 3f5fd729..b6d76540 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013115205_Initial.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20251013134213_Initial.cs @@ -1208,6 +1208,29 @@ namespace Kurs.Platform.Migrations table.PrimaryKey("PK_OpenIddictScopes", x => x.Id); }); + migrationBuilder.CreateTable( + name: "PActivity", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Type = table.Column(type: "int", nullable: false), + Subject = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + Content = table.Column(type: "nvarchar(2000)", maxLength: 2000, nullable: false), + RecipientUserName = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PActivity", x => x.Id); + }); + migrationBuilder.CreateTable( name: "PAiBot", columns: table => new @@ -2589,6 +2612,39 @@ namespace Kurs.Platform.Migrations principalColumn: "Id"); }); + migrationBuilder.CreateTable( + name: "PActivityItem", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Type = table.Column(type: "int", nullable: false), + EntityName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + RecipientUserId = table.Column(type: "uniqueidentifier", nullable: true), + RecipientUserName = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: true), + Subject = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + Content = table.Column(type: "nvarchar(2000)", maxLength: 2000, nullable: false), + ActivityId = table.Column(type: "uniqueidentifier", nullable: false), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PActivityItem", x => x.Id); + table.ForeignKey( + name: "FK_PActivityItem_PActivity_ActivityId", + column: x => x.ActivityId, + principalTable: "PActivity", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + migrationBuilder.CreateTable( name: "PBackgroundWorker_MailQueue", columns: table => new @@ -3292,6 +3348,38 @@ namespace Kurs.Platform.Migrations principalColumn: "Id"); }); + migrationBuilder.CreateTable( + name: "PActivityFile", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + EntityName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + EntityId = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + FileName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + FileSize = table.Column(type: "bigint", nullable: false), + FileType = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + FilePath = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: false), + ActivityItemId = table.Column(type: "uniqueidentifier", nullable: false), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PActivityFile", x => x.Id); + table.ForeignKey( + name: "FK_PActivityFile_PActivityItem_ActivityItemId", + column: x => x.ActivityItemId, + principalTable: "PActivityItem", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + migrationBuilder.CreateTable( name: "PBackgroundWorker_MailQueueEvents", columns: table => new @@ -3831,6 +3919,76 @@ namespace Kurs.Platform.Migrations table: "OpenIddictTokens", column: "ReferenceId"); + migrationBuilder.CreateIndex( + name: "IX_PActivity_CreationTime", + table: "PActivity", + column: "CreationTime"); + + migrationBuilder.CreateIndex( + name: "IX_PActivity_CreatorId", + table: "PActivity", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_PActivity_Type", + table: "PActivity", + column: "Type"); + + migrationBuilder.CreateIndex( + name: "IX_PActivityFile_ActivityItemId", + table: "PActivityFile", + column: "ActivityItemId"); + + migrationBuilder.CreateIndex( + name: "IX_PActivityFile_CreatorId", + table: "PActivityFile", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_PActivityFile_EntityId", + table: "PActivityFile", + column: "EntityId"); + + migrationBuilder.CreateIndex( + name: "IX_PActivityFile_EntityName", + table: "PActivityFile", + column: "EntityName"); + + migrationBuilder.CreateIndex( + name: "IX_PActivityFile_FileName", + table: "PActivityFile", + column: "FileName"); + + migrationBuilder.CreateIndex( + name: "IX_PActivityItem_ActivityId", + table: "PActivityItem", + column: "ActivityId"); + + migrationBuilder.CreateIndex( + name: "IX_PActivityItem_CreatorId", + table: "PActivityItem", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_PActivityItem_EntityId", + table: "PActivityItem", + column: "EntityId"); + + migrationBuilder.CreateIndex( + name: "IX_PActivityItem_EntityName", + table: "PActivityItem", + column: "EntityName"); + + migrationBuilder.CreateIndex( + name: "IX_PActivityItem_RecipientUserId", + table: "PActivityItem", + column: "RecipientUserId"); + + migrationBuilder.CreateIndex( + name: "IX_PActivityItem_Type", + table: "PActivityItem", + column: "Type"); + migrationBuilder.CreateIndex( name: "IX_PApiEndpoint_EntityId", table: "PApiEndpoint", @@ -4219,6 +4377,9 @@ namespace Kurs.Platform.Migrations migrationBuilder.DropTable( name: "OpenIddictTokens"); + migrationBuilder.DropTable( + name: "PActivityFile"); + migrationBuilder.DropTable( name: "PAiBot"); @@ -4372,6 +4533,9 @@ namespace Kurs.Platform.Migrations migrationBuilder.DropTable( name: "OpenIddictAuthorizations"); + migrationBuilder.DropTable( + name: "PActivityItem"); + migrationBuilder.DropTable( name: "PBackgroundWorker_MailQueue"); @@ -4417,6 +4581,9 @@ namespace Kurs.Platform.Migrations migrationBuilder.DropTable( name: "OpenIddictApplications"); + migrationBuilder.DropTable( + name: "PActivity"); + migrationBuilder.DropTable( name: "PBackgroundWorker_MailQueueTableFormat"); diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs index df2ac4ee..60d11600 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs @@ -622,6 +622,247 @@ namespace Kurs.Platform.Migrations b.ToTable("WAbout", (string)null); }); + modelBuilder.Entity("Kurs.Platform.Entities.Activity", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("RecipientUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Subject") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreationTime"); + + b.HasIndex("CreatorId"); + + b.HasIndex("Type"); + + b.ToTable("PActivity", (string)null); + }); + + modelBuilder.Entity("Kurs.Platform.Entities.ActivityFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ActivityItemId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("EntityName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("FilePath") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("FileSize") + .HasColumnType("bigint"); + + b.Property("FileType") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("ActivityItemId"); + + b.HasIndex("CreatorId"); + + b.HasIndex("EntityId"); + + b.HasIndex("EntityName"); + + b.HasIndex("FileName"); + + b.ToTable("PActivityFile", (string)null); + }); + + modelBuilder.Entity("Kurs.Platform.Entities.ActivityItem", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ActivityId") + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("EntityName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("RecipientUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RecipientUserName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Subject") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId"); + + b.HasIndex("CreatorId"); + + b.HasIndex("EntityId"); + + b.HasIndex("EntityName"); + + b.HasIndex("RecipientUserId"); + + b.HasIndex("Type"); + + b.ToTable("PActivityItem", (string)null); + }); + modelBuilder.Entity("Kurs.Platform.Entities.AiBot", b => { b.Property("Id") @@ -8616,6 +8857,28 @@ namespace Kurs.Platform.Migrations b.Navigation("NotificationRule"); }); + modelBuilder.Entity("Kurs.Platform.Entities.ActivityFile", b => + { + b.HasOne("Kurs.Platform.Entities.ActivityItem", "ActivityItem") + .WithMany("AttachedFiles") + .HasForeignKey("ActivityItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ActivityItem"); + }); + + modelBuilder.Entity("Kurs.Platform.Entities.ActivityItem", b => + { + b.HasOne("Kurs.Platform.Entities.Activity", "Activity") + .WithMany("ActivityItems") + .HasForeignKey("ActivityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Activity"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.ApiEndpoint", b => { b.HasOne("Kurs.Platform.Entities.CustomEntity", "Entity") @@ -9114,6 +9377,16 @@ namespace Kurs.Platform.Migrations b.Navigation("Notifications"); }); + modelBuilder.Entity("Kurs.Platform.Entities.Activity", b => + { + b.Navigation("ActivityItems"); + }); + + modelBuilder.Entity("Kurs.Platform.Entities.ActivityItem", b => + { + b.Navigation("AttachedFiles"); + }); + modelBuilder.Entity("Kurs.Platform.Entities.BlogCategory", b => { b.Navigation("Posts"); diff --git a/ui/src/assets/styles/components/_menu-item.css b/ui/src/assets/styles/components/_menu-item.css index da69ac0f..fea97f11 100644 --- a/ui/src/assets/styles/components/_menu-item.css +++ b/ui/src/assets/styles/components/_menu-item.css @@ -1,5 +1,5 @@ .menu-item { - @apply cursor-pointer font-medium rounded-md flex items-center w-full whitespace-nowrap gap-x-1 px-0.5; + @apply cursor-pointer font-medium rounded-md flex items-center w-full whitespace-nowrap gap-x-1 px-1.5; &.menu-item-light { @apply text-gray-600; diff --git a/ui/src/proxy/activity/models.ts b/ui/src/proxy/activity/models.ts new file mode 100644 index 00000000..f4f33a3e --- /dev/null +++ b/ui/src/proxy/activity/models.ts @@ -0,0 +1,32 @@ +import { FullAuditedEntityDto } from "../abp"; + +export interface ActivityDto extends FullAuditedEntityDto { + tenantId?: string; + type?: string; + subject?: string; + content?: string; + recipientUserName?: string; +} + +export interface ActivityFileDto extends FullAuditedEntityDto { + tenantId?: string; + entityName?: string; + entityId?: string; + fileName?: string; + fileSize?: number; + fileType?: string; + filePath?: string; + activityItemId: string; +} + +export interface ActivityItemDto extends FullAuditedEntityDto { + tenantId?: string; + type?: string; + entityName?: string; + entityId?: string; + recipientUserId?: string; + recipientUserName?: string; + subject?: string; + content?: string; + activityId: string; +} \ No newline at end of file diff --git a/ui/src/services/activity.service.ts b/ui/src/services/activity.service.ts new file mode 100644 index 00000000..996b08e1 --- /dev/null +++ b/ui/src/services/activity.service.ts @@ -0,0 +1,134 @@ +import { ActivityDto, ActivityItemDto, ActivityFileDto } from '@/proxy/activity/models' +import apiService from '@/services/api.service' + +class ActivityService { + async getList(params?: any): Promise { + const response = await apiService.fetchData({ + url: '/api/app/activity', + method: 'GET', + params, + }) + return response.data + } + + async get(id: string): Promise { + const response = await apiService.fetchData({ + url: `/api/app/activity/${id}`, + method: 'GET', + }) + return response.data + } + + async create(data: ActivityDto): Promise { + const response = await apiService.fetchData({ + url: '/api/app/activity', + method: 'POST', + data: data as any, + }) + return response.data + } + + async update(id: string, data: ActivityDto): Promise { + const response = await apiService.fetchData({ + url: `/api/app/activity/${id}`, + method: 'PUT', + data: data as any, + }) + return response.data + } + + async delete(id: string): Promise { + await apiService.fetchData({ + url: `/api/app/activity/${id}`, + method: 'DELETE', + }) + } + + // 🔹 ActivityItem kayıtları --------------------------------------------------- + async getItems(activityId?: string): Promise { + const response = await apiService.fetchData({ + url: '/api/app/activity-item', + method: 'GET', + params: { activityId }, + }) + return response.data + } + + async getItem(id: string): Promise { + const response = await apiService.fetchData({ + url: `/api/app/activity-item/${id}`, + method: 'GET', + }) + return response.data + } + + async createItem(data: ActivityItemDto): Promise { + const response = await apiService.fetchData({ + url: '/api/app/activity-item', + method: 'POST', + data: data as any, + }) + return response.data + } + + async updateItem(id: string, data: ActivityItemDto): Promise { + const response = await apiService.fetchData({ + url: `/api/app/activity-item/${id}`, + method: 'PUT', + data: data as any, + }) + return response.data + } + + async deleteItem(id: string): Promise { + await apiService.fetchData({ + url: `/api/app/activity-item/${id}`, + method: 'DELETE', + }) + } + + // 🔹 ActivityFile kayıtları --------------------------------------------------- + async getFiles(activityItemId?: string): Promise { + const response = await apiService.fetchData({ + url: '/api/app/activity-file', + method: 'GET', + params: { activityItemId }, + }) + return response.data + } + + async getFile(id: string): Promise { + const response = await apiService.fetchData({ + url: `/api/app/activity-file/${id}`, + method: 'GET', + }) + return response.data + } + + async uploadFile(data: ActivityFileDto): Promise { + const response = await apiService.fetchData({ + url: '/api/app/activity-file', + method: 'POST', + data: data as any, + }) + return response.data + } + + async updateFile(id: string, data: ActivityFileDto): Promise { + const response = await apiService.fetchData({ + url: `/api/app/activity-file/${id}`, + method: 'PUT', + data: data as any, + }) + return response.data + } + + async deleteFile(id: string): Promise { + await apiService.fetchData({ + url: `/api/app/activity-file/${id}`, + method: 'DELETE', + }) + } +} + +export const activityService = new ActivityService() diff --git a/ui/src/services/chart.service.ts b/ui/src/services/chart.service.ts deleted file mode 100644 index 3d62b874..00000000 --- a/ui/src/services/chart.service.ts +++ /dev/null @@ -1,20 +0,0 @@ -// import { ChartJsonItemRowDto } from '../proxy/admin/charts/models' -// import apiService from './api.service' - -// export const deleteChartJsonItem = ( -// id: string, -// listFormCode: string, -// index: number, -// fieldName: string, -// ) => -// apiService.fetchData({ -// method: 'DELETE', -// url: `/api/app/charts/chart-json-item?id=${id}&listFormCode=${listFormCode}&index=${index}&fieldName=${fieldName}`, -// }) - -// export const putChartJsonItem = (input: ChartJsonItemRowDto) => -// apiService.fetchData({ -// method: 'PUT', -// url: `/api/app/charts/chart-json-item`, -// data: input, -// }) diff --git a/ui/src/views/form/FormActivityPanel/FormActivityPanel.tsx b/ui/src/views/form/FormActivityPanel/FormActivityPanel.tsx index 65b38a2b..66881926 100644 --- a/ui/src/views/form/FormActivityPanel/FormActivityPanel.tsx +++ b/ui/src/views/form/FormActivityPanel/FormActivityPanel.tsx @@ -170,11 +170,12 @@ export const FormActivityPanel: React.FC = ({