Compare commits
5 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5009e72374 | ||
|
|
138b49a7b0 | ||
|
|
8793292932 | ||
|
|
9478d4f69d | ||
|
|
0f0d185b2a |
22 changed files with 7876 additions and 6111 deletions
|
|
@ -4,6 +4,7 @@ public class LayoutDto
|
||||||
{
|
{
|
||||||
public bool Grid { get; set; } = true;
|
public bool Grid { get; set; } = true;
|
||||||
public bool Card { get; set; } = true;
|
public bool Card { get; set; } = true;
|
||||||
|
public bool CardView { get; set; } = true;
|
||||||
public bool Pivot { get; set; } = true;
|
public bool Pivot { get; set; } = true;
|
||||||
public bool Chart { get; set; } = true;
|
public bool Chart { get; set; } = true;
|
||||||
public bool Tree { get; set; } = true;
|
public bool Tree { get; set; } = true;
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -172,20 +172,20 @@
|
||||||
{
|
{
|
||||||
"resourceName": "Platform",
|
"resourceName": "Platform",
|
||||||
"key": "App.Project",
|
"key": "App.Project",
|
||||||
"en": "R&D",
|
"en": "Project",
|
||||||
"tr": "Ar-ge"
|
"tr": "Ar-ge"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"resourceName": "Platform",
|
"resourceName": "Platform",
|
||||||
"key": "App.Hr",
|
"key": "App.Hr",
|
||||||
"en": "Hr",
|
"en": "Hr",
|
||||||
"tr": "İk"
|
"tr": "İnsan Kaynakları"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"resourceName": "Platform",
|
"resourceName": "Platform",
|
||||||
"key": "App.Crm",
|
"key": "App.Crm",
|
||||||
"en": "Crm",
|
"en": "Crm",
|
||||||
"tr": "Crm"
|
"tr": "Müşteri"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"resourceName": "Platform",
|
"resourceName": "Platform",
|
||||||
|
|
@ -10794,6 +10794,204 @@
|
||||||
"key": "App.Platform.DeleteAction",
|
"key": "App.Platform.DeleteAction",
|
||||||
"tr": "Sil",
|
"tr": "Sil",
|
||||||
"en": "Delete"
|
"en": "Delete"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.Selected",
|
||||||
|
"tr": "seçili",
|
||||||
|
"en": "selected"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.SelectAll",
|
||||||
|
"tr": "Tümünü Seç",
|
||||||
|
"en": "Select All"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.ExportSelectedToExcel",
|
||||||
|
"tr": "Seçilenleri Excel'e Aktar",
|
||||||
|
"en": "Export Selected to Excel"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.ExportAllToExcel",
|
||||||
|
"tr": "Tümünü Excel'e Aktar",
|
||||||
|
"en": "Export All to Excel"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.NoSorting",
|
||||||
|
"tr": "Sıralama Yok",
|
||||||
|
"en": "No Sorting"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.ChangeSortDirection",
|
||||||
|
"tr": "Sıralama yönünü değiştir",
|
||||||
|
"en": "Change sort direction"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.ShowIn1Column",
|
||||||
|
"tr": "1 Sütunda Göster",
|
||||||
|
"en": "Show in 1 Column"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.ShowIn2Columns",
|
||||||
|
"tr": "2 Sütunda Göster",
|
||||||
|
"en": "Show in 2 Columns"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.ShowIn3Columns",
|
||||||
|
"tr": "3 Sütunda Göster",
|
||||||
|
"en": "Show in 3 Columns"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.ShowIn4Columns",
|
||||||
|
"tr": "4 Sütunda Göster",
|
||||||
|
"en": "Show in 4 Columns"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.ShowIn5Columns",
|
||||||
|
"tr": "5 Sütunda Göster",
|
||||||
|
"en": "Show in 5 Columns"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.NoRecordsFound",
|
||||||
|
"tr": "Uygun kayıt bulunamadı",
|
||||||
|
"en": "No records found"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.TryDifferentFilters",
|
||||||
|
"tr": "Farklı filtreler deneyin veya yeni bir kayıt ekleyin.",
|
||||||
|
"en": "Try different filters or add a new record."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.Loading",
|
||||||
|
"tr": "Yükleniyor...",
|
||||||
|
"en": "Loading..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.Card.TotalRecords",
|
||||||
|
"tr": "Toplam {0} kayıt",
|
||||||
|
"en": "Total {0} records"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.ChartSeries",
|
||||||
|
"tr": "Grafik Serileri",
|
||||||
|
"en": "Chart Series"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.AddNewSeries",
|
||||||
|
"tr": "Yeni Seri Ekle",
|
||||||
|
"en": "Add New Series"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.Series",
|
||||||
|
"tr": "Seri",
|
||||||
|
"en": "Series"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.ChartType",
|
||||||
|
"tr": "Grafik Tipi",
|
||||||
|
"en": "Chart Type"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.Name",
|
||||||
|
"tr": "Ad",
|
||||||
|
"en": "Name"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.SeriesName",
|
||||||
|
"tr": "Seri adı",
|
||||||
|
"en": "Series name"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.ArgumentField",
|
||||||
|
"tr": "Argüman Alanı (X-Ekseni)",
|
||||||
|
"en": "Argument Field (X-Axis)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.ValueField",
|
||||||
|
"tr": "Değer Alanı (Y-Ekseni)",
|
||||||
|
"en": "Value Field (Y-Axis)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.SummaryType",
|
||||||
|
"tr": "Özet Tipi",
|
||||||
|
"en": "Summary Type"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.SelectField",
|
||||||
|
"tr": "Alan seçin...",
|
||||||
|
"en": "Select field..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.Cancel",
|
||||||
|
"tr": "İptal",
|
||||||
|
"en": "Cancel"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.Save",
|
||||||
|
"tr": "Kaydet",
|
||||||
|
"en": "Save"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.ChartSaved",
|
||||||
|
"tr": "Grafik kaydedildi",
|
||||||
|
"en": "Chart saved"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.Error",
|
||||||
|
"tr": "Hata",
|
||||||
|
"en": "Error"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.NameRequired",
|
||||||
|
"tr": "Ad Gerekli",
|
||||||
|
"en": "Name Required"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.ArgumentFieldRequired",
|
||||||
|
"tr": "Argüman Alanı Gerekli",
|
||||||
|
"en": "Argument Field Required"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.ValueFieldRequired",
|
||||||
|
"tr": "Değer Alanı Gerekli",
|
||||||
|
"en": "Value Field Required"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Platform.ChartDrawer.SummaryTypeRequired",
|
||||||
|
"tr": "Özet Tipi Gerekli",
|
||||||
|
"en": "Summary Type Required"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -152,14 +152,18 @@
|
||||||
"path": "/admin/menuManager",
|
"path": "/admin/menuManager",
|
||||||
"componentPath": "@/views/menu/MenuManager",
|
"componentPath": "@/views/menu/MenuManager",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Menus.Manager"]
|
"authority": [
|
||||||
|
"App.Menus.Manager"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.listFormManagement.wizard",
|
"key": "admin.listFormManagement.wizard",
|
||||||
"path": "/admin/listform/wizard",
|
"path": "/admin/listform/wizard",
|
||||||
"componentPath": "@/views/admin/listForm/Wizard",
|
"componentPath": "@/views/admin/listForm/Wizard",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Listforms.Wizard"]
|
"authority": [
|
||||||
|
"App.Listforms.Wizard"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.listFormManagement.edit",
|
"key": "admin.listFormManagement.edit",
|
||||||
|
|
@ -173,14 +177,18 @@
|
||||||
"path": "/admin/forumManagement",
|
"path": "/admin/forumManagement",
|
||||||
"componentPath": "@/views/forum/Management",
|
"componentPath": "@/views/forum/Management",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.ForumManagement"]
|
"authority": [
|
||||||
|
"App.ForumManagement"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.ai",
|
"key": "admin.ai",
|
||||||
"path": "/admin/ai",
|
"path": "/admin/ai",
|
||||||
"componentPath": "@/views/ai/Assistant",
|
"componentPath": "@/views/ai/Assistant",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["Abp.Identity.Ai"]
|
"authority": [
|
||||||
|
"Abp.Identity.Ai"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.profile.general",
|
"key": "admin.profile.general",
|
||||||
|
|
@ -222,28 +230,36 @@
|
||||||
"path": "/admin/settings",
|
"path": "/admin/settings",
|
||||||
"componentPath": "@/views/settings/Settings",
|
"componentPath": "@/views/settings/Settings",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Setting"]
|
"authority": [
|
||||||
|
"App.Setting"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.identity.user.detail",
|
"key": "admin.identity.user.detail",
|
||||||
"path": "/admin/users/detail/:userId",
|
"path": "/admin/users/detail/:userId",
|
||||||
"componentPath": "@/views/admin/user-management/Details",
|
"componentPath": "@/views/admin/user-management/Details",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["AbpIdentity.Users.Update"]
|
"authority": [
|
||||||
|
"AbpIdentity.Users.Update"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.identity.ous",
|
"key": "admin.identity.ous",
|
||||||
"path": "/admin/ous",
|
"path": "/admin/ous",
|
||||||
"componentPath": "@/views/admin/organization-unit/OrganizationUnits",
|
"componentPath": "@/views/admin/organization-unit/OrganizationUnits",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["Abp.Identity.OrganizationUnits"]
|
"authority": [
|
||||||
|
"Abp.Identity.OrganizationUnits"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.forum",
|
"key": "admin.forum",
|
||||||
"path": "/admin/forum",
|
"path": "/admin/forum",
|
||||||
"componentPath": "@/views/forum/Forum",
|
"componentPath": "@/views/forum/Forum",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.ForumManagement.Publish"]
|
"authority": [
|
||||||
|
"App.ForumManagement.Publish"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.list",
|
"key": "admin.list",
|
||||||
|
|
@ -285,161 +301,207 @@
|
||||||
"path": "/admin/sqlQueryManager",
|
"path": "/admin/sqlQueryManager",
|
||||||
"componentPath": "@/views/sqlQueryManager/SqlQueryManager",
|
"componentPath": "@/views/sqlQueryManager/SqlQueryManager",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.SqlQueryManager"]
|
"authority": [
|
||||||
|
"App.SqlQueryManager"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit",
|
"key": "admin.developerkit",
|
||||||
"path": "/admin/developerkit",
|
"path": "/admin/developerkit",
|
||||||
"componentPath": "@/views/developerKit/DashboardPage",
|
"componentPath": "@/views/developerKit/DashboardPage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit"]
|
"authority": [
|
||||||
|
"App.DeveloperKit"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.entities",
|
"key": "admin.developerkit.entities",
|
||||||
"path": "/admin/developerkit/entities",
|
"path": "/admin/developerkit/entities",
|
||||||
"componentPath": "@/views/developerKit/EntityPage",
|
"componentPath": "@/views/developerKit/EntityPage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.Entity"]
|
"authority": [
|
||||||
|
"App.DeveloperKit.Entity"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.entities.new",
|
"key": "admin.developerkit.entities.new",
|
||||||
"path": "/admin/developerkit/entities/new",
|
"path": "/admin/developerkit/entities/new",
|
||||||
"componentPath": "@/views/developerKit/EntityDetailPage",
|
"componentPath": "@/views/developerKit/EntityDetailPage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.Entity"]
|
"authority": [
|
||||||
|
"App.DeveloperKit.Entity"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.entities.edit",
|
"key": "admin.developerkit.entities.edit",
|
||||||
"path": "/admin/developerkit/entities/edit/:id",
|
"path": "/admin/developerkit/entities/edit/:id",
|
||||||
"componentPath": "@/views/developerKit/EntityDetailPage",
|
"componentPath": "@/views/developerKit/EntityDetailPage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.Entity"]
|
"authority": [
|
||||||
|
"App.DeveloperKit.Entity"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.migrations",
|
"key": "admin.developerkit.migrations",
|
||||||
"path": "/admin/developerkit/migrations",
|
"path": "/admin/developerkit/migrations",
|
||||||
"componentPath": "@/views/developerKit/MigrationPage",
|
"componentPath": "@/views/developerKit/MigrationPage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.Migrations"]
|
"authority": [
|
||||||
|
"App.DeveloperKit.Migrations"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.endpoints",
|
"key": "admin.developerkit.endpoints",
|
||||||
"path": "/admin/developerkit/endpoints",
|
"path": "/admin/developerkit/endpoints",
|
||||||
"componentPath": "@/views/developerKit/CrudEndpointPage",
|
"componentPath": "@/views/developerKit/CrudEndpointPage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.CrudEndpoints"]
|
"authority": [
|
||||||
|
"App.DeveloperKit.CrudEndpoints"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.dynamic-services",
|
"key": "admin.developerkit.dynamic-services",
|
||||||
"path": "/admin/developerkit/dynamic-services",
|
"path": "/admin/developerkit/dynamic-services",
|
||||||
"componentPath": "@/views/developerKit/DynamicServicePage",
|
"componentPath": "@/views/developerKit/DynamicServicePage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.DynamicServices"]
|
"authority": [
|
||||||
|
"App.DeveloperKit.DynamicServices"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.components",
|
"key": "admin.developerkit.components",
|
||||||
"path": "/admin/developerkit/components",
|
"path": "/admin/developerkit/components",
|
||||||
"componentPath": "@/views/developerKit/ComponentPage",
|
"componentPath": "@/views/developerKit/ComponentPage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.Components"]
|
"authority": [
|
||||||
|
"App.DeveloperKit.Components"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.components.new",
|
"key": "admin.developerkit.components.new",
|
||||||
"path": "/admin/developerkit/components/new",
|
"path": "/admin/developerkit/components/new",
|
||||||
"componentPath": "@/views/developerKit/ComponentDetailPage",
|
"componentPath": "@/views/developerKit/ComponentDetailPage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.Components"]
|
"authority": [
|
||||||
|
"App.DeveloperKit.Components"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.components.view",
|
"key": "admin.developerkit.components.view",
|
||||||
"path": "/admin/developerkit/components/view/:id",
|
"path": "/admin/developerkit/components/view/:id",
|
||||||
"componentPath": "@/views/developerKit/ComponentDetailPage",
|
"componentPath": "@/views/developerKit/ComponentDetailPage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.Components"]
|
"authority": [
|
||||||
|
"App.DeveloperKit.Components"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.components.edit",
|
"key": "admin.developerkit.components.edit",
|
||||||
"path": "/admin/developerkit/components/edit/:id",
|
"path": "/admin/developerkit/components/edit/:id",
|
||||||
"componentPath": "@/views/developerKit/CodePage",
|
"componentPath": "@/views/developerKit/CodePage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.Components"]
|
"authority": [
|
||||||
|
"App.DeveloperKit.Components"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.fileManagement",
|
"key": "admin.fileManagement",
|
||||||
"path": "/admin/files",
|
"path": "/admin/files",
|
||||||
"componentPath": "@/views/admin/files/FileManager",
|
"componentPath": "@/views/admin/files/FileManager",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Files"]
|
"authority": [
|
||||||
|
"App.Files"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.coordinator.classroom.dashboard",
|
"key": "admin.coordinator.classroom.dashboard",
|
||||||
"path": "/admin/coordinator/classroom/dashboard",
|
"path": "/admin/coordinator/classroom/dashboard",
|
||||||
"componentPath": "@/views/coordinator/Classroom/Dashboard",
|
"componentPath": "@/views/coordinator/Classroom/Dashboard",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Coordinator.Classroom.Dashboard"]
|
"authority": [
|
||||||
|
"App.Coordinator.Classroom.Dashboard"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.coordinator.classroom.classes",
|
"key": "admin.coordinator.classroom.classes",
|
||||||
"path": "/admin/coordinator/classroom/classes",
|
"path": "/admin/coordinator/classroom/classes",
|
||||||
"componentPath": "@/views/coordinator/Classroom/ClassList",
|
"componentPath": "@/views/coordinator/Classroom/ClassList",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Coordinator.Classroom.List"]
|
"authority": [
|
||||||
|
"App.Coordinator.Classroom.List"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.coordinator.classroom.classroom",
|
"key": "admin.coordinator.classroom.classroom",
|
||||||
"path": "/admin/coordinator/classroom/room/:id",
|
"path": "/admin/coordinator/classroom/room/:id",
|
||||||
"componentPath": "@/views/coordinator/Classroom/RoomDetail",
|
"componentPath": "@/views/coordinator/Classroom/RoomDetail",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Coordinator.Classroom.RoomDetail"]
|
"authority": [
|
||||||
|
"App.Coordinator.Classroom.RoomDetail"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.coordinator.classroom.planning",
|
"key": "admin.coordinator.classroom.planning",
|
||||||
"path": "/admin/coordinator/classroom/planning/:id",
|
"path": "/admin/coordinator/classroom/planning/:id",
|
||||||
"componentPath": "@/views/coordinator/Classroom/PlanningPage",
|
"componentPath": "@/views/coordinator/Classroom/PlanningPage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Coordinator.Classroom.Planning"]
|
"authority": [
|
||||||
|
"App.Coordinator.Classroom.Planning"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.coordinator.exams",
|
"key": "admin.coordinator.exams",
|
||||||
"path": "/admin/coordinator/exams",
|
"path": "/admin/coordinator/exams",
|
||||||
"componentPath": "@/views/coordinator/Exams",
|
"componentPath": "@/views/coordinator/Exams",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Coordinator.Exams"]
|
"authority": [
|
||||||
|
"App.Coordinator.Exams"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.coordinator.examDetail",
|
"key": "admin.coordinator.examDetail",
|
||||||
"path": "/admin/coordinator/exam/:id",
|
"path": "/admin/coordinator/exam/:id",
|
||||||
"componentPath": "@/views/coordinator/ExamInterface/ExamInterface",
|
"componentPath": "@/views/coordinator/ExamInterface/ExamInterface",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Coordinator.Exams"]
|
"authority": [
|
||||||
|
"App.Coordinator.Exams"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.coordinator.assignments",
|
"key": "admin.coordinator.assignments",
|
||||||
"path": "/admin/coordinator/assignments",
|
"path": "/admin/coordinator/assignments",
|
||||||
"componentPath": "@/views/coordinator/Assignments",
|
"componentPath": "@/views/coordinator/Assignments",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Coordinator.Assignments"]
|
"authority": [
|
||||||
|
"App.Coordinator.Assignments"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.coordinator.assignmentDetail",
|
"key": "admin.coordinator.assignmentDetail",
|
||||||
"path": "/admin/coordinator/assignment/:id",
|
"path": "/admin/coordinator/assignment/:id",
|
||||||
"componentPath": "@/views/coordinator/ExamInterface/ExamInterface",
|
"componentPath": "@/views/coordinator/ExamInterface/ExamInterface",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Coordinator.Assignments"]
|
"authority": [
|
||||||
|
"App.Coordinator.Assignments"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.coordinator.tests",
|
"key": "admin.coordinator.tests",
|
||||||
"path": "/admin/coordinator/tests",
|
"path": "/admin/coordinator/tests",
|
||||||
"componentPath": "@/views/coordinator/Tests",
|
"componentPath": "@/views/coordinator/Tests",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Coordinator.Tests"]
|
"authority": [
|
||||||
|
"App.Coordinator.Tests"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.coordinator.testDetail",
|
"key": "admin.coordinator.testDetail",
|
||||||
"path": "/admin/coordinator/test/:id",
|
"path": "/admin/coordinator/test/:id",
|
||||||
"componentPath": "@/views/coordinator/ExamInterface/PDFTestInterface",
|
"componentPath": "@/views/coordinator/ExamInterface/PDFTestInterface",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Coordinator.Tests"]
|
"authority": [
|
||||||
|
"App.Coordinator.Tests"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "admin.devexpressReportView",
|
"key": "admin.devexpressReportView",
|
||||||
|
|
@ -1360,7 +1422,7 @@
|
||||||
"RequiredPermissionName": "App.SqlQueryManager",
|
"RequiredPermissionName": "App.SqlQueryManager",
|
||||||
"IsDisabled": false
|
"IsDisabled": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ParentCode": null,
|
"ParentCode": null,
|
||||||
"Code": "App.Crm",
|
"Code": "App.Crm",
|
||||||
"DisplayName": "App.Crm",
|
"DisplayName": "App.Crm",
|
||||||
|
|
@ -1441,7 +1503,6 @@
|
||||||
"RequiredPermissionName": "App.Definitions.NoteType",
|
"RequiredPermissionName": "App.Definitions.NoteType",
|
||||||
"IsDisabled": false
|
"IsDisabled": false
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"ParentCode": "App.Crm.Definitions",
|
"ParentCode": "App.Crm.Definitions",
|
||||||
"Code": "App.Definitions.CustomerType",
|
"Code": "App.Definitions.CustomerType",
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,7 @@ public static class SeederDefaults
|
||||||
{
|
{
|
||||||
Grid = true,
|
Grid = true,
|
||||||
Card = true,
|
Card = true,
|
||||||
|
CardView = true,
|
||||||
Pivot = true,
|
Pivot = true,
|
||||||
Chart = true,
|
Chart = true,
|
||||||
Tree = true,
|
Tree = true,
|
||||||
|
|
|
||||||
|
|
@ -847,7 +847,7 @@
|
||||||
"name": "Garanti BBVA - Levent Şubesi",
|
"name": "Garanti BBVA - Levent Şubesi",
|
||||||
"address1": "Büyükdere Cad. No: 199",
|
"address1": "Büyükdere Cad. No: 199",
|
||||||
"address2": "Kule 3 Kat: 12",
|
"address2": "Kule 3 Kat: 12",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"city": null,
|
"city": null,
|
||||||
"district": null,
|
"district": null,
|
||||||
"postalCode": "34394",
|
"postalCode": "34394",
|
||||||
|
|
@ -859,7 +859,7 @@
|
||||||
"name": "Akbank - Ümraniye Sanayi Şubesi",
|
"name": "Akbank - Ümraniye Sanayi Şubesi",
|
||||||
"address1": "Sanayi Mah. Alemdağ Cad. No: 45",
|
"address1": "Sanayi Mah. Alemdağ Cad. No: 45",
|
||||||
"address2": "",
|
"address2": "",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"city": null,
|
"city": null,
|
||||||
"district": null,
|
"district": null,
|
||||||
"postalCode": "34773",
|
"postalCode": "34773",
|
||||||
|
|
|
||||||
|
|
@ -2828,7 +2828,7 @@
|
||||||
"birthDate": "2020-10-29",
|
"birthDate": "2020-10-29",
|
||||||
"gender": "Male",
|
"gender": "Male",
|
||||||
"maritalStatus": "Married",
|
"maritalStatus": "Married",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"city": "TR.34",
|
"city": "TR.34",
|
||||||
"district": "Ümraniye",
|
"district": "Ümraniye",
|
||||||
"township": "Esenşehir",
|
"township": "Esenşehir",
|
||||||
|
|
@ -2868,7 +2868,7 @@
|
||||||
"birthDate": "2015-10-30",
|
"birthDate": "2015-10-30",
|
||||||
"gender": "Female",
|
"gender": "Female",
|
||||||
"maritalStatus": "Single",
|
"maritalStatus": "Single",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"city": "TR.06",
|
"city": "TR.06",
|
||||||
"district": "Güdül",
|
"district": "Güdül",
|
||||||
"township": "Güdül",
|
"township": "Güdül",
|
||||||
|
|
@ -2908,7 +2908,7 @@
|
||||||
"birthDate": "2010-10-31",
|
"birthDate": "2010-10-31",
|
||||||
"gender": "Male",
|
"gender": "Male",
|
||||||
"maritalStatus": "Married",
|
"maritalStatus": "Married",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"city": "TR.11",
|
"city": "TR.11",
|
||||||
"district": "Merkez",
|
"district": "Merkez",
|
||||||
"township": "Merkezköyler",
|
"township": "Merkezköyler",
|
||||||
|
|
@ -2948,7 +2948,7 @@
|
||||||
"birthDate": "2000-11-01",
|
"birthDate": "2000-11-01",
|
||||||
"gender": "Female",
|
"gender": "Female",
|
||||||
"maritalStatus": "Single",
|
"maritalStatus": "Single",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"city": "",
|
"city": "",
|
||||||
"district": "",
|
"district": "",
|
||||||
"township": "",
|
"township": "",
|
||||||
|
|
@ -2988,7 +2988,7 @@
|
||||||
"birthDate": "1999-11-02",
|
"birthDate": "1999-11-02",
|
||||||
"gender": "Male",
|
"gender": "Male",
|
||||||
"maritalStatus": "Married",
|
"maritalStatus": "Married",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"city": "TR.34",
|
"city": "TR.34",
|
||||||
"district": "Kadıköy",
|
"district": "Kadıköy",
|
||||||
"township": "Bostancı",
|
"township": "Bostancı",
|
||||||
|
|
@ -3028,7 +3028,7 @@
|
||||||
"birthDate": "1995-11-03",
|
"birthDate": "1995-11-03",
|
||||||
"gender": "Female",
|
"gender": "Female",
|
||||||
"maritalStatus": "Single",
|
"maritalStatus": "Single",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"city": "TR.35",
|
"city": "TR.35",
|
||||||
"district": "Kemalpaşa",
|
"district": "Kemalpaşa",
|
||||||
"township": "Ören",
|
"township": "Ören",
|
||||||
|
|
@ -3068,7 +3068,7 @@
|
||||||
"birthDate": "1980-11-04",
|
"birthDate": "1980-11-04",
|
||||||
"gender": "Male",
|
"gender": "Male",
|
||||||
"maritalStatus": "Married",
|
"maritalStatus": "Married",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"city": "TR.06",
|
"city": "TR.06",
|
||||||
"district": "Altındağ",
|
"district": "Altındağ",
|
||||||
"township": "Telsizler",
|
"township": "Telsizler",
|
||||||
|
|
@ -3108,7 +3108,7 @@
|
||||||
"birthDate": "1989-11-05",
|
"birthDate": "1989-11-05",
|
||||||
"gender": "Female",
|
"gender": "Female",
|
||||||
"maritalStatus": "Married",
|
"maritalStatus": "Married",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"city": "TR.11",
|
"city": "TR.11",
|
||||||
"district": "Osmaneli",
|
"district": "Osmaneli",
|
||||||
"township": "Merkezköyler",
|
"township": "Merkezköyler",
|
||||||
|
|
@ -3148,7 +3148,7 @@
|
||||||
"birthDate": "1992-11-06",
|
"birthDate": "1992-11-06",
|
||||||
"gender": "Female",
|
"gender": "Female",
|
||||||
"maritalStatus": "Single",
|
"maritalStatus": "Single",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"city": "TR.45",
|
"city": "TR.45",
|
||||||
"district": "Demirci",
|
"district": "Demirci",
|
||||||
"township": "Durhasan",
|
"township": "Durhasan",
|
||||||
|
|
@ -3188,7 +3188,7 @@
|
||||||
"birthDate": "1984-11-07",
|
"birthDate": "1984-11-07",
|
||||||
"gender": "Male",
|
"gender": "Male",
|
||||||
"maritalStatus": "Married",
|
"maritalStatus": "Married",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"city": "TR.34",
|
"city": "TR.34",
|
||||||
"district": "Beykoz",
|
"district": "Beykoz",
|
||||||
"township": "Polonezköy",
|
"township": "Polonezköy",
|
||||||
|
|
@ -4439,7 +4439,7 @@
|
||||||
"SectorName": "Ambalaj",
|
"SectorName": "Ambalaj",
|
||||||
"TaxNumber": 1234567890,
|
"TaxNumber": 1234567890,
|
||||||
"TaxOffice": "İstanbul Vergi Dairesi",
|
"TaxOffice": "İstanbul Vergi Dairesi",
|
||||||
"Country": "TR",
|
"country": "Türkiye",
|
||||||
"City": "TR.34",
|
"City": "TR.34",
|
||||||
"District": "Beykoz",
|
"District": "Beykoz",
|
||||||
"Township": "Çubuklu",
|
"Township": "Çubuklu",
|
||||||
|
|
@ -4477,7 +4477,7 @@
|
||||||
"SectorName": "Cam, Çimento ve Toprak",
|
"SectorName": "Cam, Çimento ve Toprak",
|
||||||
"TaxNumber": 987654321,
|
"TaxNumber": 987654321,
|
||||||
"TaxOffice": null,
|
"TaxOffice": null,
|
||||||
"Country": "TR",
|
"country": "Türkiye",
|
||||||
"City": "TR.34",
|
"City": "TR.34",
|
||||||
"District": "Çekmeköy",
|
"District": "Çekmeköy",
|
||||||
"Township": "Taşdelen",
|
"Township": "Taşdelen",
|
||||||
|
|
@ -4515,7 +4515,7 @@
|
||||||
"SectorName": "Bilişim Teknolojileri",
|
"SectorName": "Bilişim Teknolojileri",
|
||||||
"TaxNumber": 1122334455,
|
"TaxNumber": 1122334455,
|
||||||
"TaxOffice": null,
|
"TaxOffice": null,
|
||||||
"Country": "TR",
|
"country": "Türkiye",
|
||||||
"City": "TR.34",
|
"City": "TR.34",
|
||||||
"District": "Eyüp",
|
"District": "Eyüp",
|
||||||
"Township": "Rami",
|
"Township": "Rami",
|
||||||
|
|
@ -4553,7 +4553,7 @@
|
||||||
"SectorName": "Ambalaj",
|
"SectorName": "Ambalaj",
|
||||||
"TaxNumber": 6677889900,
|
"TaxNumber": 6677889900,
|
||||||
"TaxOffice": null,
|
"TaxOffice": null,
|
||||||
"Country": "TR",
|
"country": "Türkiye",
|
||||||
"City": "TR.06",
|
"City": "TR.06",
|
||||||
"District": "Kızılcahamam",
|
"District": "Kızılcahamam",
|
||||||
"Township": "Kızılcahamam",
|
"Township": "Kızılcahamam",
|
||||||
|
|
@ -4591,7 +4591,7 @@
|
||||||
"SectorName": "Bilişim Teknolojileri",
|
"SectorName": "Bilişim Teknolojileri",
|
||||||
"TaxNumber": 987654321,
|
"TaxNumber": 987654321,
|
||||||
"TaxOffice": null,
|
"TaxOffice": null,
|
||||||
"Country": "TR",
|
"country": "Türkiye",
|
||||||
"City": "TR.06",
|
"City": "TR.06",
|
||||||
"District": "Yenimahalle",
|
"District": "Yenimahalle",
|
||||||
"Township": "Ostim",
|
"Township": "Ostim",
|
||||||
|
|
@ -4629,7 +4629,7 @@
|
||||||
"SectorName": "Bilişim Teknolojileri",
|
"SectorName": "Bilişim Teknolojileri",
|
||||||
"TaxNumber": 1234567890,
|
"TaxNumber": 1234567890,
|
||||||
"TaxOffice": null,
|
"TaxOffice": null,
|
||||||
"Country": "TR",
|
"country": "Türkiye",
|
||||||
"City": "TR.34",
|
"City": "TR.34",
|
||||||
"District": "Beyoğlu",
|
"District": "Beyoğlu",
|
||||||
"Township": "Cihangir",
|
"Township": "Cihangir",
|
||||||
|
|
@ -5146,7 +5146,7 @@
|
||||||
"description": "Ana depo alanı",
|
"description": "Ana depo alanı",
|
||||||
"employeeCode": "EMP-001",
|
"employeeCode": "EMP-001",
|
||||||
"warehouseTypeName": "Hammaddeler",
|
"warehouseTypeName": "Hammaddeler",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"isMainWarehouse": true,
|
"isMainWarehouse": true,
|
||||||
"capacity": 10000,
|
"capacity": 10000,
|
||||||
"isActive": true,
|
"isActive": true,
|
||||||
|
|
@ -5158,7 +5158,7 @@
|
||||||
"description": "Yedek parçaların depolandığı alan",
|
"description": "Yedek parçaların depolandığı alan",
|
||||||
"employeeCode": "EMP-002",
|
"employeeCode": "EMP-002",
|
||||||
"warehouseTypeName": "Mamuller",
|
"warehouseTypeName": "Mamuller",
|
||||||
"country": "TR",
|
"country": "Türkiye",
|
||||||
"isMainWarehouse": false,
|
"isMainWarehouse": false,
|
||||||
"capacity": 5000,
|
"capacity": 5000,
|
||||||
"isActive": true,
|
"isActive": true,
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ using Erp.MailQueue;
|
||||||
using Erp.Notifications.Application;
|
using Erp.Notifications.Application;
|
||||||
using Erp.Platform.Classrooms;
|
using Erp.Platform.Classrooms;
|
||||||
using Erp.Platform.EntityFrameworkCore;
|
using Erp.Platform.EntityFrameworkCore;
|
||||||
using Erp.Reports;
|
|
||||||
using Erp.SqlQueryManager;
|
using Erp.SqlQueryManager;
|
||||||
using Erp.Platform.Extensions;
|
using Erp.Platform.Extensions;
|
||||||
using Erp.Platform.FileManagement;
|
using Erp.Platform.FileManagement;
|
||||||
|
|
|
||||||
|
|
@ -894,6 +894,7 @@ export interface WidgetEditDto {
|
||||||
export interface LayoutDto {
|
export interface LayoutDto {
|
||||||
grid: boolean
|
grid: boolean
|
||||||
card: boolean
|
card: boolean
|
||||||
|
cardView: boolean
|
||||||
pivot: boolean
|
pivot: boolean
|
||||||
tree: boolean
|
tree: boolean
|
||||||
chart: boolean
|
chart: boolean
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import { LanguageInfo } from '@/proxy/config/models'
|
||||||
import { SelectBoxOption } from '@/types/shared'
|
import { SelectBoxOption } from '@/types/shared'
|
||||||
import { useStoreState } from '@/store'
|
import { useStoreState } from '@/store'
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import SelectBox from 'devextreme-react/select-box'
|
|
||||||
import { Field, FieldProps, Form, Formik } from 'formik'
|
import { Field, FieldProps, Form, Formik } from 'formik'
|
||||||
import { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import * as Yup from 'yup'
|
import * as Yup from 'yup'
|
||||||
|
|
@ -25,6 +24,7 @@ const schema = Yup.object().shape({
|
||||||
layoutDto: Yup.object().shape({
|
layoutDto: Yup.object().shape({
|
||||||
grid: Yup.boolean(),
|
grid: Yup.boolean(),
|
||||||
card: Yup.boolean(),
|
card: Yup.boolean(),
|
||||||
|
cardView: Yup.boolean(),
|
||||||
pivot: Yup.boolean(),
|
pivot: Yup.boolean(),
|
||||||
chart: Yup.boolean(),
|
chart: Yup.boolean(),
|
||||||
tree: Yup.boolean(),
|
tree: Yup.boolean(),
|
||||||
|
|
@ -311,6 +311,20 @@ function FormTabDetails(
|
||||||
/>
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
|
<FormItem
|
||||||
|
label={translate('::ListForms.ListFormEdit.DetailsLayoutDto.CardViewLayout')}
|
||||||
|
invalid={errors.layoutDto?.cardView && touched.layoutDto?.cardView}
|
||||||
|
errorMessage={errors.layoutDto?.cardView}
|
||||||
|
>
|
||||||
|
<Field
|
||||||
|
className="w-20"
|
||||||
|
autoComplete="off"
|
||||||
|
name="layoutDto.cardView"
|
||||||
|
placeholder={translate('::ListForms.ListFormEdit.DetailsLayoutDto.CardViewLayout')}
|
||||||
|
component={Checkbox}
|
||||||
|
/>
|
||||||
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
label={translate('::ListForms.ListFormEdit.DetailsLayoutDto.PivotLayout')}
|
label={translate('::ListForms.ListFormEdit.DetailsLayoutDto.PivotLayout')}
|
||||||
invalid={errors.layoutDto?.pivot && touched.layoutDto?.pivot}
|
invalid={errors.layoutDto?.pivot && touched.layoutDto?.pivot}
|
||||||
|
|
|
||||||
|
|
@ -210,6 +210,7 @@ export const listFormTypeOptions = [
|
||||||
export const listFormDefaultLayoutOptions = [
|
export const listFormDefaultLayoutOptions = [
|
||||||
{ value: 'grid', label: 'Grid' },
|
{ value: 'grid', label: 'Grid' },
|
||||||
{ value: 'card', label: 'Card' },
|
{ value: 'card', label: 'Card' },
|
||||||
|
{ value: 'cardView', label: 'Card View' },
|
||||||
{ value: 'pivot', label: 'Pivot' },
|
{ value: 'pivot', label: 'Pivot' },
|
||||||
{ value: 'chart', label: 'Chart' },
|
{ value: 'chart', label: 'Chart' },
|
||||||
{ value: 'tree', label: 'Tree' },
|
{ value: 'tree', label: 'Tree' },
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
export type ChartOperation = '' | 'select' | 'insert' | 'update' | 'delete'
|
export type ChartOperation = '' | 'select' | 'insert' | 'update' | 'delete'
|
||||||
export type ChartDialogType = '' | 'pane' | 'serie' | 'annotation' | 'axis'
|
export type ChartDialogType = '' | 'pane' | 'serie' | 'annotation' | 'axis'
|
||||||
export type ListViewLayoutType = 'grid' | 'card' | 'pivot' | 'tree' | 'chart' | 'gantt' | 'scheduler'
|
export type ListViewLayoutType = 'grid' | 'card' | 'cardView' | 'pivot' | 'tree' | 'chart' | 'gantt' | 'scheduler'
|
||||||
|
|
||||||
export const layoutTypes = {
|
export const layoutTypes = {
|
||||||
grid: 'Grid',
|
grid: 'Grid',
|
||||||
card: 'Card',
|
card: 'Card',
|
||||||
|
cardView: 'CardView',
|
||||||
pivot: 'Pivot',
|
pivot: 'Pivot',
|
||||||
tree: 'Tree',
|
tree: 'Tree',
|
||||||
chart: 'Chart',
|
chart: 'Chart',
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import { usePWA } from '@/utils/hooks/usePWA'
|
||||||
import CardItem from './CardItem'
|
import CardItem from './CardItem'
|
||||||
import { layoutTypes } from '../admin/listForm/edit/types'
|
import { layoutTypes } from '../admin/listForm/edit/types'
|
||||||
import { useListFormCustomDataSource } from './useListFormCustomDataSource'
|
import { useListFormCustomDataSource } from './useListFormCustomDataSource'
|
||||||
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
|
|
||||||
interface CardProps {
|
interface CardProps {
|
||||||
listFormCode: string
|
listFormCode: string
|
||||||
|
|
@ -32,6 +33,7 @@ type Option = {
|
||||||
|
|
||||||
const Card = (props: CardProps) => {
|
const Card = (props: CardProps) => {
|
||||||
const { listFormCode, searchParams, gridDto } = props
|
const { listFormCode, searchParams, gridDto } = props
|
||||||
|
const { translate } = useLocalization()
|
||||||
const { createSelectDataSource } = useListFormCustomDataSource({} as any)
|
const { createSelectDataSource } = useListFormCustomDataSource({} as any)
|
||||||
const [data, setData] = useState<any[]>([])
|
const [data, setData] = useState<any[]>([])
|
||||||
const [totalCount, setTotalCount] = useState(0)
|
const [totalCount, setTotalCount] = useState(0)
|
||||||
|
|
@ -528,7 +530,7 @@ const Card = (props: CardProps) => {
|
||||||
className="cursor-pointer"
|
className="cursor-pointer"
|
||||||
/>
|
/>
|
||||||
<span className="text-sm text-gray-600 dark:text-gray-300">
|
<span className="text-sm text-gray-600 dark:text-gray-300">
|
||||||
{selectedKeys.size > 0 ? `${selectedKeys.size} seçili` : 'Tümünü Seç'}
|
{selectedKeys.size > 0 ? `${selectedKeys.size} ${translate('::App.Platform.Card.Selected')}` : translate('::App.Platform.Card.SelectAll')}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
@ -536,7 +538,7 @@ const Card = (props: CardProps) => {
|
||||||
{selectionMode !== 'none' && selectedKeys.size > 0 && !gridDto?.gridOptions?.selectionDto?.allowSelectAll && (
|
{selectionMode !== 'none' && selectedKeys.size > 0 && !gridDto?.gridOptions?.selectionDto?.allowSelectAll && (
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<span className="text-sm text-gray-600 dark:text-gray-300">
|
<span className="text-sm text-gray-600 dark:text-gray-300">
|
||||||
{selectedKeys.size} seçili
|
{selectedKeys.size} {translate('::App.Platform.Card.Selected')}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
@ -550,9 +552,9 @@ const Card = (props: CardProps) => {
|
||||||
size="xs"
|
size="xs"
|
||||||
variant="default"
|
variant="default"
|
||||||
onClick={() => handleExport('xlsx', selectionMode !== 'none' && selectedKeys.size > 0)}
|
onClick={() => handleExport('xlsx', selectionMode !== 'none' && selectedKeys.size > 0)}
|
||||||
title={selectionMode !== 'none' && selectedKeys.size > 0 ? `Seçilenleri Excel'e Aktar (${selectedKeys.size})` : "Tümünü Excel'e Aktar"}
|
title={selectionMode !== 'none' && selectedKeys.size > 0 ? `${translate('::App.Platform.Card.ExportSelectedToExcel')} (${selectedKeys.size})` : translate('::App.Platform.Card.ExportAllToExcel')}
|
||||||
>
|
>
|
||||||
📊 {selectionMode !== 'none' && selectedKeys.size > 0 ? `Seçilenleri Excel'e Aktar (${selectedKeys.size})` : `Tümünü Excel'e Aktar`}
|
📊 {selectionMode !== 'none' && selectedKeys.size > 0 ? `${translate('::App.Platform.Card.ExportSelectedToExcel')} (${selectedKeys.size})` : translate('::App.Platform.Card.ExportAllToExcel')}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
@ -576,7 +578,7 @@ const Card = (props: CardProps) => {
|
||||||
}}
|
}}
|
||||||
value={sortColumn || ''}
|
value={sortColumn || ''}
|
||||||
>
|
>
|
||||||
<option value="">Sıralama Yok</option>
|
<option value="">{translate('::App.Platform.Card.NoSorting')}</option>
|
||||||
{gridDto.columnFormats
|
{gridDto.columnFormats
|
||||||
.filter((col) => col.visible && col.dataType !== 'buttons')
|
.filter((col) => col.visible && col.dataType !== 'buttons')
|
||||||
.map((col) => (
|
.map((col) => (
|
||||||
|
|
@ -589,7 +591,7 @@ const Card = (props: CardProps) => {
|
||||||
<button
|
<button
|
||||||
onClick={() => toggleSort(sortColumn)}
|
onClick={() => toggleSort(sortColumn)}
|
||||||
className="text-gray-600 dark:text-gray-300 hover:text-blue-500 p-1"
|
className="text-gray-600 dark:text-gray-300 hover:text-blue-500 p-1"
|
||||||
title="Sıralama yönünü değiştir"
|
title={translate('::App.Platform.Card.ChangeSortDirection')}
|
||||||
>
|
>
|
||||||
{sortOrder === 'asc' ? <FaSortAmountUp className="w-3 h-3" /> : <FaSortAmountDown className="w-3 h-3" />}
|
{sortOrder === 'asc' ? <FaSortAmountUp className="w-3 h-3" /> : <FaSortAmountDown className="w-3 h-3" />}
|
||||||
</button>
|
</button>
|
||||||
|
|
@ -601,7 +603,7 @@ const Card = (props: CardProps) => {
|
||||||
<FaSearch className="absolute left-2 top-1/2 -translate-y-1/2 text-gray-400 text-sm" />
|
<FaSearch className="absolute left-2 top-1/2 -translate-y-1/2 text-gray-400 text-sm" />
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Search..."
|
placeholder={translate('::App.Search')}
|
||||||
value={searchText}
|
value={searchText}
|
||||||
onChange={(e) => setSearchText(e.target.value)}
|
onChange={(e) => setSearchText(e.target.value)}
|
||||||
onKeyDown={(e) => {
|
onKeyDown={(e) => {
|
||||||
|
|
@ -632,7 +634,7 @@ const Card = (props: CardProps) => {
|
||||||
setLayoutCount(1)
|
setLayoutCount(1)
|
||||||
setStates({ listFormCode, layout: 'card', cardLayoutColumn: 1 })
|
setStates({ listFormCode, layout: 'card', cardLayoutColumn: 1 })
|
||||||
}}
|
}}
|
||||||
title="1 Sütunda Göster"
|
title={translate('::App.Platform.Card.ShowIn1Column')}
|
||||||
>
|
>
|
||||||
1
|
1
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -644,7 +646,7 @@ const Card = (props: CardProps) => {
|
||||||
setLayoutCount(2)
|
setLayoutCount(2)
|
||||||
setStates({ listFormCode, layout: 'card', cardLayoutColumn: 2 })
|
setStates({ listFormCode, layout: 'card', cardLayoutColumn: 2 })
|
||||||
}}
|
}}
|
||||||
title="2 Sütunda Göster"
|
title={translate('::App.Platform.Card.ShowIn2Columns')}
|
||||||
>
|
>
|
||||||
2
|
2
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -656,7 +658,7 @@ const Card = (props: CardProps) => {
|
||||||
setLayoutCount(3)
|
setLayoutCount(3)
|
||||||
setStates({ listFormCode, layout: 'card', cardLayoutColumn: 3 })
|
setStates({ listFormCode, layout: 'card', cardLayoutColumn: 3 })
|
||||||
}}
|
}}
|
||||||
title="3 Sütunda Göster"
|
title={translate('::App.Platform.Card.ShowIn3Columns')}
|
||||||
>
|
>
|
||||||
3
|
3
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -668,7 +670,7 @@ const Card = (props: CardProps) => {
|
||||||
setLayoutCount(4)
|
setLayoutCount(4)
|
||||||
setStates({ listFormCode, layout: 'card', cardLayoutColumn: 4 })
|
setStates({ listFormCode, layout: 'card', cardLayoutColumn: 4 })
|
||||||
}}
|
}}
|
||||||
title="4 Sütunda Göster"
|
title={translate('::App.Platform.Card.ShowIn4Columns')}
|
||||||
>
|
>
|
||||||
4
|
4
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -680,7 +682,7 @@ const Card = (props: CardProps) => {
|
||||||
setLayoutCount(5)
|
setLayoutCount(5)
|
||||||
setStates({ listFormCode, layout: 'card', cardLayoutColumn: 5 })
|
setStates({ listFormCode, layout: 'card', cardLayoutColumn: 5 })
|
||||||
}}
|
}}
|
||||||
title="5 Sütunda Göster"
|
title={translate('::App.Platform.Card.ShowIn5Columns')}
|
||||||
>
|
>
|
||||||
5
|
5
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -699,7 +701,7 @@ const Card = (props: CardProps) => {
|
||||||
isPwaMode ? '_self' : '_blank',
|
isPwaMode ? '_self' : '_blank',
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
title="Form Manager"
|
title={translate('::ListForms.ListForm.Manage')}
|
||||||
>
|
>
|
||||||
<FaCog className="w-3 h-3" />
|
<FaCog className="w-3 h-3" />
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -714,10 +716,10 @@ const Card = (props: CardProps) => {
|
||||||
<div className="text-center py-12">
|
<div className="text-center py-12">
|
||||||
<FaSearch className="mx-auto h-10 w-10 text-gray-400" />
|
<FaSearch className="mx-auto h-10 w-10 text-gray-400" />
|
||||||
<h3 className="mt-2 text-sm font-medium text-gray-900 dark:text-gray-200">
|
<h3 className="mt-2 text-sm font-medium text-gray-900 dark:text-gray-200">
|
||||||
Uygun kayıt bulunamadı
|
{translate('::App.Platform.Card.NoRecordsFound')}
|
||||||
</h3>
|
</h3>
|
||||||
<p className="mt-1 text-xs text-gray-500 dark:text-gray-400">
|
<p className="mt-1 text-xs text-gray-500 dark:text-gray-400">
|
||||||
Farklı filtreler deneyin veya yeni bir kayıt ekleyin.
|
{translate('::App.Platform.Card.TryDifferentFilters')}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
|
|
@ -766,7 +768,7 @@ const Card = (props: CardProps) => {
|
||||||
<div className="text-center py-4">
|
<div className="text-center py-4">
|
||||||
<div className="inline-block animate-spin rounded-full h-6 w-6 border-b-2 border-blue-500"></div>
|
<div className="inline-block animate-spin rounded-full h-6 w-6 border-b-2 border-blue-500"></div>
|
||||||
<p className="text-xs text-gray-500 dark:text-gray-400 mt-2">
|
<p className="text-xs text-gray-500 dark:text-gray-400 mt-2">
|
||||||
Yükleniyor... ({renderedCount}/{data.length})
|
{translate('::App.Platform.Card.Loading')} ({renderedCount}/{data.length})
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
@ -777,7 +779,7 @@ const Card = (props: CardProps) => {
|
||||||
<div className={classNames('flex items-center justify-between border-t-1 gap-4 mt-2')}>
|
<div className={classNames('flex items-center justify-between border-t-1 gap-4 mt-2')}>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
<span className="text-xs text-gray-600 dark:text-gray-300">
|
<span className="text-xs text-gray-600 dark:text-gray-300">
|
||||||
Toplam {totalCount} kayıt
|
{translate('::App.Platform.Card.TotalRecords').replace('{0}', totalCount.toString())}
|
||||||
</span>
|
</span>
|
||||||
<Select
|
<Select
|
||||||
size="xs"
|
size="xs"
|
||||||
|
|
|
||||||
|
|
@ -136,6 +136,7 @@ const CardItem = forwardRef<HTMLDivElement, CardItemProps>((
|
||||||
canExport: colData?.canExport ?? false,
|
canExport: colData?.canExport ?? false,
|
||||||
dataField: i.dataField,
|
dataField: i.dataField,
|
||||||
name: i.dataField,
|
name: i.dataField,
|
||||||
|
label: { text: colData?.captionName ? translate('::' + colData?.captionName) : i.dataField },
|
||||||
editorType2: i.editorType2,
|
editorType2: i.editorType2,
|
||||||
editorType:
|
editorType:
|
||||||
i.editorType2 == PlatformEditorTypes.dxGridBox ? 'dxDropDownBox' : i.editorType2,
|
i.editorType2 == PlatformEditorTypes.dxGridBox ? 'dxDropDownBox' : i.editorType2,
|
||||||
|
|
@ -167,7 +168,7 @@ const CardItem = forwardRef<HTMLDivElement, CardItemProps>((
|
||||||
}),
|
}),
|
||||||
} as GroupItem
|
} as GroupItem
|
||||||
})
|
})
|
||||||
}, [gridDto, getCachedLookupDataSource])
|
}, [gridDto, getCachedLookupDataSource, translate])
|
||||||
|
|
||||||
const permissionResults: PermissionResults = {
|
const permissionResults: PermissionResults = {
|
||||||
c:
|
c:
|
||||||
|
|
|
||||||
1448
ui/src/views/list/CardView.tsx
Normal file
1448
ui/src/views/list/CardView.tsx
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -53,6 +53,7 @@ const Chart = (props: ChartProps) => {
|
||||||
const [searchParams] = useSearchParams()
|
const [searchParams] = useSearchParams()
|
||||||
const [chartOptions, setChartOptions] = useState<any>()
|
const [chartOptions, setChartOptions] = useState<any>()
|
||||||
const { createSelectDataSource } = useListFormCustomDataSource({} as any)
|
const { createSelectDataSource } = useListFormCustomDataSource({} as any)
|
||||||
|
const config = useStoreState((state) => state.abpConfig.config)
|
||||||
|
|
||||||
const params = useParams()
|
const params = useParams()
|
||||||
const _listFormCode = props?.listFormCode ?? params?.listFormCode ?? ''
|
const _listFormCode = props?.listFormCode ?? params?.listFormCode ?? ''
|
||||||
|
|
@ -229,7 +230,13 @@ const Chart = (props: ChartProps) => {
|
||||||
})
|
})
|
||||||
if (resp.data?.items) {
|
if (resp.data?.items) {
|
||||||
const fieldNames = groupBy(resp?.data?.items, 'fieldName')
|
const fieldNames = groupBy(resp?.data?.items, 'fieldName')
|
||||||
setFieldList(Object.keys(fieldNames).map((a) => ({ value: a, label: a })))
|
setFieldList(Object.keys(fieldNames).map((fieldName) => {
|
||||||
|
const firstItem = fieldNames[fieldName][0]
|
||||||
|
const label = firstItem.captionName
|
||||||
|
? translate('::' + firstItem.captionName)
|
||||||
|
: fieldName
|
||||||
|
return { value: fieldName, label }
|
||||||
|
}))
|
||||||
}
|
}
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
toast.push(
|
toast.push(
|
||||||
|
|
@ -243,7 +250,7 @@ const Chart = (props: ChartProps) => {
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (props.listFormCode) getFields()
|
if (props.listFormCode) getFields()
|
||||||
}, [props.listFormCode])
|
}, [props.listFormCode, config])
|
||||||
|
|
||||||
const handlePreviewChange = (series: ChartSeriesDto[]) => {
|
const handlePreviewChange = (series: ChartSeriesDto[]) => {
|
||||||
// Preview değişikliklerini anında chart'a yansıt
|
// Preview değişikliklerini anında chart'a yansıt
|
||||||
|
|
@ -310,7 +317,7 @@ const Chart = (props: ChartProps) => {
|
||||||
<FaSearch className="absolute left-2 top-1/2 -translate-y-1/2 text-gray-400 text-sm" />
|
<FaSearch className="absolute left-2 top-1/2 -translate-y-1/2 text-gray-400 text-sm" />
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Search..."
|
placeholder={translate('::App.Search')}
|
||||||
value={searchText}
|
value={searchText}
|
||||||
onChange={(e) => setSearchText(e.target.value)}
|
onChange={(e) => setSearchText(e.target.value)}
|
||||||
onKeyDown={(e) => {
|
onKeyDown={(e) => {
|
||||||
|
|
@ -335,23 +342,23 @@ const Chart = (props: ChartProps) => {
|
||||||
<Button
|
<Button
|
||||||
size="xs"
|
size="xs"
|
||||||
variant={'default'}
|
variant={'default'}
|
||||||
className="text-sm"
|
className="text-sm flex items-center gap-1"
|
||||||
onClick={async () => {
|
onClick={async () => {
|
||||||
setInitialized(false)
|
setInitialized(false)
|
||||||
await refreshGridDto?.()
|
await refreshGridDto?.()
|
||||||
}}
|
}}
|
||||||
title="Refresh Data"
|
title={translate('::App.Platform.Refresh')}
|
||||||
>
|
>
|
||||||
<FaSyncAlt className="w-3 h-3" />
|
<FaSyncAlt className="w-3 h-3" /> {translate('::App.Platform.Refresh')}
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
size="xs"
|
size="xs"
|
||||||
variant="default"
|
variant="default"
|
||||||
className="text-sm flex items-center gap-1"
|
className="text-sm flex items-center gap-1"
|
||||||
onClick={() => setOpenDrawer(true)}
|
onClick={() => setOpenDrawer(true)}
|
||||||
title="Series Customization"
|
title={translate('::ListForms.ListFormEdit.TabChartSeries')}
|
||||||
>
|
>
|
||||||
<FaCrosshairs className="w-3 h-3" /> Serileri Özelleştir
|
<FaCrosshairs className="w-3 h-3" /> {translate('::ListForms.ListFormEdit.TabChartSeries')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
{checkPermission(gridDto?.gridOptions.permissionDto.u) && (
|
{checkPermission(gridDto?.gridOptions.permissionDto.u) && (
|
||||||
|
|
@ -368,7 +375,7 @@ const Chart = (props: ChartProps) => {
|
||||||
isPwaMode ? '_self' : '_blank',
|
isPwaMode ? '_self' : '_blank',
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
title="Form Manager"
|
title={translate('::ListForms.ListForm.Manage')}
|
||||||
>
|
>
|
||||||
<FaCog className="w-3 h-3" />
|
<FaCog className="w-3 h-3" />
|
||||||
</Button>
|
</Button>
|
||||||
|
|
|
||||||
|
|
@ -19,17 +19,6 @@ interface ChartDrawerProps {
|
||||||
onPreviewChange: (series: ChartSeriesDto[]) => void
|
onPreviewChange: (series: ChartSeriesDto[]) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
const schema = object().shape({
|
|
||||||
series: array().of(
|
|
||||||
object().shape({
|
|
||||||
name: string().required('Name Required'),
|
|
||||||
argumentField: string().required('Argument Field Required'),
|
|
||||||
valueField: string().required('Value Field Required'),
|
|
||||||
summaryType: string().required('Summary Type Required'),
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
})
|
|
||||||
|
|
||||||
const ChartDrawer = ({
|
const ChartDrawer = ({
|
||||||
open,
|
open,
|
||||||
onClose,
|
onClose,
|
||||||
|
|
@ -42,6 +31,17 @@ const ChartDrawer = ({
|
||||||
const { userName } = useStoreState((s) => s.auth.user)
|
const { userName } = useStoreState((s) => s.auth.user)
|
||||||
const [selectedSeriesIndex, setSelectedSeriesIndex] = useState<number>(-1)
|
const [selectedSeriesIndex, setSelectedSeriesIndex] = useState<number>(-1)
|
||||||
|
|
||||||
|
const schema = object().shape({
|
||||||
|
series: array().of(
|
||||||
|
object().shape({
|
||||||
|
name: string().required(translate('::App.Platform.ChartDrawer.NameRequired')),
|
||||||
|
argumentField: string().required(translate('::App.Platform.ChartDrawer.ArgumentFieldRequired')),
|
||||||
|
valueField: string().required(translate('::App.Platform.ChartDrawer.ValueFieldRequired')),
|
||||||
|
summaryType: string().required(translate('::App.Platform.ChartDrawer.SummaryTypeRequired')),
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
})
|
||||||
|
|
||||||
// Chart type icons
|
// Chart type icons
|
||||||
const chartTypeIcons = [
|
const chartTypeIcons = [
|
||||||
{ type: 'line', label: 'Line', icon: '📈' },
|
{ type: 'line', label: 'Line', icon: '📈' },
|
||||||
|
|
@ -111,14 +111,14 @@ const ChartDrawer = ({
|
||||||
onSubmit={async (values, { setSubmitting }) => {
|
onSubmit={async (values, { setSubmitting }) => {
|
||||||
try {
|
try {
|
||||||
await onSave(values.series)
|
await onSave(values.series)
|
||||||
toast.push(<Notification type="success">Chart kaydedildi</Notification>, {
|
toast.push(<Notification type="success">{translate('::App.Platform.ChartDrawer.ChartSaved')}</Notification>, {
|
||||||
placement: 'top-end',
|
placement: 'top-end',
|
||||||
})
|
})
|
||||||
onClose()
|
onClose()
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
toast.push(
|
toast.push(
|
||||||
<Notification type="danger">
|
<Notification type="danger">
|
||||||
Hata
|
{translate('::App.Platform.ChartDrawer.Error')}
|
||||||
<code>{error}</code>
|
<code>{error}</code>
|
||||||
</Notification>,
|
</Notification>,
|
||||||
{ placement: 'top-end' },
|
{ placement: 'top-end' },
|
||||||
|
|
@ -145,7 +145,7 @@ const ChartDrawer = ({
|
||||||
<div className="flex items-center justify-between p-4 border-b bg-gray-50">
|
<div className="flex items-center justify-between p-4 border-b bg-gray-50">
|
||||||
<h2 className="text-lg font-semibold flex items-center gap-2">
|
<h2 className="text-lg font-semibold flex items-center gap-2">
|
||||||
<span>📊</span>
|
<span>📊</span>
|
||||||
Chart Series
|
{translate('::App.Platform.ChartDrawer.ChartSeries')}
|
||||||
</h2>
|
</h2>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
|
|
@ -169,7 +169,7 @@ const ChartDrawer = ({
|
||||||
className="w-full"
|
className="w-full"
|
||||||
>
|
>
|
||||||
<div className="flex items-center justify-center gap-2">
|
<div className="flex items-center justify-center gap-2">
|
||||||
<FaPlus /> Yeni Seri Ekle
|
<FaPlus /> {translate('::App.Platform.ChartDrawer.AddNewSeries')}
|
||||||
</div>
|
</div>
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -186,7 +186,7 @@ const ChartDrawer = ({
|
||||||
>
|
>
|
||||||
{/* Header */}
|
{/* Header */}
|
||||||
<div className="flex items-center justify-between mb-3">
|
<div className="flex items-center justify-between mb-3">
|
||||||
<span className="font-semibold text-sm">Seri #{index + 1}</span>
|
<span className="font-semibold text-sm">{translate('::App.Platform.ChartDrawer.Series')} #{index + 1}</span>
|
||||||
<Button
|
<Button
|
||||||
type="button"
|
type="button"
|
||||||
size="xs"
|
size="xs"
|
||||||
|
|
@ -201,7 +201,7 @@ const ChartDrawer = ({
|
||||||
|
|
||||||
{/* Chart Type Selector */}
|
{/* Chart Type Selector */}
|
||||||
<div className="mb-3">
|
<div className="mb-3">
|
||||||
<label className="text-xs font-medium mb-1 block">Chart Type</label>
|
<label className="text-xs font-medium mb-1 block">{translate('::App.Platform.ChartDrawer.ChartType')}</label>
|
||||||
<Field name={`series[${index}].type`}>
|
<Field name={`series[${index}].type`}>
|
||||||
{({ field, form }: FieldProps) => (
|
{({ field, form }: FieldProps) => (
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
|
|
@ -256,20 +256,20 @@ const ChartDrawer = ({
|
||||||
|
|
||||||
{/* Name */}
|
{/* Name */}
|
||||||
<div className="mb-3">
|
<div className="mb-3">
|
||||||
<label className="text-xs font-medium mb-1 block">Name</label>
|
<label className="text-xs font-medium mb-1 block">{translate('::App.Platform.ChartDrawer.Name')}</label>
|
||||||
<Field
|
<Field
|
||||||
size="sm"
|
size="sm"
|
||||||
name={`series[${index}].name`}
|
name={`series[${index}].name`}
|
||||||
type="text"
|
type="text"
|
||||||
component={Input}
|
component={Input}
|
||||||
placeholder="Series name"
|
placeholder={translate('::App.Platform.ChartDrawer.SeriesName')}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Argument Field */}
|
{/* Argument Field */}
|
||||||
<div className="mb-3">
|
<div className="mb-3">
|
||||||
<label className="text-xs font-medium mb-1 block">
|
<label className="text-xs font-medium mb-1 block">
|
||||||
Argument Field (X-Axis)
|
{translate('::App.Platform.ChartDrawer.ArgumentField')}
|
||||||
</label>
|
</label>
|
||||||
<Field name={`series[${index}].argumentField`}>
|
<Field name={`series[${index}].argumentField`}>
|
||||||
{({ field, form }: FieldProps) => (
|
{({ field, form }: FieldProps) => (
|
||||||
|
|
@ -284,7 +284,7 @@ const ChartDrawer = ({
|
||||||
onChange={(option) => {
|
onChange={(option) => {
|
||||||
form.setFieldValue(field.name, option?.value)
|
form.setFieldValue(field.name, option?.value)
|
||||||
}}
|
}}
|
||||||
placeholder="Select field..."
|
placeholder={translate('::App.Platform.ChartDrawer.SelectField')}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</Field>
|
</Field>
|
||||||
|
|
@ -293,7 +293,7 @@ const ChartDrawer = ({
|
||||||
{/* Value Field */}
|
{/* Value Field */}
|
||||||
<div className="mb-3">
|
<div className="mb-3">
|
||||||
<label className="text-xs font-medium mb-1 block">
|
<label className="text-xs font-medium mb-1 block">
|
||||||
Value Field (Y-Axis)
|
{translate('::App.Platform.ChartDrawer.ValueField')}
|
||||||
</label>
|
</label>
|
||||||
<Field name={`series[${index}].valueField`}>
|
<Field name={`series[${index}].valueField`}>
|
||||||
{({ field, form }: FieldProps) => (
|
{({ field, form }: FieldProps) => (
|
||||||
|
|
@ -308,7 +308,7 @@ const ChartDrawer = ({
|
||||||
onChange={(option) => {
|
onChange={(option) => {
|
||||||
form.setFieldValue(field.name, option?.value)
|
form.setFieldValue(field.name, option?.value)
|
||||||
}}
|
}}
|
||||||
placeholder="Select field..."
|
placeholder={translate('::App.Platform.ChartDrawer.SelectField')}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</Field>
|
</Field>
|
||||||
|
|
@ -317,7 +317,7 @@ const ChartDrawer = ({
|
||||||
{/* Summary Type */}
|
{/* Summary Type */}
|
||||||
<div className="mb-3">
|
<div className="mb-3">
|
||||||
<label className="text-xs font-medium mb-1 block">
|
<label className="text-xs font-medium mb-1 block">
|
||||||
Summary Type
|
{translate('::App.Platform.ChartDrawer.SummaryType')}
|
||||||
</label>
|
</label>
|
||||||
<Field name={`series[${index}].summaryType`}>
|
<Field name={`series[${index}].summaryType`}>
|
||||||
{({ field, form }: FieldProps) => (
|
{({ field, form }: FieldProps) => (
|
||||||
|
|
@ -346,12 +346,12 @@ const ChartDrawer = ({
|
||||||
{/* Footer */}
|
{/* Footer */}
|
||||||
<div className="p-4 border-t bg-gray-50 flex gap-2">
|
<div className="p-4 border-t bg-gray-50 flex gap-2">
|
||||||
<Button type="button" variant="plain" onClick={onClose} className="flex-1">
|
<Button type="button" variant="plain" onClick={onClose} className="flex-1">
|
||||||
İptal
|
{translate('::App.Platform.ChartDrawer.Cancel')}
|
||||||
</Button>
|
</Button>
|
||||||
<Button variant="solid" loading={isSubmitting} type="submit" className="flex-1">
|
<Button variant="solid" loading={isSubmitting} type="submit" className="flex-1">
|
||||||
<div className="flex items-center justify-center gap-2">
|
<div className="flex items-center justify-center gap-2">
|
||||||
<FaSave />
|
<FaSave />
|
||||||
{isSubmitting ? translate('::SavingWithThreeDot') : 'Kaydet'}
|
{isSubmitting ? translate('::SavingWithThreeDot') : translate('::App.Platform.ChartDrawer.Save')}
|
||||||
</div>
|
</div>
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -942,6 +942,7 @@ const Grid = (props: GridProps) => {
|
||||||
}
|
}
|
||||||
startEditAction={gridDto.gridOptions.editingOptionDto?.startEditAction}
|
startEditAction={gridDto.gridOptions.editingOptionDto?.startEditAction}
|
||||||
popup={{
|
popup={{
|
||||||
|
animation: {},
|
||||||
title:
|
title:
|
||||||
(mode === 'new' ? '✚ ' : '🖊️ ') +
|
(mode === 'new' ? '✚ ' : '🖊️ ') +
|
||||||
translate('::' + gridDto.gridOptions.editingOptionDto?.popup?.title),
|
translate('::' + gridDto.gridOptions.editingOptionDto?.popup?.title),
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import { useParams, useSearchParams } from 'react-router-dom'
|
||||||
import { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import Container from '@/components/shared/Container'
|
import Container from '@/components/shared/Container'
|
||||||
import Grid from './Grid'
|
import Grid from './Grid'
|
||||||
import { FaChartArea, FaList, FaSitemap, FaTable, FaTh, FaUser, FaCalendarAlt } from 'react-icons/fa'
|
import { FaChartArea, FaList, FaSitemap, FaTable, FaTh, FaCalendarAlt, FaIdCard, FaProjectDiagram } from 'react-icons/fa'
|
||||||
import { useStoreActions, useStoreState } from '@/store/store'
|
import { useStoreActions, useStoreState } from '@/store/store'
|
||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
|
|
@ -15,7 +15,7 @@ import { useCurrentMenuIcon } from '@/utils/hooks/useCurrentMenuIcon'
|
||||||
import { ListViewLayoutType } from '../admin/listForm/edit/types'
|
import { ListViewLayoutType } from '../admin/listForm/edit/types'
|
||||||
import Chart from './Chart'
|
import Chart from './Chart'
|
||||||
import Card from './Card'
|
import Card from './Card'
|
||||||
import { FaChartGantt } from 'react-icons/fa6'
|
import CardView from './CardView'
|
||||||
import GanttView from './GanttView'
|
import GanttView from './GanttView'
|
||||||
import SchedulerView from './SchedulerView'
|
import SchedulerView from './SchedulerView'
|
||||||
|
|
||||||
|
|
@ -124,7 +124,7 @@ const List = () => {
|
||||||
}}
|
}}
|
||||||
title="Gantt Görünümü"
|
title="Gantt Görünümü"
|
||||||
>
|
>
|
||||||
<FaChartGantt className="w-4 h-4" />
|
<FaProjectDiagram className="w-4 h-4" />
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|
@ -171,6 +171,20 @@ const List = () => {
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{gridDto?.gridOptions?.layoutDto.cardView && (
|
||||||
|
<Button
|
||||||
|
size="xs"
|
||||||
|
variant={viewMode === 'cardView' ? 'solid' : 'default'}
|
||||||
|
onClick={() => {
|
||||||
|
setViewMode('cardView')
|
||||||
|
setStates({ listFormCode, layout: 'cardView' })
|
||||||
|
}}
|
||||||
|
title="CardView Görünümü"
|
||||||
|
>
|
||||||
|
<FaIdCard className="w-4 h-4" />
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
|
|
||||||
{gridDto?.gridOptions?.layoutDto.pivot && (
|
{gridDto?.gridOptions?.layoutDto.pivot && (
|
||||||
<Button
|
<Button
|
||||||
size="xs"
|
size="xs"
|
||||||
|
|
@ -237,6 +251,14 @@ const List = () => {
|
||||||
isSubForm={false}
|
isSubForm={false}
|
||||||
gridDto={gridDto}
|
gridDto={gridDto}
|
||||||
/>
|
/>
|
||||||
|
) : viewMode === 'cardView' ? (
|
||||||
|
<CardView
|
||||||
|
listFormCode={listFormCode}
|
||||||
|
searchParams={searchParams}
|
||||||
|
isSubForm={false}
|
||||||
|
gridDto={gridDto}
|
||||||
|
refreshGridDto={refreshGridDto}
|
||||||
|
/>
|
||||||
) : viewMode === 'grid' ? (
|
) : viewMode === 'grid' ? (
|
||||||
<Grid
|
<Grid
|
||||||
listFormCode={listFormCode}
|
listFormCode={listFormCode}
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ import { usePWA } from '@/utils/hooks/usePWA'
|
||||||
import { layoutTypes } from '../admin/listForm/edit/types'
|
import { layoutTypes } from '../admin/listForm/edit/types'
|
||||||
import { useListFormCustomDataSource } from './useListFormCustomDataSource'
|
import { useListFormCustomDataSource } from './useListFormCustomDataSource'
|
||||||
import { useListFormColumns } from './useListFormColumns'
|
import { useListFormColumns } from './useListFormColumns'
|
||||||
|
import { useStoreState } from '@/store'
|
||||||
|
|
||||||
interface PivotProps {
|
interface PivotProps {
|
||||||
listFormCode: string
|
listFormCode: string
|
||||||
|
|
@ -66,6 +67,7 @@ const Pivot = (props: PivotProps) => {
|
||||||
const gridRef = useRef<PivotGridRef>()
|
const gridRef = useRef<PivotGridRef>()
|
||||||
const chartRef = useRef<ChartRef>(null)
|
const chartRef = useRef<ChartRef>(null)
|
||||||
const refListFormCode = useRef('')
|
const refListFormCode = useRef('')
|
||||||
|
const config = useStoreState((state) => state.abpConfig.config)
|
||||||
|
|
||||||
const [gridDataSource, setGridDataSource] = useState<CustomStore<any, any>>()
|
const [gridDataSource, setGridDataSource] = useState<CustomStore<any, any>>()
|
||||||
const [columnData, setColumnData] = useState<GridColumnData[]>()
|
const [columnData, setColumnData] = useState<GridColumnData[]>()
|
||||||
|
|
@ -248,7 +250,7 @@ const Pivot = (props: PivotProps) => {
|
||||||
)
|
)
|
||||||
|
|
||||||
setGridDataSource(dataSource)
|
setGridDataSource(dataSource)
|
||||||
}, [gridDto, searchParams])
|
}, [gridDto, config, searchParams])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
refListFormCode.current = listFormCode
|
refListFormCode.current = listFormCode
|
||||||
|
|
@ -321,9 +323,9 @@ const Pivot = (props: PivotProps) => {
|
||||||
variant={'default'}
|
variant={'default'}
|
||||||
className="text-sm flex items-center gap-1"
|
className="text-sm flex items-center gap-1"
|
||||||
onClick={clearPivotFilters}
|
onClick={clearPivotFilters}
|
||||||
title="Remove Filter"
|
title={translate('::ListForms.ListForm.RemoveFilter')}
|
||||||
>
|
>
|
||||||
<FaTimes className="w-3 h-3" /> Remove Filters
|
<FaTimes className="w-3 h-3" /> {translate('::ListForms.ListForm.RemoveFilter')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
|
|
@ -331,9 +333,9 @@ const Pivot = (props: PivotProps) => {
|
||||||
variant={'default'}
|
variant={'default'}
|
||||||
className="text-sm flex items-center gap-1"
|
className="text-sm flex items-center gap-1"
|
||||||
onClick={resetPivotGridState}
|
onClick={resetPivotGridState}
|
||||||
title="Reset Grid State"
|
title={translate('::ListForms.ListForm.ResetGridState')}
|
||||||
>
|
>
|
||||||
<FaUndo className="w-3 h-3" /> Reset Grid State
|
<FaUndo className="w-3 h-3" /> {translate('::ListForms.ListForm.ResetGridState')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
{checkPermission(gridDto?.gridOptions.permissionDto.u) && (
|
{checkPermission(gridDto?.gridOptions.permissionDto.u) && (
|
||||||
|
|
@ -350,7 +352,7 @@ const Pivot = (props: PivotProps) => {
|
||||||
isPwaMode ? '_self' : '_blank',
|
isPwaMode ? '_self' : '_blank',
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
title="Form Manager"
|
title={translate('::ListForms.ListForm.Manage')}
|
||||||
>
|
>
|
||||||
<FaCog className="w-3 h-3" />
|
<FaCog className="w-3 h-3" />
|
||||||
</Button>
|
</Button>
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@ import { layoutTypes } from '../admin/listForm/edit/types'
|
||||||
import { useListFormCustomDataSource } from './useListFormCustomDataSource'
|
import { useListFormCustomDataSource } from './useListFormCustomDataSource'
|
||||||
import { useListFormColumns } from './useListFormColumns'
|
import { useListFormColumns } from './useListFormColumns'
|
||||||
import { DataType } from 'devextreme/common'
|
import { DataType } from 'devextreme/common'
|
||||||
|
import { useStoreState } from '@/store/store'
|
||||||
|
|
||||||
interface TreeProps {
|
interface TreeProps {
|
||||||
listFormCode: string
|
listFormCode: string
|
||||||
|
|
@ -94,6 +95,7 @@ const Tree = (props: TreeProps) => {
|
||||||
const [widgetGroupHeight, setWidgetGroupHeight] = useState(0)
|
const [widgetGroupHeight, setWidgetGroupHeight] = useState(0)
|
||||||
|
|
||||||
const [expandedRowKeys, setExpandedRowKeys] = useState<any[]>([])
|
const [expandedRowKeys, setExpandedRowKeys] = useState<any[]>([])
|
||||||
|
const config = useStoreState((state) => state.abpConfig.config)
|
||||||
|
|
||||||
const preloadExportLibs = () => {
|
const preloadExportLibs = () => {
|
||||||
import('exceljs')
|
import('exceljs')
|
||||||
|
|
@ -635,7 +637,7 @@ const Tree = (props: TreeProps) => {
|
||||||
}, [gridDto])
|
}, [gridDto])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!gridDto) return
|
if (!gridDto || !config) return
|
||||||
|
|
||||||
const cols = getBandedColumns()
|
const cols = getBandedColumns()
|
||||||
setColumnData(cols)
|
setColumnData(cols)
|
||||||
|
|
@ -648,7 +650,7 @@ const Tree = (props: TreeProps) => {
|
||||||
cols,
|
cols,
|
||||||
)
|
)
|
||||||
setTreeListDataSource(dataSource)
|
setTreeListDataSource(dataSource)
|
||||||
}, [gridDto, searchParams])
|
}, [gridDto, searchParams, config])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const activeFilters = extraFilters.filter((f) => f.value)
|
const activeFilters = extraFilters.filter((f) => f.value)
|
||||||
|
|
@ -1120,6 +1122,7 @@ const Tree = (props: TreeProps) => {
|
||||||
<SearchPanel
|
<SearchPanel
|
||||||
visible={gridDto.gridOptions.searchPanelDto.visible}
|
visible={gridDto.gridOptions.searchPanelDto.visible}
|
||||||
width={gridDto.gridOptions.searchPanelDto.width}
|
width={gridDto.gridOptions.searchPanelDto.width}
|
||||||
|
placeholder={translate('::App.Search')}
|
||||||
></SearchPanel>
|
></SearchPanel>
|
||||||
<Selection
|
<Selection
|
||||||
mode={gridDto.gridOptions.selectionDto?.mode}
|
mode={gridDto.gridOptions.selectionDto?.mode}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import { MULTIVALUE_DELIMITER } from '@/constants/app.constant'
|
||||||
import { TreeListRef } from 'devextreme-react/cjs/tree-list'
|
import { TreeListRef } from 'devextreme-react/cjs/tree-list'
|
||||||
import { GanttRef } from 'devextreme-react/cjs/gantt'
|
import { GanttRef } from 'devextreme-react/cjs/gantt'
|
||||||
import { SchedulerRef } from 'devextreme-react/cjs/scheduler'
|
import { SchedulerRef } from 'devextreme-react/cjs/scheduler'
|
||||||
|
import { CardViewRef } from 'devextreme-react/cjs/card-view'
|
||||||
|
|
||||||
const filteredGridPanelColor = 'rgba(10, 200, 10, 0.5)' // kullanici tanimli filtre ile filtrelenmis gridin paneline ait renk
|
const filteredGridPanelColor = 'rgba(10, 200, 10, 0.5)' // kullanici tanimli filtre ile filtrelenmis gridin paneline ait renk
|
||||||
|
|
||||||
|
|
@ -23,6 +24,7 @@ const useListFormCustomDataSource = ({
|
||||||
| MutableRefObject<TreeListRef<any, any> | undefined>
|
| MutableRefObject<TreeListRef<any, any> | undefined>
|
||||||
| MutableRefObject<GanttRef | undefined>
|
| MutableRefObject<GanttRef | undefined>
|
||||||
| MutableRefObject<SchedulerRef | undefined>
|
| MutableRefObject<SchedulerRef | undefined>
|
||||||
|
| MutableRefObject<CardViewRef | undefined>
|
||||||
}) => {
|
}) => {
|
||||||
const createSelectDataSource = useCallback(
|
const createSelectDataSource = useCallback(
|
||||||
(
|
(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue